과제풀이 (1)
홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 <stdio.h> 가필요한이유 printf 와 scanf 쌍 if-else 와 if-if 개선점 if (number % 2) printf ("%d 는홀수입니다.\n", number); else printf ("%d 는짝수입니다.\n", number);
홀수 / 짝수판정 (2) int number; printf(" 정수를입력하시오 => "); if ( scanf("%d", &number) == 1) scanf() 결과확인 if (number % 2) printf ("%d 는홀수입니다.\n", number); else printf ("%d 는짝수입니다.\n", number); return(0); else printf(" 잘못된입력입니다.\n"); return (-1);
for 문 /***********************************************************************************/ /* 20094123 홍길동 20100324 */ /* loop.c */ /* for문을이용하여 1부터 100까지의합을구하는프로그램 */ /***********************************************************************************/ int i; int sum = 0; 변수초기화 for (i = 1; i < 101; i++) sum += i; /* sum = sum + i */ 두문장의차이점 printf("1 부터 100 까지합은 %d 입니다.\n", sum);
2 차방정식 Ver. 1 (1) /*****************************************************************************/ /* 2 차방정식 */ /*****************************************************************************/ #include <math.h> double 과 float double a, b, c; /* a x^2 + b x + c = 0 */ double dist; /* b^2-4 a c */ double root1, root2; /* real roots */ double real_part; /* real part*/ double complex_part; /* complex part*/ math lib gcc lm printf("\n2 차방정식의근을구하는프로그램 \n\n"); printf("enter 3 real numbers : "); %lf if (scanf("%lf %lf %lf", &a, &b, &c) == 3) if (a == 0. && b == 0. && c == 0.) printf("\n 부정 : 해가무수히많다.\n"); else if (a == 0. && b == 0.) printf("\n 불능 \n"); else if (a == 0.) printf("\n1 차방정식 \n"); root1 = c / -b; printf("\n 근 : %g\n", root1);
2 차방정식 Ver. 1 (2) else printf("\n2 차방정식 \n"); dist = b * b - 4 * a * c; if (dist > 0) return 0; /* 정상적입력 */ else printf("\n 잘못된입력입니다.\n"); return -1; root1 = (-b + sqrt(dist))/(2. * a); root2 = (-b - sqrt(dist))/(2. * a); printf("\n2 개의실근 : %g, %g\n", root1, root2); else if (dist == 0) root1 = -b / (2. * a); printf("\n 중근 : %g\n", root1); else real_part = -b / (2. * a); complex_part = sqrt(-dist) / (2. * a); printf("\n2 개의허근 : %g + %gi, %g - %gi\n", real_part, complex_part, real_part, complex_part);
2 차방정식 Ver. 2 (1) /*****************************************************************************/ /* 2 차방정식 */ /*****************************************************************************/ #include <math.h> double a, b, c; /* a x^2 + b x + c = 0 */ printf("\n2 차방정식의근을구하는프로그램 \n\n"); printf("enter 3 real numbers : "); if (scanf("%lf %lf %lf", &a, &b, &c) == 3) if (a == 0. && b == 0. && c == 0.) printf("\n 부정 : 해가무수히많다.\n"); else if (a == 0. && b == 0.) printf("\n 불능 \n"); else if (a == 0.) double result; printf("\n1 차방정식 \n"); result = c / -b; printf("\n 근 : %g\n", result);
2 차방정식 Ver. 2 (2) else double dist; /* b^2-4 a c */ printf("\n2 차방정식 \n"); dist = b * b - 4 * a * c; if (dist > 0) double root1, root2; /* real roots */ root1 = (-b + sqrt(dist))/(2. * a); root2 = (-b - sqrt(dist))/(2. * a); printf("\n2개의실근 : %g, %g\n", root1, root2); else if (dist == 0) double root; /* real root */ else root = -b / (2. * a); printf("\n 중근 : %g\n", root); double real_part; /* real part*/ double complex_part; /* complex part*/ real_part = -b / (2. * a); complex_part = sqrt(-dist) / (2. * a); printf("\n2 개의허근 : %g + %gi, %g - %gi\n", real_part, complex_part, real_part, complex_part);
2 차방정식 Ver. 2 (3) return 0; /* 정상적입력 */ else printf("\n 잘못된입력입니다.\n"); return -1;
2 차방정식 Ver. 3 if (a!= 0.) double D = b * b - 4 * a * c; if (D > 0.) else if (D == 0.) else /* D < 0 */ else if (b!= 0.) else if (c!= 0.) else /* c == 0. */
add_2_no Ver. 1 /***********************************************************************/ /* 20094123 홍길동 */ /* add_2_no ver.1 */ /* 별도의함수없이 main에서처리 */ /***********************************************************************/ int num1, num2; int start, end; int sum = 0; int i; for (i = start; i <= end; i++) sum += i; printf("%d 에서 %d 까지사이에있는정수들의합은 %d 입니다.\n", start, end, sum); return 0; else printf(" 잘못된입력입니다.\n"); return -1; printf(" 두개의정수를입력하세요. => "); if (scanf("%d %d", &num1, &num2) == 2) if (num1 > num2) start = num2; end = num1; else start = num1; end = num2;
add_2_no Ver. 2 /* 20094123 홍길동 */ /* add_2_no ver.2 */ /* add_2_no() 와테스트목적의 main() */ int add_2_no(int no1, int no2); printf ("2 와 5 사이의수들의합은 %d 입니다.\n", add_2_no(2, 5)); int add_2_no(int no1, int no2) int start, end; int sum = 0; int i; if (no1 > no2) start = no2; end = no1; else start = no1; end = no2; for (i = start; i <= end; i++) sum += i; return sum;
add_2_no Ver. 3 /***********************************************************************************/ /* 20094123 홍길동 */ /* add_2_no ver.3 */ /* add_2_no() 와사용자로부터 2 개의수를입력받아함수를부르는 main()*/ /***********************************************************************************/ int add_2_no(int no1, int no2); /***********************************************************************************/ int num1, num2; int result; printf(" 두개의정수를입력하시오. => "); if (scanf("%d %d", &num1, &num2) == 2) result = add_2_no(num1, num2); printf ("%d 와 %d 사이의수들의합은 %d 입니다.\n", num1, num2, result); return 0; else printf(" 잘못된입력입니다.\n"); int add_2_no(int no1, int no2) int start, end; int sum = 0; int i; if (no1 > no2) start = no2; end = no1; else start = no1; end = no2; for (i = start; i <= end; i++) sum += i; return sum; return -1;
add_2_no Ver. 4 (1) /* 20094123 홍길동 */ /* add_2_no ver.4 */ /* add_2_no() : 두수사이의정수들의합 */ /* read_2_no() : 두수를사용자로부터읽어들이는함수 */ /* print_res() : 두수와두수사이에있는합들을출력하는함수 */ /* main() : 각함수를차례대로호출 */ int num1, num2; int result; if (read_2_no(&num1, &num2)) result = add_2_no(num1, num2); print_res(num1, num2, result); return 0; int read_2_no (int *p1, int *p2); int add_2_no(int no1, int no2); void print_res(int no1, int no2, int no3); return -1;
add_2_no Ver. 4 (2) int read_2_no(int *p1, int *p2) printf(" 두개의정수를입력하시오. => "); if (scanf("%d %d", p1, p2) == 2) return 1; else printf(" 잘못된입력입니다.\n"); return 0; void print_res(int no1, int no2, int no3) printf ("%d 와 %d 사이에있는수들의합은 %d 입니다.\n", no1, no2, no3); int add_2_no(int no1, int no2) int start, end; int sum = 0; int i; if (no1 > no2) start = no2; end = no1; else start = no1; end = no2; for (i = start; i <= end; i++) sum += i; return sum;
add_2_no Ver. 5 (1) add_2_no.h int read_2_no (int *p1, int *p2); int add_2_no(int no1, int no2); void print_res(int no1, int no2, int no3); main.c /* 20094123 홍길동 */ /* add_2_no ver.5 */ /* add_2_no() : 두수사이의정수들의합 */ /* read_2_no() : 두수를사용자로부터읽어들이는함수 */ /* print_res() : 두수와두수사이에있는합들을출력하는함수 */ /* main() : 각함수를차례대로호출 */ #include "add_2_no.h" int num1, num2; int result; if (read_2_no(&num1, &num2)) result = add_2_no(num1, num2); print_res(num1, num2, result); return 0; return -1;
add_2_no Ver. 5 (2) read_2_no.c /****************************************************************/ /* 20094123 홍길동 */ /* add_2_no ver.5 */ /* read_2_no() : 두수를사용자로부터읽어들이는함수 */ /*****************************************************************/ int read_2_no(int *p1, int *p2) printf(" 두개의정수를입력하시오. => "); if (scanf("%d %d", p1, p2) == 2) return 1; else printf(" 잘못된입력입니다.\n"); return 0; print_res.c /*************************************************************************/ /* 20094123 홍길동 */ /* add_2_no ver.5 */ /* print_res() : 두수와두수사이에있는합들을출력하는함수 */ /*************************************************************************/ void print_res(int no1, int no2, int no3) printf ("%d 와 %d 사이에있는수들의합은 %d 입니다.\n", no1, no2, no3);
add_2_no Ver. 5 (3) add_2_no.c /* 20094123 홍길동 */ /* add_2_no ver.5 */ /* add_2_no() : 두수사이의정수들의합 */ int add_2_no(int no1, int no2) int start, end; int sum = 0; int i; if (no1 > no2) start = no2; end = no1; else start = no1; end = no2; for (i = start; i <= end; i++) sum += i; return sum;