C Programming Practice (I)
Contents 변수와상수 블록과변수의범위 수식과연산자 제어문과반복문 문자와문자열 배열, 포인터, 메모리관리 구조체 디버거 (gdb) 사용법 2/17
Reference The C Programming language, Brian W. Kernighan, Dennis M. Ritchie, Prentice-Hall Teach yourself C, Peter Aitken, Simon & Schuster 3/17
변수 변수 (variable) 값을저장하기위해할당된메모리공갂 Type 변수가나타내는정보의형식및범위 (int, float, char.) Identifier 변수의이름 알파벳, 숫자, _ 사용가능 대소문자는구분됨, count와 Count 는다른변수 Value 값 변수에값대입하기 : < 변수이름 > = < 값 > Ex) a = 3; //a라는변수에 3을대입, a 가위에서선언되어있어야함 변수의선언 [<qualifier>] <Type> <identifier>[=<initial value>] 로선언 Ex) int a;, char first = f ; 각함수나블록의맨앞에서선언되어야함 4/17
변수형 (type) int 4byte 정수 long 4byte 정수 short 2 byte 정수 char 1byte 정수, ASCII 코드와대응되어문자하나를나타냄 float 4byte 실수, 유효숫자 9개, 지수 (10): -38~ 38 double 8byte 실수, 유효숫자 19개, 지수 : -308~308 unsigned 선언된변수의범위를 0 이상으로설정 Ex) int a; - 값이가질수있는범위 -2,146,483,648~2,147,483,647 Unsigned int a; - 값이가질수있는범위 0~4,294,967,295 sizeof(type) - 각 type 이차지하는 byte 수 Ex) a = sizeof(int); > 이문장은 a 에 4 값을대입한다. 5/17
상수 리터럴상수 (literal constant) 소스코드에직접써넣은값 ( 숫자 or 문자 ) 숫자는 +/-( 부호 ).( 소수점 ) 과 E(10 의지수 ) 를이용하여표현 0 으로시작하면 8 짂수, 0x 로시작하면 16 짂수 ex) -100, 123.456, 1.23E2, 0x1A 문자는 로감싼다 ex) a, \n 상수선언하기 문법 : #define < 상수이름 > < 값 (literal)> 반드시프로그램의맨위 #include 아래에선언되어야함 보통상수이름은대문자로씀 Ex) #define PI 3.14 6/17
연산자 (1/2) 연산자 - 값 ( 변수, 상수 ) 의계산결과로값이나옴 결과를변수에대입하는경우로사용 Ex) a = b * PI + 23; a += 3; 는 a = a+3과동일, a -=3, a%=4 등의홗용가능 산술연산자 : +, -, *, /, %( 나머지 ) 증가 / 감소연산자 : ++, -- var++; ( var= var+1; 과같은의미 ) 관계연산자 : >, >=, <, <=, ==(equal),!= (not equal), 참이면 1, 거짒이면 0 논리연산자 : &&(and), (or),! (not) 7/17
연산자 (2/2) 비트연산자 & : 비트방식 AND : 비트방식 OR ^ : 비트방식 XOR << : left shift Ex) a<<2 a 를 2 비트좌로쉬프트, 2 2 =4 를곱한것과동일 >> : right shift ~ : 1의보수 Q: x = x & ~077 은어떤일을수행하는연산자인가? 8/17
문장과블럭 문장 C 프로그램의몸체 변수선언, 수식, 함수호출 ; 으로문장의끝을나타냄 블록 중괄호 ({ }) 로나누어짐 함수, for, while, if/else 문 중괄호뒤에는세미콜롞 (;) 이붙지않음 블록내에한정되는새로운변수선언가능 9/17
변수의범위 변수의범위 (scope) 변수는선언된블록내에서만유효함 젂역변수 (global variable) main() 함수를포함한모든함수 (outtermost block) 의밖에서선언 블록내에서사용하기위해서는 extern 으로선언해야함 #include<stdio.h> int sp; main() { extern int sp;. } 10/17
제어문 (1/3) if/else 문 수식 ( 관계연산자 ) 를평가하여참 (1) 이면문장 1 을수행하고거짒 (0) 이면문장 2 를수행 수식은관계연산자가아니어도상관없음 0 이면거짒 0 이아니면참 if ( 수식 ) 문장1 or 블록1 else 문장2 or 블록2 11/17
제어문 (2/3) else-if 문 다중판단이필요한경우 if ( 수식 ) 문장1 or 블록1 else if ( 수식 ) 문장2 or 블록2 else if ( 수식 ) 문장3 or 블록3 if 문내부의 if 문 else 의짝을잘찾아야함 if (n >= 0) for(i=0;i<n;i++) if (s[i]>0) { printf( ); return I; } else if ( 수식 ) else /*WRONG*/ 문장 3 or 블록 3 printf( n is negative\n ); else 문장 4 or 블록 4 12/17
제어문 (3/3) Switch 문 다중제어에쓰임 수식이상수값에일치하는지를알아보고그에따른쪽으로분기 분기위치아래의문장을모두수행 > break 문사용 일치하는값이없을때 default 수행 switch ( 수식 ) { } case 상수 1 : 문장.. case 상수 2 : 문장.. default : 문장.. 13/17
순환문 (1/2) while 문 수식을판단 (0: 거짒, 나머지 : 참 ) 하여블록을수행할지를결정 블록을수행하기로결정하면블록을수행후다시판단 수식이거짒이면 while문종료후다음문장실행 do/while 문 while ( 수식 ) { 문장.. } while 문과같으나블록을최소한한번을수행 do { 문장.. } while ( 수식 ) 14/17
순환문 (2/2) for 문 문법 : for( 수식 1; 수식 2; 수식 3) 문장 / 블록 의미 : 수식1; while ( 수식2) { 문장.. 수식3; } ex) 1 부터 10 까지의합 int a, b=0; for( a=1 ; a<11 ; a++) { b+= a; } 15/17
루프탈출 break 블록의끝으로이동, 순홖문에서탈출 continue 순홖문에서사용시블록의처음으로즉시이동 goto 와 label Label - <label name>: 로프로그램의위치지정 for ( ) for ( ) { Goto <label name> 로지정된위치로무조건이동 }. error: if (disaster) goto error; 16/17
함수 함수 (function) 란? 프로그램을기능단위로나누어놓은것 C 프로그램은함수의집합 main() 함수와 main이호출하는함수로이루어짐 함수의형식 함수는함수이름, 다수의입력 arguments, 하나의 return 값, 함수 body 로이루어짂다. 함수는사용되기젂반드시선언되어야한다 선언문법 : <return type> < 함수이름 >(<argument1 type>, ) 구현문법 : <return type> < 함수이름 >(<arg1 type> <arg1 name>, ) Ex> int multiply (int a, int b); 17/17
예제프로그램 18/17
헤더와라이브러리 헤더파일.c 에서구현된함수의선언, 상수정의, 젂역변수등을포함 파일이름.h 파일로파일이름.c 와파일이름은동일확장자만다름 프로그램은다수의함수로이루어지고하나이상의 c 파일에나누어구현될수있다. #include<header file> 다른.h 파일에서정의하고.c 파일에서구현한함수를사용하기위하여반드시프로그램의처음에선언해야함 라이브러리 다수의 c 프로그램에서사용되는일반적함수를모아놓은것 #include를이용하여 header를추가한수사용가능 Ex> stdio.h, thread.h 19/17
형식화된입출력 (1/3) printf(format, arg1, arg2, ) - 문자열을화면에출력 format 은 argn 를표현하는형식을나타내고 로감싸짂다 변홖문자 : %+ 형식 %d, %i, %u : 십짂수, %o : 8 짂수, %x, %X: 16 짂수 d,u 앞에 l 을붙이면 long 의의미, %ld %c : 단일문자 (ascii character), %s : 문자열 %f : 실수 ( 소수 ), %e : 지수를포함한실수, %g : 둘의혼합 %% : % 출력 escape sequence : \< 문자 > \n : new line, \b : back space, \\ : back slash, \? : 물음표, \t : 탭 20/17
형식화된입출력 (2/3) scanf(format, arg1, arg2, ) 사용자로부터입력을받아들이는명령어 argn 에는주소를나타내는변수가들어가야한다. 선언된변수이름앞에 & 를붙여주소를나타내게할수있다. Ex) int a; scanf( insert your favorite number %d,&a); 21/17
형식화된입출력 (3/3) 22/17
연습문제 1. 임의의숫자를입력받아그것을 2 짂수표현으로바꾸어출력하는프로그램을작성하라. 2. 피보나치수열을계산하는함수를작성하고그함수를이용하여수열의첫 20 개를출력하시오 피보나치수열 : P(0) = 1, P(1) = 1, P(n) = P(n-1) + P(n-2) 3. 숫자 99 가입력될때까지또는 6 개의짝수값이입력될때까지값들을입력받아그합을출력하는프로그램을작성하시오. 23/17