1장: C언어 소개

2011-04-03 23:16:01 +0900 -
C

1장에서는 아래의 내용을 설명할 것입니다:

  • main(), printf()
  • = 연산자
  • 정수형의 변수를 생성하고 화면에 값을 출력하기

간단한 C 예제

#include <stdio.h>
int main(void) {
	/* 나의 첫 프로그램 */
	int num; /* num이라는 정수형 변수를 선언합니다 */
	num = 1; /* num 변수에 1을 넣습니다 */
	printf("이 프로그램은 첫 번째 "); /* printf() 함수를 사용합니다 */
	printf("예제입니다.\n");
	printf("제가 가장 좋아하는 숫자는 %d 입니다. 그 이유는 첫 번째 숫자이기 때문입니다.\n", num);
	return 0;
}
< 출력 화면 >
이 프로그램은 첫 번째 예제입니다.
제가 가장 좋아하는 숫자는 1 입니다. 그 이유는 첫 번째 숫자이기 때문입니다.

예제에 대한 설명

1. #include
#include <stdio.h>

stdio.h라는 파일을 불러와 소스 코드에 삽입합니다.

stdio.h를 불러오게 되면 printf(), scanf(), puts(), gets()과 같은 입출력 함수를 사용할 수 있습니다.

참고로 stdio는 Standard Input Output의 약자입니다.

studio.h로 입력하지 않도록 조심합시다.

2. main()
int main(void) {
}

C 프로그램은 main 함수부터 실행을 시작합니다.

{ } 안에 실행하고 싶은 명령들을 작성합니다.

3. 주석
/* 나의 첫 프로그램 */

/* */으로 주석을 달수 있습니다. 주석은 어디든지 사용 가능하며 /**/사이에 있는 내용은 컴파일러에게 무시되어 실행되지 않습니다.

 /* 주석입니다 */

 /* 이렇게 나누어서
 두 줄로 사용해도 됩니다. */

 /*
	이렇게도 사용 가능합니다
 */

 /* 하지만 이건 주석의 끝이 없기 때문에 잘못된 주석입니다.

C99에서 아래와 같은 스타일의 주석이 추가되었습니다. //는 한 줄의 주석을 추가할 수 있습니다.

//  한 줄만 작성할 수 있는 주석입니다.
int age;	// 여기에도 작성 가능합니다.
예)
#include <stdio.h>
int main(void) {
	printf("Hello ");
	//printf("world.");
	return 0;
}
< 출력 화면 >
Hello
4. 선언
int num;

데이터를 저장하는 공간인 ‘변수’를 선언합니다.

자료형 변수명 [ = 초기값];

형태로 선언 가능합니다.

변수의 이름은 최대한 의미 있는 이름을 지어줍니다.

나쁜예)
int main() {
	int a;
	int b;
	a=170;
	b=58;
}
좋은예)
int main() {
	int height; // 키
	int weight; // 몸무게
	height=170;
	weight=58;
}
예)
int main() {
	int cats;
	int dogs;
	cats=10;
	dogs=4;
}
int main() {
	int cats;
	cats=10;
	int dogs;
	dogs=4;
}
int main() {
	int cats;
	int dogs;
	cats=10;
	dogs=4;
}
int main() {
	int cats=10, dogs=4;
}
자료형의 종류
자료형 이름 범위
문자형 char -128 ~ 127
정수형 (signed) signed char -128 ~ 127
  signed short -32,768 ~ 327,67
  signed int –2,147,483,647 ~ 2,147,438,647
  signed long –2,147,483,647 ~ 2,147,438,647
  signed long long –9,223,372,036,854,775,807 ~ 9,223,372,036,854,775,807
정수형 (unsigned) unsigned char 0 ~ 255
  unsigned short 0 ~ 65,535
  unsigned int 0 ~ 4,294,967,295
  unsigned long int 0 ~ 4,294,967,295
  unsigned long long 0 ~ 18,446,744,073,709,551,615
부동소수점 float +/- 3.4e +/- 38 (~7 digits)
  double +/- 1.7e +/- 308 (~15 digits)
  long double +/- 1.7e +/- 308 (~15 digits)

위의 범위를 초과하게 되면 오버플로(Overflow)가 발생하게 됩니다.

예를 들면 int의 범위인 2147483647에서 1을 추가하게 되면 -2147483648가 됩니다.

/* overflow.c */
#include <stdio.h>
int main(void) {
	int i = 2147483647;
	printf("i = %d\n", i);
	printf("i = %d\n", i + 1);
	printf("i = %d\n", i + 2);
	return 0;
}
< 출력 화면 >
i = 2147483647
i = -2147483648
i = -2147483647
5. printf() 함수
printf("이 프로그램은 첫 번째 ");
printf("예제입니다.\n");
printf("제가 가장 좋아하는 숫자는 %d 입니다. 그 이유는 첫 번째 숫자이기 때문입니다.\n", num);

printf() 함수는 문자열을 화면에 출력하기 위해 사용됩니다.

아래와 같이 사용할 수 있습니다.

printf("이 부분에 화면에 출력할 내용이 들어갑니다.");`

%d 부분은 서식 문자라고 합니다.

아래의 소스 코드에서 %d 부분에는 age 변수의 내용이 출력됩니다.

printf("제 나이는 %d 살입니다.\n", age);

서식문자는 여러개 사용가능합니다.

printf("제 키는 %dcm이고 몸무게는 %dkg입니다.\n", height, weight);

%d말고도 아래와 같은 서식들이 있습니다.

서식의 종류
서식 의미 설명
%d 또는 %i Decimal, Integer 10진 정수로 출력
%o Octal 8진 정수로 출력
%x 또는 %X heXadecimal 16진 정수로 출력
%u Unsigned 부호가 없는 10진 정수로 출력
%c Character 1개의 문자 출력
%s String 문자열 출력
%f Float 고정 소수점 형식의 실수로 출력
%e 또는 %E   부동 소수점 형식의 실수로 출력
%g 또는 %G   %e, %f중 더 짧은 형식으로 출력
%p Pointer 포인터의 번지값을 출력
%n   출력된 문자 개수를 포인터 변수에 대입
%%   % 문자 출력

%dd앞에 숫자를 입력하면 입력한 숫자의 칸만큼 표시합니다.

주로 숫자가 많이 들어가는 형식에서 출력할 때 사용하면 좋습니다.

#include <stdio.h>
int main(void) {
	int num;
	printf("카드 사용 내역\n");
	printf("%2d월 %02d일 : %6d원\n", 1, 1, 101520);
	printf("%2d월 %02d일 : %6d원\n", 9, 23, 1500);
	printf("%2d월 %02d일 : %6d원\n", 10, 1, 500);
}
< 출력 화면 >
카드 사용 내역
 1월 01일 : 101520원
 9월 23일 :   1500원
10월 01일 :    500원

부동소수점 같은 경우에는 위에서 설명한 %d처럼 전체 자릿수를 지정할 수도 있고 소수점 몇 번째 자리까지 출력할 것인지 정할 수 있습니다.

#include <stdio.h>
int main(void) {
	double pi = 3.14159265359;
	printf("%f\n", pi);
	printf("%.3f\n", pi);
	printf("%.5f\n", pi);
	printf("%.7f\n", pi);
	printf("%f\n", pi);
	printf("%10.3f\n", pi);
	printf("%010.5f\n", pi);
	printf("%-10.7f\n", pi);
}
< 출력 화면 >
3.141593
3.142
3.14159
3.1415927
3.141593
     3.142
0003.14159
3.1415927

\n은 줄 바꿈을 의미하며 이를 ‘이스케이프 시퀀스’라고 합니다.

이스케이프 시퀀스
시퀀스 의미
\a 벨(경고)
\b 백스페이스
\f 폼 피드
\n 줄 바꿈
\r 캐리지 리턴
\t 가로 탭
\v 세로 탭
\' 작은따옴표
\" 큰따옴표
\\ 백슬래시
\? 리터럴 물음표
\ ooo 8진수 표기법의 ASCII 문자
\x hh 16진수 표기법의 ASCII 문자
\x hhhh 이 이스케이프 시퀀스가 와이드 문자 상수 또는 유니코드 문자열 리터럴에 사용되는 경우 16진수 표기법의 유니코드 문자입니다.
예를 들어 WCHAR f = L’\x4e00’ 또는 WCHAR b[] = L”The Chinese character for one is \x4e00”로 이름을 지정할 수 있습니다.
5. Return Statement
return 0;

함수의 작동이 끝나고 값을 반환합니다.

이 예제에서는 main() 함수가 종료되고 0을 반환합니다.

자세한 내용은 뒤에서 설명하겠습니다.