C언어 기초 (1) : 입출력, 변수, 정수, 상수

STUDY_J·2024년 6월 21일

참고 (나도코딩) : https://www.youtube.com/watch?v=q6fPjQAzll8&t=4639s

C언어는 기본이 되는 언어

C언어를 배운다면 C++, C#, Java, Python 등의 언어를 쉽게 배울 수 있다.
C언어에서 "포인터"가 가장 어려운 부분이다.

변수, 상수, 입력 ,출력 이란?

실습 : 경찰서 조서 쓰기

cf)
1) c언어에서 주석처리는 // 를 사용한다
여러 문장을 주석처리 하고싶다면, 문장의 시작과 끝에 다음과 같이 작성해준다.

/* 여러 줄의
문장을 주석처리
하고 싶을 때 */

2) main 함수 안의 내용 끝에는 모두 ; 를 붙여준다.

3) 우분투에서 한글로 작성하고 싶다면 shift + spacebar를 눌러주면 한,영 전환이 된다.

정수형 변수

#include <stdio.h>

int main(){
	int age = 12;
	printf("%d\n", age);
    
    age = 13;
    printf("%d\n", age);
	return 0;
}

여기서 %d 는 정수형 값을 출력하라는 의미이다.
그 값은 콤마(,)뒤에 나오는 변수들을 출력한다.
여기서는 콤마 뒤에 age 밖에 없으므로 12가 출력된다.

그 다음 줄인 age = 13에서는 이전에 age를 int로 받아주었기 때문에 int로 지정할 필요가 없다.

위의 코드를 실행한다면 출력값으로는
12
13
이 출력 된다.

우분투에서의 C파일 실행결과

1) gedit printfscanf.c 로 파일을 만들어주고 위 코드를 입력해주고 저장한다.

2) gcc printfscanf.c 로 컴파일을 해준다.

(여기서 의문점 : 이전에 실행했던 hello.c 파일을 먼저 컴파일 했는데, 다시 printfscanf.c 를 컴파일 해주면 아래와 같이 a.out이 마지막으로 컴파일해준 파일로 덮여쓰게 된다.

이를 해결하기 위해서 어떻게 해야할까)

일단 실행은 잘 되는 것 같다.

의문점을 해결하기 위해 구글링을 해본 결과, 각각의 c파일을 독립적으로 컴파일 해주기 위해서는 다음과 같이 코드를 작성하면 된다.

gcc hello.c -o hello
gcc printfscanf.c -o printfscanf

그러면 다음과 같이 실행 파일이 독립적으로 생성되며, 각각 실행을 할 수 있다.

실수형 변수

위 코드에서 주석처리 한 후, 코드를 작성하고 실행해보았다.

#include <stdio.h>

int main(){
	/*int age = 12;
	printf("%d\n", age);
	
	age = 13;
	printf("%d\n", age);
	return 0;*/
	
	//실수형 변수에 대한 예제
	float f = 46.5f;
	printf("%f\n", f);
    
    /* 이렇게 출력하게 되면 숫자뒤에 0이 많이 출력된다.
    0을 원하는 만큼 출력하고 싶다면 다음과 같이 작성하면 된다.
    f 앞에 .원하는 만큼의 소수점 자리수 를 입력*/
    
    //printf("%.2f\n", f);
	return 0;
}

실수형에는 float 말고 double도 있다.

  • 차이점

  • 정밀도(Precision):
    float: 단정밀도(single precision) 부동 소수점 형식으로, 약 6-7자리의 십진수 정밀도를 가집니다.
    double: 배정밀도(double precision) 부동 소수점 형식으로, 약 15자리의 십진수 정밀도를 가집니다.

  • 메모리 크기(Size):
    float: 4바이트(32비트)를 사용합니다.
    double: 8바이트(64비트)를 사용합니다.

  • 사용 예시:

    • float는 메모리 사용을 최소화해야 하는 상황이나 높은 정밀도가 필요하지 않은 경우에 사용됩니다.
    • double은 더 높은 정밀도가 필요한 경우에 사용됩니다.
    • float 리터럴에는 f를 붙인다: 3.14f (float), 3.14 (double).
    • double 리터럴에는 아무것도 붙이지 않는다: 3.14 (double).

상수

상수는 변하지 않는 수이다.
한 번 정의하면 바뀌지 않는다.

#include <stdio.h>

int main(){
	/*int age = 12;
	printf("%d\n", age);
	
	age = 13;
	printf("%d\n", age);
	return 0;*/
	
	//실수형 변수에 대한 예제
	/*float f = 46.5f;
	printf("%.2f\n", f);
	
	double d = 4.428;
	printf("%.2lf\n", d);*/
	
	int YEAR = 2000;
    
    /*여기서 YEAR는 정수로 받아왔다.
    이 아래에 YEAR = 2001; 이 있다면
    밑의 출력값은 2001 로 바뀌게 된다.*/
    
	printf("태어난 년도 : %d\n", YEAR);
	
    //하지만 아래처럼 int 앞에 const를 붙여 상수로 정의 해주면 YEAR는 바꿀 수 없는 변수로 정의된다.
    
    //const int YEAR = 2000;
    //printf("태어난 년도 : %d\n", YEAR);
	return 0;
}

scanf

키보드 입력을 받아서 저장하는 것
(python에서 input() 과 같은 의미)

#include <stdio.h>

int main(){

	int input;
	printf("Enter value : ");
	scanf("%d", &input);
	printf("value : %d\n", input);
	
	return 0;

}
  • 주의할 점: input 앞에 & 표시는 input이라는 변수가 정의된 곳에 값을 입력받겠다는 의미이므로 꼭 써주어야 한다.

여러개의 정수를 받고 싶을 때

#include <stdio.h>

int main(){

	/*int input;
	printf("Enter value : ");
	scanf("%d", &input);
	printf("value : %d\n", input);*/
	
	int one, two, three;
	printf("Enter 3 int valuee : ");
	scanf("%d %d %d", &one, &two, &three);
	printf("First : %d\n", one);
	printf("Second : %d\n", two);
	printf("Third : %d\n", three);
	
	return 0;

}

문자와 문자열을 출력하고 싶을 때

#include <stdio.h>

int main(){

	/*int input;
	printf("Enter value : ");
	scanf("%d", &input);
	printf("value : %d\n", input);*/
	
	/*int one, two, three;
	printf("Enter 3 int valuee : ");
	scanf("%d %d %d", &one, &two, &three);
	printf("First : %d\n", one);
	printf("Second : %d\n", two);
	printf("Third : %d\n", three);*/
	
	char c = 'A';
	printf("%c\n", c);
	
	char str[256];
	//scanf("%s", str, sizeof(str));
	scanf("%255s", str);
	printf("%s\n", str);

	
	return 0;

}

문자열을 출력시 %s 를 사용한다.
문자 출력시에는 %c 를 사용.

입력을 할 때 띄어쓰기를 하면 그 이후의 문자는 사라진다.

  • 주의점 : 우분투와 같은 리눅스 배포판에서는 scanf_s 를 지원하지 않는다.

프로젝트

  • 경찰관이 범죄자의 정보를 입수 (조서작성)
    (이름, 나이, 몸무게, 키, 범죄명)
#include <stdio.h>

int main(){

	char name[256];
	printf("What's your name?");
	scanf("%s", name);
	
	int age;
	printf("Age?");
	scanf("%d", &age);
	
	float weight;
	//int weight으로 작성했었지만 소수점을 나타내기 위해 flaot 사용
	printf("Weight?");
	scanf("%f", &weight);
	
	float height;
	//int weight으로 작성했었지만 소수점을 나타내기 위해 flaot 사용
	printf("Height?");
	scanf("%f", &height);
	
	char crime[256];
	printf("Crime?");
	scanf("%s", crime);
	
	//Information of criminal
	printf("\n\n---Information of criminal---\n\n");
	printf("Name : %s\n", name);
	printf("Age  : %d\n", age);
	printf("Weight  : %f\n", weight);
	printf("Height  : %f\n", height);
	printf("Crime  : %s\n", crime);
	
	return 0;


}

- 주의점 : scanf에서 숫자를 불러올 때는 꼭 &를 앞에 붙여주어야 한다.

실행결과

0개의 댓글