프로그래밍 1 1 Chapter 6. Functions and Program Structure April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj
이장의강의목표 2 문자의입력방법을이해한다. 중첩된 if문을이해한다. while 반복문의사용법을익힌다. do 반복문의사용법을익힌다. 중첩된반복문을이해한다. break문의사용법을익힌다. continue문의사용법을익힌다. switch문의사용법을익힌다. goto문의사용법을익힌다. 이장의결론
문자의입력 (1/3) 3 문자입력 line_buffering.c char ch; for (;;) printf( \renter characters : "); ch = getchar(); printf("\n\ryou typed: %c\n", ch); scanf("%c", &ch); F 키보드에서 A 를입력해보세요. 실제수행시켜보면예상과는조금다르게동작.. è line buffer 입력방식때문
문자의입력 (2/3) 4 computer buffer buffer buffer A BC\r buffer F 컴퓨터는다양한장치 (device) 를사용한다. F 대부분의장치 (device) 는버퍼라는메모리공간을갖는다. F keyboard 에서 A 를입력하면? keyboard 에서 BC 를입력하면? keyboard 에서 Enter 를입력하면? F 언제 keyboard 버퍼의내용을컴퓨터의 CPU( 결국응용 ) 로전달할것인가? è no buffering, line buffering, full buffering
문자의입력 (3/3) 5 라인버퍼링을사용하지않는문자입력방식 no_buffering.c no_buffering2.c #include <curses.h> char ch; initscr(); for (;;) printf("enter characters : "); ch = getchar(); printf("\nyou typed: %c\n", ch); endwin #include <unistd.h> #include <termios.h> struct termios old_tio, new_tio; char ch; tcgetattr(stdin_fileno,&old_tio); new_tio=old_tio; new_tio.c_lflag &=(~ICANON & ~ECHO); tcsetattr(stdin_fileno,tcsanow,&new_tio); for (;;) printf("enter characters : "); ch = getchar(); printf("\nyou typed: %c\n", ch); tcsetattr(stdin_fileno,tcsanow,&old_tio); F 역시키보드에서 A 를입력해보세요. F 버퍼링방식제어가능 (canonical mode) F 그런데.. 장치에버퍼공간은왜필요할까?
중첩된 if 문 6 if 문내부에또다른 if 문사용가능 ü ü 들여쓰기가중요 잘못된들여쓰기의예 if (a) if (b) printf("a and b are true\n"); else printf("to which statement does this else apply?"); if (a) if (b) printf("a and b are true\n"); else printf("to which statement does this else apply? è b"); 구분해서사용 if (a) if (b) printf("a and b are true\n"); else printf("to which statement does this else apply? è a");
반복문의여러형태 7 for 반복문의융통성 for_type.c #include <conio.h> int i; char ch; printf("enter an integer: "); scanf("%d", &i); for (; i; i--) printf("%d\n", i); for (i=1; i<11; ) printf("%d\n", i++); for (i=11; i<11; i++) printf("%c\n", '\a');
while 반복문 8 형식 while (expression) statement; 1 에서 10 까지의합은? while_sum.c int i = 1; int total = 0; for 문은 while 문으로변화가능 for (i=0; i<10; i++) statements; i=0; while (i<10) statements; i++; while(i < 10) total = total + i; i++; printf("total = %d\n", total);
do 반복문 (1/2) 9 형식 do statement; while (expression); 1 에서 10 까지의합은? do_sum.c int i = 1; int total = 0; do total = total + i; i++; while(i < 10); printf("total = %d\n", total); for, while, do-while 변화가능 for (i=0; i<10; i++) statements; i=0; while (i<10) statements; i++; i=0; do statements; i++; while (i<10);
do 반복문 (2/2) 10 형식 do_getchar.c #include <unistd.h> #include <termios.h> struct termios old_tio, new_tio; char ch; tcgetattr(stdin_fileno,&old_tio); new_tio=old_tio; new_tio.c_lflag &=(~ICANON & ~ECHO); tcsetattr(stdin_fileno,tcsanow,&new_tio); do printf("enter characters : "); ch = getchar(); printf("\nyou typed: %c\n", ch); while (ch!= 'q'); tcsetattr(stdin_fileno,tcsanow,&old_tio); F do 반복문이 for 나 while 반복문과다른점은? 위예제를 while 반복문으로수정해보세요.
중첩된반복문 (1/2) 11 블록내에는어떠한문장도사용할수있다! for_block_01.c int i, j; int sum; for (i=1; i<=10; i++) sum = 0; for (j=1; j<=i; j++) sum = sum + j; printf("the sum from 1 to %d = %d\n", i, sum); for (i=0; i<26; i++) printf("%2c", 'A'+i);
중첩된반복문 (2/2) 12 블록내에는어떠한문장도사용할수있다! for_block_02.c int i, j; for (i=1; i<=5; i++) for (j=1; j<=(5-i); j++) printf(" "); for (j=1; j<=(2*i-1); j++) printf("*"); printf("\n");
break 문 (1/2) 13 반복문의밖으로제어이동 WhenOver5000.c int main(void) int sum=0, num=0; while(1) sum+=num; if(sum>5000) break; num++; printf("sum: %d \n", sum); printf("num: %d \n", num);
break 문 (2/2) 14 중복된반복문에서는? For_break.c int i,j; for (i=1; i<10; i++) for (j=1; j<10; j++) printf("(%d, %d) ", i, j); if (j == 5) break; printf("\n");
continue 문 15 반복문의조건확인위치로제어이동 For_break2.c int main(void) int num; printf("start! "); for(num=0; num<20; num++) if(num%2==0 num%3==0) continue; printf("%d ", num); printf("end! \n"); F continue 문은예외처리에서많이사용
switch 문 (1/4) 16 switch: 다중선택문 ( 보통 3 이상선택가능할때사용 ) EnglishSchool.c int main(void) int num; printf("1 이상 5 이하의정수입력 : "); scanf("%d", &num); switch(num) case 1: printf("1 은 ONE \n"); break; case 2: printf("2 는 TWO \n"); break; case 3: printf("3 은 THREE \n"); break; case 4: printf("4 는 FOUR \n"); break; case 5: printf("5 는 FIVE \n"); break; default: printf("i don't know! \n");
switch 문 (2/4) 17 주의사항 ü ü ü ü switch문은 char와 int만사용가능 case 문에두개이상의같은상수를사용할수없음 case 문과관련된문장들은반드시중괄호를사용할필요가없음반드시 break를사용할필요는없음
switch 문 (3/4) 18 AdvancedEnglishSchool.c int main(void) char sel; printf("m 오전, A 오후, E 저녁 \n"); printf(" 입력 : "); scanf("%c", &sel); switch(sel) case 'M': case 'm': printf("morning \n"); break; case 'A': case 'a': printf("afternoon \n"); break; case 'E': case 'e': printf("evening \n"); break; // 사실불필요한 break 문!
switch 문 (4/4) 19 연습문제 : ü 영문자를입력받아자음 / 모음을구별하는프로그램작성 vowel.c char ch; printf("\nenter the letter: "); ch = getchar(); switch (ch) case 'a': case 'e': case 'i': case 'o': case 'u': default: printf(" is a vowel\n"); break; printf(" is a constant\n");
goto 문 20 임의의위치로제어이동 ( 무조건분기 ) GoToBasic.c int main(void) int num; printf(" 자연수입력 : "); scanf("%d", &num); if(num==1) goto ONE; else if(num==2) goto TWO; else goto OTHER; ONE: printf("1 을입력하셨습니다! \n"); goto END; TWO: printf("2 를입력하셨습니다! \n"); goto END; OTHER: printf("3 혹은다른값을입력하셨군요! \n"); END: 레이블
이장의결론 21 문자의입력방법인 getchar() 를배움 Buffering에대한이해 while, do 반복문의사용법이해 break, continue 문의사용법이해 switch, goto 문의사용법이해