13 1 3while include stdio h void mainvoid
- Slides: 55
예제 13. 1 (계속) 프로그램 3(while 사용) #include <stdio. h> void main(void) { int i, j, x, y; printf("input i, j : "); scanf("%d, %d", &i, &j); x = i; y = j; while(1) { if(x == y ) break; x>y ? (x -=y) : (y -= x); } printf("%d와 %d의 최대 공약수는? = %dn", i, j, x); } YES C 제 13 장 종합예제 5
예제 13. 1 (계속) 프로그램 4(while 사용) #include <stdio. h> void main(void) { int a, b, x, y; printf("input i, j : "); scanf("%d, %d", &a, &b); x = a; y = b; while(x!=y) x>y ? (x -=y) : (y -= x); printf("%d와 %d의 최대 공약수는? = %dn", a, b, x); } YES C 제 13 장 종합예제 6
예제 13. 1 (계속) 프로그램 7(함수사용) #include <stdio. h> int gcm(int, int); // 함수 원형(prototype) void main(void) { int i, j, x; printf("input i, j : "); scanf("%d, %d", &i, &j); x = gcm(i, j); printf( "%d와 %d의 최대 공약수 = %dn", i, j, x); } int gcm(int a, int b) { while(1) { if(a==b) return a; (a>b) ? (a-=b) : (b-=a); } } YES C 제 13 장 종합예제 7
예제 13. 2 최대공약수를 이용한 최소공배수 구하기 #include <stdio. h> int gcm(int, int); // 함수 원형(prototype) int lcd(int, int); void main(void) { int i, j; printf("최소공배수를 구할 두 수를 입력하시오. "); scanf("%d %d", &i, &j); printf("%d와 %d의 최소공배수는 %d이다. n", i, j, lcd(i, j)); } int gcm(int a, int b) { while(1) { if(a==b) return a; a>b ? (a-=b) : (b-=a); } } int lcd(int x, int y) { return (x*y/gcm(x, y)); } YES C 제 13 장 종합예제 8
예제 13. 3 (계속) 프로그램 2(함수사용) #include <stdio. h> int isperfect_no(int); void main(void) { int i; for (i=2; i <= 1000; i++) { if(isperfect_no(i)) printf("%d는 완전수이다. nn", i); } } int isperfect_no(int x) { int sum=0, j; // i의 약수의 합을 구한다. for (j=1; j <= x/2; j++) if (x%j == 0) sum += j; return ((x == sum) ? 1 : 0); } YES C 제 13 장 종합예제 10
예제 13. 4 소수(prime number) 구하기 #include <stdio. h> #include <math. h> //sqrt() 함수를 사용하기 위한 인클루드 void main(void) { int i, j, prime = 1 ; printf("숫자를 입력하여 주십시오 : "); scanf("%d", &j); for (i=2; i<=(int)sqrt(j); i++) { // i는 2부터 루트j까지 if (j%i == 0) { prime = 0; break; } } if (prime == 1) printf(" %d는 소수이다n", j); else printf(" %d는 소수가 아니다n", j); } YES C 제 13 장 종합예제 11
예제 13. 5 프로그램 1 : define을 1과 -1로 하였을 경우 #include <stdio. h> #define OPEN 1 #define CLOSE -1 void main(void) { int man, i, room[101]; // 배열은 0번부터 시작하므로 0번은 사용하지 않음. for (i=1; i<=100; i++) room[i] = CLOSE; //초기화 for (man=1; man<=100; man++) for (i=1; i<=100; i++) if (i%man == 0) room[i] = -room[i]; // 상태를 반대로. for (i=1; i<100; i++) if(room[i] == OPEN) printf("%d는 열려있다. n", i); } YES C 제 13 장 종합예제 13
예제 13. 5 프로그램 2 : define을 1과 0으로 하였을 경우 #include <stdio. h> #define OPEN 1 #define CLOSE 0 void main(void) { int man, i, room[101]; for (i=1; i<=100; i++) room[i] = CLOSE; //초기화 for (man=1; man<=100; man++) for (i=1; i<=100; i++) if (i%man == 0) if (room[i] == OPEN) room[i] = CLOSE; else room[i] = OPEN; for (i=1; i<100; i++) if(room[i] == OPEN) printf("%d는 열려있다. n", i); } YES C 제 13 장 종합예제 14
예제 13. 6 5× 5 정방행렬의 전치행렬을 구하라. #include <stdio. h> void main(void) { int i, j, dim[5][5] = {{4, 5, 7, 8, 9}, {5, 2, 4, 6, 2}, {4, 7, 8, 5, 2}, {3, 5, 8, 9, 6}, {7, 5, 6, 9, 8}}; const int max_count = sizeof(dim)/sizeof(dim[0]); printf("원래의 행렬n"); for (i=0; i<max_count; i++) { for(j=0; j<max_count; j++) printf(" %d ", dim[i][j]); printf("n"); } printf("n"); // 전치행렬로 변환하는 과정 for (i=0; i<max_count; i++) { for(j=0; j<i; j++) { //이 부분은 두개의 데이터를 교환하는 것 dim[i][j] ^= dim[j][i]; dim[j][i] ^= dim[i][j]; dim[i][j] ^= dim[j][i]; } } printf("전치 행렬n"); for (i=0; i<max_count; i++) { for(j=0; j<max_count; j++) printf(" %d ", dim[i][j]); printf("n"); } } YES C 제 13 장 종합예제 15
예제 13. 8 랜덤 함수를 이용한 주사위 게임. #include <stdio. h> #include <time. h> #include <stdlib. h> void main(void) { int i, num, in, seed; seed = time(NULL); srand(seed); for(i=0; i<10; i++) { num = rand() %6 +1; printf("수를 입력하시오. (1 -6) : "); scanf("%d", &in); if( num == in) printf("축하합니다. n"); else printf("틀렸습니다. %d입니다. n", num); } } YES C 제 13 장 종합예제 16
예제 13. 10 20개 데이터의 표준편차 σ를 구하는 함수 #include <stdio. h> #include <math. h> float std_dev(float[], int); float m_mean(float[], int); void main(void) { float array[20]= { 1. 0, 10. 0, 11. 0, 14. 4, 34. 0, 23. 5, 65. 9, 98. 0, 29. 0, 21. 0, 23. 0, 43. 9, 84. 9, 20. 8, 48. 0, 38. 1, 98. 8, 10. 3, 83. 1, 75. 9}; printf(" 배열 array의 표준편차는 %f이다. n", std_dev(array, 20)); // 표준편차구하는 함수 호출 } YES C 제 13 장 종합예제 17
예제 13. 11 약수구하기 #include <stdio. h> void main(void) { int x, i; printf("정수 하나를 입력하시오 : "); scanf("%d", &x); for (i=1; i<=x/2; i++) x % i== 0 ? printf("%dn", i) : printf("") ; } YES C 제 13 장 종합예제 19
예제 13. 12 조합구하기 #include <stdio. h> int combi(int, int); void main(void) { int n=10, p=7; printf("%dn", combi(n, p)); } int combi(int n, int p) { int i, np; /* np = n - p */ int denominator=1, numerator=1; /* 분모, 분자 */ if( p < n - p ) { np = p; p = n - p; } else np = n - p; for(i=n; i>p; i--) /* 분모 계산 */ denominator *= i; for(i=1; i<=np; i++) /* 분자 계산 */ numerator *= i; return denominator/numerator; } YES C 제 13 장 종합예제 20
예제 13. 13 순열구하기 #include <stdio. h> int permu(int, int); void main(void) { int n=10, r=4; printf("%dn", permu(n, r)); } int permu(int n, int r) { int i; int denominator=1; for(i=n; i>n-r; i--) denominator *= i; } YES C 제 13 장 종합예제 21
예제 13. 14 조합구하기, (재귀함수) #include <stdio. h> int comb(int m, int n) { return(m==0||n==0||m==n ? 1 : (comb(m-1, n) + comb(m-1, n-1))); } void main(void) { printf("%d n", comb(5, 3)); printf("%d n", comb(5, 0)); printf("%d n", comb(5, 5)); } YES C 제 13 장 종합예제 22
예제 13. 15 복리 이자 계산하기 #include <stdio. h> float rate(float, int); /* 원금, 이율, 예치기간 */ void main(void) { float c = 1000000. , r =. 055; int n=20; printf("%fn", rate(c, r, n)); } float rate(float c, float r, int n) { int i; float money=1. 0; for(i = 0; i<n; i++) money *=(1. 0 + r); money *= c; return money; } YES C 제 13 장 종합예제 23
예제 13. 16 디지털 근 구하기 #include <stdio. h> #include <string. h> int main(void) { int number; char buffer[10]; /* 최대 자릿수를 10으로 한다. */ int index; /* 문자열에서의 각 숫자의 위치 */ int len; /* 문자열의 길이가 1이 될 때까지 수행. . */ int tmp_number; printf(" 숫자를 입력하시오: "); scanf("%d", &number); tmp_number=number; do{ /* 결과의 내용을 형식화된 문자열로 변환한다. */ sprintf(buffer, "%d", tmp_number); len=strlen(buffer); /* 문자열의 길이를 구한다. */ tmp_number=0; for(index=0; index<len; index++){ /* ASCII값 0을 뺀 값 즉, 정수 1의 자릿수 누적 */ tmp_number+=buffer[index]-'0'; } } while(tmp_number>9); /* 새로 생성된 숫자가 9이상이면 반복. */ printf("결과: %dn", tmp_number); return 0; 24 YES C 제 13 장 종합예제 }
예제 13. 17 진법 변환하기(재귀함수) #include <stdio. h> char base[36] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; void bas_epn(int m, int n); void main(void) { bas_epn(324, 2); bas_epn(1234, 16); bas_epn(1234, 24); bas_epn(1234, 32); } printf("n"); void bas_epn(int m, int n) { if (m>0){ bas_epn(m/n, n); printf("%c", base[m%n]); } else printf(" %d진수 : ", n); YES C 제 13 장 종합예제 } 25
예제 13. 19 행렬곱셈 #include <stdio. h> #define M 3 #define P 5 #define N 4 void main(void) { float a[M][P]= {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}, b[P][N] = {{1, 2, 3, 4}, {1, 2, 3, 4}}, c[M][N]; int i, j, k; for(i=0; i<M; ++i) for(j=0; j<N; ++j) for(c[i][j]=k=0; k<P; ++k) c[i][j] += a[i][k] * b[k][j]; for(i=0; i<M; ++i) { for(j=0; j<N; ++j) printf("%10. 4 f ", c[i][j]); printf("n"); } YES C 제 13 장 종합예제 } 26
예제 13. 21 비트연산자 이용 짝수 판별하기 #include <stdio. h> int iseven(int m) { return(!(m & 1)); } void main(void) { int x=-3; if(iseven(x)) printf("%d is even. n", x); else printf("%d is odd. n", x); } YES C 제 13 장 종합예제 27
예제 13. 22 10진수를 2진수로 변환하기 프로그램 1 #include <stdio. h> #include <limits. h> void main(void) { int i, size; int x = 298420394; size = sizeof(x) * 8; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? printf("1") : printf("0"); x = INT_MAX; printf("n%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? printf("1") : printf("0"); printf("n 10진수를 입력하시오 : "); scanf("%d", &x); printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? printf("1") : printf("0"); printf("n"); } YES C 제 13 장 종합예제 28
예제 13. 22 (계속) 프로그램 2 : 함수 #include <stdio. h> #include <limits. h> void dec 2 bin(int); void main(void) { int x = 298420394; dec 2 bin(x); x = INT_MAX; dec 2 bin(x); printf("n 10진수를 입력하시오 : "); scanf("%d", &x); dec 2 bin(x); } void dec 2 bin(int x) { int size, i; size = sizeof(int) * 8; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? printf("1") : printf("0"); printf("n"); } YES C 제 13 장 종합예제 29
예제 13. 22 (계속) 프로그램 3 : 문자배열과 strcpy, strcat사용 #include <stdio. h> #include <limits. h> #include <string. h> void main(void) { int i, size; int x = 298420394; char binary[33] =""; size = sizeof(x) * 8; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN&x) ? strcat(binary, "1") : strcat(binary, "0"); printf("%sn", binary); strcpy(binary, ""); x = INT_MAX; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN&x) ? strcat(binary, "1") : strcat(binary, "0"); printf("%sn", binary); } YES C 제 13 장 종합예제 30
예제 13. 22 (계속) 프로그램 4 : 프로그램 3의 함수버전 #include <stdio. h> #include <limits. h> #include <string. h> void dec 2 bin(int, char *); void main(void) { int x = 298420394; char binary[33] =""; dec 2 bin(x, binary); printf("%sn", binary); strcpy(binary, ""); x = INT_MAX; dec 2 bin(x, binary); printf("%sn", binary); } void dec 2 bin(int x, char *a) { int size, i; size = sizeof(x) * 8; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? strcat(a, "1") : strcat(a, "0"); YES C 제 13 장 종합예제 } 31
예제 13. 22 (계속) 프로그램 5 : 문자배열사용, string 함수 사용하 지 않음 #include <stdio. h> #include <limits. h> void main(void) { int i, size; int x = 298420394; char binary[33] =""; size = sizeof(x) * 8; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN&x) ? (binary[i]='1') : (binary[i]='0'); printf("%sn", binary); x = INT_MAX; printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN&x) ? (binary[i]='1') : (binary[i]='0'); printf("%sn", binary); } YES C 제 13 장 종합예제 32
예제 13. 22 (계속) 프로그램 6 : 프로그램 5의 함수버전 #include <stdio. h> #include <limits. h> void dec 2 bin(int, char *); void main(void) { int x = 298420394; char binary[33] =""; dec 2 bin(x, binary); printf("%15 d = %sn", x, binary); x = INT_MAX; dec 2 bin(x, binary); printf("%15 d = %sn", x, binary); } void dec 2 bin(int x, char *a) { int size, i; size = sizeof(x) * 8; for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? (a[i]='1') : (a[i]='0'); } YES C 제 13 장 종합예제 33
예제 13. 22 (계속) 프로그램 7 : 문자열포인터, malloc함수 사용 #include <stdio. h> #include <limits. h> #include <stdlib. h> void main(void) { int i, size; int x = 298420394; char *binary; size = sizeof(x) * 8; binary = malloc(size+1); printf("%15 d = ", x); for(i=0; i < size; i++, x<<=1) (INT_MIN & x) ? (binary[i]='1') : (binary[i]='0'); binary[i] = '