13 1 3while include stdio h void mainvoid

  • Slides: 55
Download presentation

예제 13. 1 (계속) 프로그램 3(while 사용) #include <stdio. h> void main(void) { int

예제 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

예제 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); // 함수

예제 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); //

예제 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) {

예제 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() 함수를

예제 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>

예제 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>

예제 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) {

예제 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>

예제 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.

예제 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("정수

예제 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

예제 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

예제 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) {

예제 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); /* 원금,

예제 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)

예제 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',

예제 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

예제 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) {

예제 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>

예제 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>

예제 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

예제 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

예제 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

예제 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

예제 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

예제 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] = ''; 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'); binary[i] = ''; printf("%sn", binary); free(binary); } YES C 제 13 장 종합예제 34

예제 13. 24 임의수 소인수분해 #include <stdio. h> void main(void) { int i=2, x;

예제 13. 24 임의수 소인수분해 #include <stdio. h> void main(void) { int i=2, x; printf("임의의 정수를 입력하시오 : "); scanf("%d", &x); while(x != 1) { if(x % i == 0) { printf("%d ", i); x /= i; } else i++; } printf("n"); } YES C 제 13 장 종합예제 36

예제 13. 25 Kaprika구를 구하라. #include <stdio. h> void main(void) { int x, y,

예제 13. 25 Kaprika구를 구하라. #include <stdio. h> void main(void) { int x, y, i; for(i=1000; i<10000; i++) { x = i/100; y = i%100; if(i == (x+y)*(x+y)) printf("%d is kaprika numbern", i); } } YES C 제 13 장 종합예제 37

예제 13. 26 프로그램 2 : goto사용 #include <stdio. h> void main(void) { int

예제 13. 26 프로그램 2 : goto사용 #include <stdio. h> void main(void) { int i, j, product=0, sign=1; printf("정수를 입력하시오(i, j) : "); scanf("%d, %d", &i, &j); printf("%d * %d", i, j); if( i * j < 0 ) sign = -1; if( i < 0 ) i = ~i + 1; if( j < 0 ) j = ~j + 1; here: if ( j >= 1 ) { if(j & 1 == 1) product += i; i <<= 1; j >>= 1; goto here; } if(sign < 0 ) product = ~product + 1; printf(" = %dn", product); } YES C 제 13 장 종합예제 39

예제 13. 26 프로그램 3 : 함수버전 #include <stdio. h> int_bitwise_multiply(int, int); void main(void)

예제 13. 26 프로그램 3 : 함수버전 #include <stdio. h> int_bitwise_multiply(int, int); void main(void) { int i, j, product=0, sign=1; printf("정수를 입력하시오(i, j) : "); scanf("%d, %d", &i, &j); printf("%d * %d", i, j); printf("= %dn", int_bitwise_multiply(i, j)); } int_bitwise_multiply(int x, int y) { int sign=1, product=0; if( x * y < 0 ) sign = -1; if( x < 0 ) x = ~x + 1; if( y < 0 ) y = ~y + 1; while ( y >= 1 ) { if((y & 1) == 1) product += x; x <<= 1; y >>= 1; } if(sign < 0 ) product = ~product + 1; return product; YES C 제 13 장 종합예제 } 40

예제 13. 27 제곱근 구하기 #include <stdio. h> void main(void) { int i, j;

예제 13. 27 제곱근 구하기 #include <stdio. h> void main(void) { int i, j; double l=0, m=0, n=0, p=0, q=0, r=0; printf("제곱근을 구할 수를 입력하시오 : "); scanf("%lf", &m); n = 11; l = 1. 0; for(i=1; i<=n; i++) { for(j=1; j<=10; j++) { p = j*l + r; q = p * p; if(q>m) { r = p -l; break; } } l = l / 10; } printf("sqr %lf = %15. 13 lfn", m, r); } YES C 제 13 장 종합예제 41

예제 13. 28 자연수 e계산하기 #include <stdio. h> void main(void) { int n; double

예제 13. 28 자연수 e계산하기 #include <stdio. h> void main(void) { int n; double p, s; s=2. 0; n=2; p=1. 0; while(1) { p /= n; if(p<0. 000001) break; s += p; n++; } printf(" e= %15. 13 lfn", s); } YES C 제 13 장 종합예제 42

예제 13. 29 pi 구하기 #include <stdio. h> void arctan(void); double l=16. 0, p,

예제 13. 29 pi 구하기 #include <stdio. h> void arctan(void); double l=16. 0, p, r, s, t, x=5. 0, y; void main(void) { arctan(); t=s; x = 239; l = 4. 0; arctan(); printf("pi = %15. 13 lfn", t-s); } void arctan(void) { int n; y = x * x; p = l / x; s = p; n= 1; while(1) { p /= y; r = p / (2 * n + 1); if ( r < 0. 000001) return; if ( n - 2* (int)(n/2) > 0) s -= r; else s += r; n++; } YES C 제 13 장 종합예제 } 43

예제 13. 30 삼각함수 sine 구하기 #include <stdio. h> void main(void) { int n;

예제 13. 30 삼각함수 sine 구하기 #include <stdio. h> void main(void) { int n; double q, r, s, x, y, z, pi=3. 141592; scanf("%lf", &x); z = pi * x / 180; y = z * z; s = z; n = 1; q = z; while(1) { r = q * y / (2 * n * (2 * n +1 )); if(r < 0. 000001 ) { printf("sin %lf = %lfn", x, s); break; } if(n - 2 * (int)(n / 2) > 0 ) s -= r; else s += r; n++; q = r; } } YES C 제 13 장 종합예제 44

예제 13. 34 파일(data. txt)에 있는 학생의 이름을 오름차순 정렬하여 새 로운 파일(sdata. txt)을

예제 13. 34 파일(data. txt)에 있는 학생의 이름을 오름차순 정렬하여 새 로운 파일(sdata. txt)을 생성하는 코드를 작성하세요. 만약 -d라는 옵션이 들어가면 내림차순 정렬한다. #include <stdio. h> #define REVERSE -1 #define NORMAL 1 #define MAXLINENO 100 #define MAXCNO 80 #define TRUE EOF*-1 /*내림차순*/ /*오름차순*/ int main(int argc, char *argv[]) { static char text[MAXLINENO][MAXCNO]; /*파일의 내용을 읽어와 저장한다*/ char t[MAXCNO]; /* temporary */ FILE *fp 1, *fp 2; int direction = NORMAL; /* 1 ascending, int no = 0; /* line count로 사용한다 */ int i, j; YES C 제 13 장 종합예제 -1 descending */ 51

예제 13. 34 (계속) if ((argc!=3 && argc!=4) || (argc==4 && strcmp(*(argv+1), "-d"))) {

예제 13. 34 (계속) if ((argc!=3 && argc!=4) || (argc==4 && strcmp(*(argv+1), "-d"))) { fprintf(stderr, "USAGE: %s [-d] filename(1) filename(2)n", *argv); return (1); } if (argc == 4) { /* -d을 주면 역으로 정렬 direction = REVERSE; ++argv; } */ if ((fp 1 = fopen(*++argv, "r")) == NULL) { fprintf(stderr, "Error: Cannot open %sn", *argv); return (2); } YES C 제 13 장 종합예제 52

예제 13. 34 (계속) if ((fp 2 = fopen(*++argv, "w")) == NULL) { fprintf(stderr,

예제 13. 34 (계속) if ((fp 2 = fopen(*++argv, "w")) == NULL) { fprintf(stderr, "Error: Cannot create %sn", *argv); return (3); } while (get_line(fp 1, text[no++]) != EOF); for (i = 0; i < no - 2; i++) for (j = i + 1; j < no - 1; j++) if (strcmp(text[i], text[j]) * direction > 0) { strcpy(t, text[i]); strcpy(text[i], text[j]); strcpy(text[j], t); } for (i = 0; i < no - 1; i++) fprintf(fp 2, "%sn", text[i]); fclose(fp 1); fclose(fp 2); } YES C 제 13 장 종합예제 53

예제 13. 34 (계속) int get_line(FILE *fp, char *s) { char *cp = s;

예제 13. 34 (계속) int get_line(FILE *fp, char *s) { char *cp = s; while ((*s = getc(fp)) != EOF) if (*s == 'n') { *s = ''; return (TRUE); } else ++s; if (cp == s) return (EOF); *s = ''; return (TRUE); } YES C 제 13 장 종합예제 54

예제 13. 35 배열에서 2진 검색을 이용하여 자료 찾기 #include <stdio. h> #define N

예제 13. 35 배열에서 2진 검색을 이용하여 자료 찾기 #include <stdio. h> #define N 10 int bsearch(int v[], int x, int left, int right) { int mid; if(left > right) return -1; mid = (left+right)/2; if(v[mid] == x) return mid; else if(v[mid] < x) bsearch(v, x, mid+1, right); else bsearch(v, x, left, mid-1); } void main(void) { int a[N] = {2, 5, 6, 7, 9, 11, 12, 15, 19, 34}, x, n; printf("찾을 데이터를 입력하시오 : "); scanf("%d", &x); n = bsearch(a, x, 0, N-1) + 1; if( n > 0) printf("%d은(는) %d번째에 있습니다. n", x, n); else printf("찾으시는 데이터 %d는 없습니다. n", x); } YES C 제 13 장 종합예제 55