김서형 : 010 9320-8604
조건문복습 : 오름차순 세수를입력받아오름차순으로정리하는프로그램을만들어보자. (ex) 세정수를입력하세요 : 7 3 9 ( 입력 ) 올림차순으로출력합니다 == 3 7 9 ( 변수값출력 )
알고리즘 어떤경우든 a<b<c 가되어야한다. [a 를먼저비교하여가장작게만드는것을중심으로시작한다. ] a<c<b 일때, b > c 이므로 b 와 c 를변경 b<a<c 일때, a > b 이므로 a 와 b 를변경 c<b<a 일때, a 와 c 자리만바꾸면 a<b<c 가된다. b<c<a 일때, a 가가장크므로가장작게 (a 와 b 를변경 ) -> a<c<b 다시 b 와 c 를변경 c<a<b 일때, a > c 이므로 a 와 c 를변경 -> a<c<b 다시 b 와 c 를변경 If(a>b) a 와 b 변경 If(a>c) a 와 c 변경 If(b>c) b 와 c 변경
핵심예제소스 #include <stdio.h> int main() int a,b,c,temp; printf(" 세정수를입력하세요 :"); scanf("%d %d %d",&a,&b,&c); if(a>b) temp = a; a = b; b = temp; if(a>c) temp = a; a = c; c = temp; if(b>c) temp = b; b = c; c = temp; printf(" 올림차순으로출력합니다 == %d %d %d",a,b,c); return 0;
switch 문 여러가지경우중에서하나를선택하는데사용 switch( 조건식 ) case c1: 문장 1; break; case c2: 문장 2; break;...... case cn: 문장 n; break; default: 문장 d; break; 제어식의값이 c1 이면실행된다. 제어식의값이 c2 이면실행된다. 일치하는값이없으면실행된다.
switch 문의순서도 case c1 case c1 case c2 case c2 거짓 참 참 문장1 문장1 문장2 문장2 break break break break 거짓... case cn case cn 거짓 참 문장n 문장n break break default default
예제 #include <stdio.h> int main() int number; printf(" 정수를입력하시오 :"); scanf("%d", &number); switch(number) case 0: printf(" 없음 \n"); break ; case 1: case 2: printf(" 하나 \n"); break ; printf(" 둘 \n"); break ; default: printf(" 많음 \n"); break; 정수를입력하시오 : 1 하나
사용자가 1 을입력하는경우 1 switch(number) case 0: case 1: case 2: printf(" 없음 \n"); break ; printf(" 하나 \n"); break ; printf(" 둘 \n"); break ; default: printf(" 많음 \n"); break;
break 가생략되는경우 1 switch(number) case 0: printf(" 없음 \n"); break ; case 1: printf(" 하나 \n"); break 를만날때까지계속문장을실행합니다. case 2: printf(" 둘 \n"); break ; default: printf(" 많음 \n"); break;
의도적인 break 생략 switch(number) case 0: printf(" 없음 \n"); break; case 1: printf(" 하나 \n"); break; case 2: case 3: printf(" 두서너개 \n"); break; 2 개의경우를하나로묶어서처리하기위하여이러한기법을사용 ( or 쓰지않아도됨 ) default: printf(" 많음 \n"); break;
default 문 5 switch(number) case 0: printf(" 없음 \n"); case 1: break ; printf(" 하나 \n"); break ; case 2: printf(" 둘 \n"); default: break ; printf(" 많음 \n"); break; 어떤 case 문과도일치되지않는경우에선택
switch 문과 if-else 문 #include <stdio.h> int main() int number; printf(" 정수 1 개입력 : "); scanf("%d", &number); if( number == 0 ) printf(" 없음 \n"); else if( number == 1 ) printf(" 하나 \n"); else if( number == 2 ) printf(" 둘 \n"); else printf(" 많음 \n"); switch(number) case 0: printf(" 없음 \n"); break; case 1: printf(" 하나 \n"); break; case 2: printf(" 둘 n"); break; default: printf(" 많음 \n"); break;
핵심예제 : 달의일수출력 특정한달을입력하면그달의일수를출력하는프로그램을작성한다. 예를들어서 12 월을입력하면 31 일을출력한다. 알고리즘 2 월이면 28 일 4,6,9,11 월이면 30 일 그외 31 일. Switch( 몇월? ) case 2 : case 4: case 6: case 9: case 11: default
#include <stdio.h> int main() int month, days; 예제 ( 달의일수계산 ) printf(" 달을입력하시오 : "); scanf("%d", &month); switch(month) case 2: days = 28; break; case 4: case 6: case 9: case 11: days = 30; break; default: days = 31; break; printf("%d 월의일수는 %d 입니다.\n", month, days); default 가마지막이므로여기서는 break 문없어도됨 달을입력하시오 : 12 12 월의일수는 31 입니다. return 0;
Lab: 계산기만들기 #2 앞의산술계산기예제를 switch 문을이용하여다시작성하여보자. +, -, *, /, % 연산을할수있는프로그램을제작하여보자. 알고리즘 scanf("%d %c %d", & 첫숫자, & 연산자, & 두번째숫자 ); switch( 연산자 ) case '+': case '-':
#include <stdio.h> int main() 실습 : 산술계산기 char op; int x, y, result; printf(" 수식을입력하시오 \n"); printf("( 예 : 2 + 5) \n"); printf(">>"); scanf("%d %c %d", &x, &op, &y); switch(op) case '+': case '-': result = x + y; result = x - y; // 이부분을마저채워보세요 break; break; default: printf(" 지원되지않는연산자입니다. "); break; printf("%d %c %d = %d ", x, op, y, result); return 0; 수식을입력하시오 ( 예 : 2 + 5) >>2 + 5 2 + 5 = 7
Lab: 학점평가하기 사용자로부터학점을입력받아서, A 학점이면 Excellent 를출력하고 B 학점이거나 C 학점이면 Good, D 학점이면 Poor, F 학점이면 Fail, 그외의값이들어오면 잘못된입력입니다. 를출력하는프로그램을 switch 문을이용하여작성해본다.
소스 #include <stdio.h> int main () char grade; printf(" 학점을입력하시오 : "); scanf("%c", &grade); switch(grade) case 'A' : printf("excellent!\n" ); break; case 'B' : case 'C' : printf("good\n" ); break; case 'D' : case 'F' : default : printf("poor\n" ); break; printf("fail\n" ); break; printf(" 잘못된입력입니다.\n" 5 ); ) break; return 0;
반복문 Q) 반복구조는왜필요한가? A) 같은처리과정을되풀이하는것이필요하기때문이다. 학생 30 명의평균성적을구하려면같은과정을 30 번반복하여야한다.
예제 #include <stdio.h> int main() printf(" 환영합니다. "); printf(" 환영합니다. "); printf(" 환영합니다. "); printf(" 환영합니다. "); printf(" 환영합니다. "); return 0; 같은처리가반복된다. 환영합니다. 환영합니다. 환영합니다. 환영합니다. 환영합니다.
반복문의종류
While 문 while 문은어떤조건을정해놓고반복을하는구조
while 문의구조
기본예제 #include <stdio.h> int main() int i = 0; while (i < 5) printf (" 환영합니다. \n"); i++; printf (" 반복이종료되었습니다. \n"); return 0; 환영합니다. 환영합니다. 환영합니다. 환영합니다. 환영합니다. 반복이종료되었습니다.
핵심예제 : 0 부터 9 까지출력 0, 1, 2,..,, 9 까지를차례대로화면에출력하는프로그램을작성하여보자.
예제소스 #include <stdio.h> int main() int i = 0; while (i < 10) printf ("%d ", i); i++; printf("\n"); return 0;
핵심예제 : (1+2+...+9+10) 계산 (1+2+...+9+10) 의값을계산하는프로그램을작성하여보자.
예제소스 ( 합계 ) #include <stdio.h> int main() int i = 1; int sum = 0; while (i <= 10) sum = sum + i; i++; printf(" 합계 =%d\n", sum); return 0;
핵심예제 : 팩토리얼계산 팩토리얼을계산하는프로그램을작성하여보자. 팩토리얼 n! 은 1 부터 n 까지의정수를모두곱한것을의미한다.
예제소스 ( 팩토리얼 ) #include <stdio.h> int main() int i = 1; int factorial = 1; while (i <= 10) factorial = factorial * i; i++; printf ("10! 은 %d입니다. \n", factorial); return 0;
핵심예제 : 구구단출력 구구단중에서 3 단을반복문을이용하여출력하여보자. 3*1, 3*2, 3*3,.., 3*9 까지 9 번반복시키면출력하면될것이다.
예제소스 ( 구구단 3 단 ) #include <stdio.h> int main() int i = 1; while (i <= 9) printf("3*%d = %d\n", i, 3*i); i++; return 0;
핵심예제 : 최소값구하기 사용자로부터받은정수중에서최소값이나최대값을찾아보자.
예제소스 ( 최소값 ) #include <stdio.h> int main() int number, min_value = 2147483647; printf(" 정수를입력하시오 ( 종료는 -99999)\n"); while(scanf("%d", &number)!= -99999) if( number < min_value ) min_value = number; printf(" 최소값은 %d \n", min_value); return 0;
예제소스 ( 최소값 ) #include <stdio.h> #include <limits.h> // 정수중가장큰수인 INT_MAX 사용하기위해가져온헤더파일 int main() int number, min_value = INT_MAX; Windows 아닌경우는종료키가컨트롤 -z 아닐수도있음 printf(" 정수를입력하시오 ( 종료는 Ctrl+z)\n"); while(scanf("%d", &number)!= EOF) if( number < min_value ) min_value = number; printf(" 최소값은 %d \n", min_value); return 0; // end of - file
핵심예제 : 카운트다운프로그램 5->4->3->2->1 과같이카운트를하고카운트가 0 이되면 발사 라고화면에출력한다.
예제소스 ( 카운팅 ) #include <stdio.h> int main() int count; printf(" 숫자를입력하시오 : "); scanf("%d", &count); while( count > 0 ) printf("%d \n", count); count--; printf(" 발사! \n"); return 0;
핵심예제 : 배수의합계산 1 부터 100 사이의모든 3 의배수의합을계산하여출력하는프로그램을반복구조를사용하여작성하라.
예제소스 (3 의배수의합 ) #include <stdio.h> int main() int number; int sum = 0; number = 1; while( number <= 100 ) if( number %3 == 0 ) sum += number; number++; printf("1 부터 100 사이의모든 3 의배수의합은 %d 입니다. \n", sum); return 0;
do-while 문 반복조건을루프의처음이아니라루프의끝에서검사한다는것이다르다.
핵심예제 : 기본예제 [ Do while 사용 ] do-while 문을사용하여서 Hello 10 부터 Hello 1 까지를출력하여보자.
예제소스 (Hello 반복 ) #include <stdio.h> int main() int i = 10; do printf("hello %d\n", i); i = i - 1; while (i > 0); return 0;
핵심예제 : 0 을입력할때까지합계 [ Do while 사용 ] 사용자로부터양수를받아서합계를한다. 사용자가 0 을입력하면반복을중단하고이제까지의합계를화면에출력한다.
예제소스 ( 정수합계 ) #include <stdio.h> int main() int x, sum = 0; do printf(" 정수를입력하시오 (0이면종료 ) : "); scanf("%d", &x); sum = sum + x; while (x!= 0); printf(" 정수의합계 : %d \n", sum); return 0;
핵심예제 : 신호등프로그램 예를들어서사용자가신호등의색상을나타내는문자인 r, y, g 를입력할때까지반복해보자. [ Do while 사용 ]
#include <stdio.h> int main () char color; 예제소스 ( 신호등 ) do printf (" 신호등색상을입력하세요 (r, y, g): "); scanf (" %c", &color); while (color!='r' && color!='y' && color!='g'); switch (color) case 'r': printf (" 정지! \n"); break; case 'y': printf (" 조심! \n"); break; case 'g': printf (" 진행! \n"); break; return (0);
for 루프 정해진횟수만큼반복하는구조
for 문의구조 for 문은초기식, 조건식, 증감식의 3 부분으로구성
for 문의실행과정 for( i=0; i<5; i++ ) printf( Hello World! ); 1 i 2 3 4 5 Hello World! Hello World! Hello World! Hello World! Hello World!
제어변수사용 현재의반복횟수를출력해보자. #include <stdio.h> int main() int i; for (i = 0; i < 5; i++) printf("%d 번째반복입니다. \n", i); printf(" 반복이종료되었습니다. \n", i); return 0; 0 번째반복입니다. 1 번째반복입니다. 2 번째반복입니다. 3 번째반복입니다. 4 번째반복입니다. 반복이종료되었습니다.
핵심예제 : 정수들의합 1 부터사용자가입력한수 n 까지더해서 (1+2+3+...+n) 을계산하는프로그램을작성하여보자
예제소스 ( 합 ) // 반복을이용한정수합프로그램 #include <stdio.h> int main() int i, sum, limit; sum = 0; printf(" 어디까지계산할까요 : "); scanf("%d", &limit); for (i = 1; i <= limit; i++) sum += i; printf("1 부터 %d 까지의정수의합 = %d\n", limit, sum); return 0;
핵심예제 : 팩토리얼계산하기 for 문을이용하여서팩토리얼을계산해보자. 팩토리얼 n! 은 1 부터 n 까지의정수를모두곱한것을의미한다. 즉, n! = 1 2 3 (n- 1) n 이다.
예제소스 ( 팩토리얼 ) // 반복을이용한팩토리얼구하기 #include <stdio.h> int main() long fact=1; int i, n; printf(" 정수를입력하시오 : "); scanf("%d", &n); for(i = 1;i <= n; i++) fact = fact * i; printf("%d! 은 %d 이다.\n",n,fact); return 0;
while 루프와 for 루프와의관계 초기식 while ( 문장 1 문장 2... 조건식 ) ; ; 증감식 ; for ( 초기식 문장1 문장2... 조건식증감식 ; ; ; ; )
다양한증감수식의형태 for (i = 10; i > 0; i-- ) printf("hello World!\n"); 뺄셈사용 for (i = 0; i < 10; i += 2 ) printf("hello World!\n"); 2 씩증가 for (i = 1; i < 10; i *= 2 ) printf("hello World!\n"); 2 를곱한다. for (i = 0; i < 100; i = (i * i) + 2 ) printf("hello World!\n"); 어떤수식이라도가능
다양한증감수식의형태 for ( ; ; ) printf("hello World!\n"); 무한반복루프 for ( ; i<100; i++ ) printf("hello World!\n"); 한부분이없을수도있다. for (i = 0, k = 0; i < 100; i++ ) printf("hello World!\n"); 2 개이상의변수초기화 for (printf(" 반복시작 ), i = 0; i < 100; i++ ) printf("hello World!\n"); 어떤수식도가능
중첩반복문 중첩반복문 (nested loop): 반복문안에다른반복문이위치
예제 ( 별사각형 ) // 중첩 for 문을이용하여 * 기호를사각형모양으로출력하는프로그램 #include <stdio.h> int main() int x, y; for(y = 0;y < 5; y++) for(x = 0;x < 10; x++) printf("\n"); return 0; printf("*"); ********** ********** ********** ********** **********
핵심예제 : 구구단출력하기 구구단을 2 단부터 9 단까지출력하는프로그램을살펴보자.
예제소스 ( 구구단 ) #include <stdio.h> int main() int x, dan; for (dan = 2; dan<10; dan++) for (x = 1; x<10; x++) printf("%d*%d=%2d ", dan, x, dan*x); return 0; printf("\n");
Lab: 주사위경우의수 두개의주사위를던졌을때합이 7 이되는경우를모두출력하여보자.
예제소스 ( 주사위 7) #include <stdio.h> #define SUM 7 int main() int dicea, diceb; printf(" 합이 %d이되는경우의수를찾아봅니다. \n", SUM); printf("--------------------- \n"); printf(" 주사위A 주사위B \n"); printf("--------------------- \n"); for (dicea = 1; dicea <= 6; dicea++) for (diceb = 1; diceb <= 6; diceb++) if ( dicea+diceb == SUM ) printf("%d %d \n", dicea, diceb); return 0;
break 문 break 문은반복루프를빠져나오는데사용된다. break 를만나면탈출할수있읍니다. break 반복루프
핵심예제 : break 로반복종료 q 가입력되면반복루프를빠져나오는예제를작성하여보자.
예제소스 ( 브레이크 ) #include <stdio.h> int main() char c; for(;;) printf( " 어떤키나누르세요, q 는종료 : " ); scanf(" %c", &c); if (c == 'q') break; return 0;
continue 문 현재의반복을중단하고다음반복을시작하게한다. #include <stdio.h> int main() int i; for(i=0 ; i<10 ; i++) if( i%3 == 0 ) continue; printf("%d ", i); 3 의배수는건너뛴다. return 0; 1 2 4 5 7 8
Lab: 직각삼각형찾기 각변의길이가 100 보다작은삼각형중에서피타고라스의정리가성립하는직각삼각형은몇개나있을까?
실행결과
알고리즘 for(a=1;a<=100;a++) for(b=1;b<=100;b++) for(c=1;c<=100;c++) if( a*a + b*b == c*c ) a와 b와 c를화면에출력한다.
소스 ( 피타고라스 ) #include <stdio.h> int main() int a, b, c; for(a=1; a<=100; a++) for(b=1; b<=100; b++) for(c=1; c<=100; c++) if( (a*a+b*b)==c*c ) printf("%d %d %d \n", a, b, c); return 0;
Lab: 숫자추측게임 프로그램이가지고있는정수를사용자가알아맞히는게임 사용자가답을제시하면프로그램은자신이저장한정수와비교하여제시된정수가더높은지낮은지만을알려준다.
실행결과
알고리즘 do 사용자로부터숫자를 guess 로입력받는다. 시도횟수를증가한다. if( guess < answer ) 숫자가낮다고출력한다. if( guess > answer ) 숫자가높다고출력한다. while(guess!= answer); 축하합니다 와시도횟수를출력한다.
#include <stdio.h> int main() int answer =59; int guess; int tries = 0; do // 정답 소스 printf(" 정답을추측하여보시오 : "); scanf("%d", &guess); tries++; if (guess >answer) // 사용자가입력한정수가정답보다높으면 printf(" 제시한정수가높습니다."); if (guess <answer) // 사용자가입력한정수가정답보다낮으면 printf(" 제시한정수가낮습니다."); while (guess!=answer); printf(" 축하합니다. 시도횟수 =%d \n", tries); return 0;
#include <stdio.h> int main() int answer ; int guess; int tries = 0; do 랜덤함수 srand((unsigned)time(null)); answer = rand() % 1000 + 1; // 정답 printf(" 정답을추측하여보시오 : "); scanf("%d", &guess); tries++; if (guess >answer) // 사용자가입력한정수가정답보다높으면 printf(" 제시한정수가높습니다."); if (guess <answer) // 사용자가입력한정수가정답보다낮으면 printf(" 제시한정수가낮습니다."); while (guess!=answer); printf(" 축하합니다. 시도횟수 =%d \n", tries); return 0;
배열의필요성 학생이 10 명이있고이들의평균성적을계산한다고가정하자. 개별변수를사용하는방법은학생수가많아지면번거로워집니다. 방법 #1 : 개별변수사용 int s0; int s1; i nt s9; 방법 #1 : 배열사용 int[10];
배열이란? 배열 (array) : 동일한타입의데이터가여러개저장되어있는데이터저장장소배열안에들어있는각각의데이터들은정수로되어있는번호 ( 첨자, index) 에의하여접근배열을이용하면여러개의값을하나의이름으로처리할수있다.
배열의선언 자료형 : 배열원소들이 int형라는것을의미 배열이름 : 배열을사용할때사용하는이름이 s 배열크기 : 배열원소의개수가 10개 인덱스 ( 배열번호 ) 는항상 0부터시작한다.
배열선언의예 int score[60]; // 60 개의 int 형값을가지는배열 s float cost[12]; // 12 개의 float 형값을가지는배열 cost char name[50]; // 50 개의 char 형값을가지는배열 name
배열원소접근 80 s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] s[5] = 80 인덱스 s[5] = 80; s[1] = s[0]; s[i] = 100; // i는정수변수 s[i+2] = 100; // 수식이인덱스가된다. s[index[3]] = 100; // index[] 는정수배열
배열과반복문 배열의가장큰장점은반복문을사용하여서배열의원소를간편하게처리할수있다는점 grade[0] = 0; grade[1] = 0; grade[2] = 0; grade[3] = 0; grade[4] = 0; #define SIZE 5... for(i=0 ; i<size ; i++) grade[i] = 0;
배열요소출력 #include <stdio.h> #define STUDENTS 5 int main(void) int score[students]; int i; score[0] = 90; score[1] = 80; score[2] = 70; score[3] = 80; score[4] = 70; 0 번째학생의점수는 90 입니다. 1 번째학생의점수는 80 입니다. 2 번째학생의점수는 70 입니다. 3 번째학생의점수는 80 입니다. 4 번째학생의점수는 70 입니다. for (i = 0; i < STUDENTS; i++) printf("%d 번째학생의점수는 %d 입니다. \n", i, score[i]); return 0;
배열요소출력 #include <stdio.h> #define STUDENTS 5 int main(void) int score[students] = 90, 80, 70, 80, 70; int i; // 바로넣어도됨 for (i = 0; i < STUDENTS; i++) printf("%d 번째학생의점수는 %d 입니다. \n", i, score[i]); return 0;
사용자입력을배열요소에저장 #include <stdio.h> #define STUDENTS 5 int main(void) int i, sum=0; int score[students]; double average; 성적을입력하시오 :10 성적을입력하시오 :20 성적을입력하시오 :30 성적을입력하시오 :40 성적을입력하시오 :50 성적평균 = 30.000000 for(i = 0; i < STUDENTS; i++) printf(" 성적을입력하시오 :"); scanf("%d", &score[i]); for(i = 0; i < STUDENTS; i++) sum += score[i]; average = (double)sum / STUDENTS; printf(" 성적평균 = %f\n", average); return 0;
잘못된인덱스문제 인덱스가배열의크기를벗어나게되면프로그램에치명적인오류를발생시킨다. int score[5]; score[5] = 60; // 치명적인오류!
배열의초기화 int grade[5] = 10,20,30,40,50 ; int grade[5] = 10, 20, 30, 40, 50 ; grade[0] grade[1] grade[2] grade[3] grade[4] int grade[5] = 10,20,30 ; int grade[5] = 10, 20, 30 ; 초기값을일부만주면나머지원소들은 0 으로초기화됩니다. 0 0 grade[0] grade[1] grade[2] grade[3] grade[4]
배열의초기화 배열의크기가주어지지않으면자동적으로초기값의개수만큼이배열의크기로잡힌다. 6 int grade[ ] = 10, 20, 30, 40, 50, 60 ; grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]
배열원소의개수계산 int score[] = 10, 20, 30, 40, 50 ; int i, size; size = sizeof(score) / sizeof(score[0]); 배열원소개수자동계산 2 0 / 4 이므로원소는 5 개 for(i = 0; i < size ; i++) pri ntf("%d ", score[i]);
핵심예제 : 평균득점계산 농구게임에서특정선수의평균득점을계산하는프로그램을작성해보자. 사용자는최근 3 게임에서의득점을입력한다. 평균은실수로계산하여출력한다.
사용자입력을배열요소에저장 #include <stdio.h> int main() int scores[3]; int sum = 0; int i; double average; 배열은 0 부터, 게임은 1 회부터 for (i = 0; i < 3; i++) printf(" 게임 %d 에서선수의득점은? ", i + 1); scanf("%d", &scores[i]); for (i = 0; i < 3; i++) sum += scores[i]; average = ((double)sum / 3); printf(" 평균득점은 %f 입니다.\n", average); return(0);
핵심예제 : 주사위던지기 주사위를던져서각면이나오는횟수를출력하여보자.
예제소스 #include <stdio.h> #include <stdlib.h> #define SIZE 6 int main() int freq[size], i; for(i = 0; i < 10000; i++) ++freq[ rand() % 6 ]; printf("====================\n"); printf(" 면빈도 \n"); printf("==== ================\n"); for(i = 0; i < SIZE; i++) printf("%3d %3d \n", i+1, freq[i]); return 0;
실습 : 극장예약시스템 배열을이용하여간단한극장예약시스템을작성 좌석은 10개 먼저좌석배치표를보여준다. 예약이끝난좌석은 1로, 예약이안된좌석은 0으로나타낸다.
실행결과 좌석을예약하시겠습니까?(y 또는 n) y ------------------------------- 1 2 3 4 5 6 7 8 9 10 ------------------------------- 0 0 0 0 0 0 0 0 0 0 몇번째좌석을예약하시겠습니까?1 예약되었습니다. 좌석을예약하시겠습니까?(y 또는 n) y ------------------------------- 1 2 3 4 5 6 7 8 9 10 ------------------------------- 1 0 0 0 0 0 0 0 0 0 몇번째좌석을예약하시겠습니까?1 이미예약된자리입니다. 다른좌석을선택하세요좌석을예약하시겠습니까?(y 또는 n) n
알고리즘 while(1) else 사용자로부터예약여부 (y 또는 n) 를입력받는다. if 입력 == 'y' 현재의좌석배치표 seats[] 를출력한다. 좌석번호 i 를사용자로부터입력받는다. if 좌석번호가올바르면 seats[i]=1 else 에러메시지를출력한다. 종료한다.
실습 : 극장좌석예약 #include <stdio.h> #define SIZE 10 int main() int seat_number, i; in t seats[size] = 0 ; while(1) printf("-------------------------------\n"); printf(" 1 2 3 4 5 6 7 8 9 10\n"); printf ("-------------------------------\n"); for(i = 0; i < SIZE; i++) printf(" %d",seats[i]); printf("\n"); printf(" 원하시는좌석번호입력 ( 종료 -1): "); scanf("%d", &seat_number); if(seat_number < 0 ) break; if(seat_number <= 0 seat_number > SIZE) pr intf("1 부터 10 사이의숫자를입력하세요 \n"); c ontinue; if(seats[seat_number-1] == 0) else seats[seat_number-1] = 1; pri ntf(" 예약되었습니다.\n\n"); // 성공 // 이미예약된자리경우 printf(" 이미예약된자리입니다.\n\n"); // while 끝 return 0;
배열에서최소값찾기 첫번째요소를최소값 minium 이라고가정한다. for(i=1; i< 배열의크기 ; i++) if ( s[i] < minimum ) minimum = s[i]; 반복이종료되면 minimum 에최소값이저장된다.
실습 : 최소값찾기
순차탐색 순차탐색은배열의원소를순서대로하나씩꺼내서탐색키와비교하여원하는값을찾아가는방법 비교 50 성공 10 20 30 40 50 10 grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]
실습 : 순차탐색
핵심예제 : 히스토그램그리기 배열에데이터가들어있다고가정하고데이터의값에따라서막대그래프를그려보자.
막대그래프예제
2 차원배열 int s[10]; // 1차원배열 int s[3][10]; // 2차원배열 int s[5][3][10]; // 3차원배열
2 차원배열의초기화 int s[3][5] = 0, 1, 2, 3, 4, // 첫번째행의원소들의초기값 10, 11, 12, 13, 14, // 두번째행의원소들의초기값 20, 21, 22, 23, 24 // 세번째행의원소들의초기값 ;
핵심예제 : 행렬 행렬 (matrix) 는자연과학에서많은문제를해결하는데사용
다차원배열을이용한행렬의표현 중첩 for 루프를이용하여행렬 A 의각원소들과행렬 B 의각원소들을서로더하여행렬 C 에대입한다.
문자의중요성 인간한테텍스트는대단히중요하다. 많은컴퓨터작업이텍스트를사용하여서이루어진다. 컴퓨터 사용자
문자열표현방법 문자열 (string): 문자들이여러개모인것 "A" "Hello World!" " 변수 score의값은 %d입니다 문자열변수 변경가능한문자열을저장할수있는변수 어디에저장하면좋은가? H 하나의문자는 char 형변수로저장 H E L L o \0 문자열은 char 형배열로저장
NULL 문자 NULL 문자 : 문자열의끝을나타낸다. 끝 NULL 문자는문자열의끝을나타냅니다. S E O U L \0 문자열은어디서종료되는지알수가없으므로표시를해주어야한다. seou, seoul, seoul#, seoul#%,...??? 쓰레기값 s e o u l # %? & $ str[0] str[1] str[2] str[3] str[4] str[5] str[6] str[7] str[8] str[9]
문자열예제 abc
문자배열의초기화 char str[4] = 'a', 'b', 'c', '\0' ; char str[4] = "abc"; char str[4] = "abcdef"; char str[6] = "abc"; char str[4] = ""; char str[] = "abc";
문자열입출력 a u pretty?(y or n)y 맞았습니다.
실습 : 문자열길이계산
동적할당메모리의개념 프로그램이메모리를할당받는방법정적 (static) 동적 (dynamic)
정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 ( 예 ) int score_s[100]; 처음에결정된크기보다더큰입력이들어온다면처리하지못함 더작은입력이들어온다면남은메모리공간은낭비
동적메모리할당 동적메모리할당 실행도중에동적으로메모리를할당받는것 운영 체제 사용이끝나면시스템에메모리를반납 score = (int *) malloc(100*sizeof(int)); 요구 할당 필요한만큼만할당을받고메모리를매우효율적으로사용 malloc() 계열의라이브러리함수를사용 # i n c l u d e < s t d i o. h > # i n c l u d e < s t d i o. h > # i n c l u d e < s t d l i b. h > # i n c l u d e < s t d l i b. h > i n t m a i n ( v o i d ) i n t m a i n ( v o i d ) i n t * p ; i n t * p ; p = ( i n t * ) m a l l o c ( s i z e o f ( i n t ) ) ; p = ( i n t * ) m a l o c ( s i z e o f ( i n t ) ) ;...... 프로그램
동적메모리할당절차