반응형
1. 매크로 정의를 이용하여 원의 둘레를 구하는 프로그램을 작성하라.
#include <stdio.h> #define PI 3.141592 #define circumference(r) 2*PI*r int main(void) { double r; printf("원의 반지름을 입력하세요 : "); scanf_s("%lf", &r); printf("반지름이 %g인 원의 둘레는 %g입니다 \n",r,circumference(r)); }
2. 매크로 정의를 이용하여 5의 세제곱의 값을 구하여 출력하는 프로그램을 작성하라.
#include <stdio.h> #define cube(r) r*r*r int main(void) { printf("5의 세제곱 : %d \n", cube(5)); }
3. 다음 프로그램에서 전처리기가 #define, #ifdef, #else, #ifndef, #edif를 먼저 처리한다면 어떻게 변하는가? (#include문은 나중에 처리한다고 가정)
#include <stdio.h> #define TED int main(void) { #ifdef TED printf("Hello TED \n"); //1 #else printf("Hello anyone \n"); //2 #endif #ifndef RALPH printf("RALPH was not defined \n"); //3 #endif }
#include문은 선언 위치가 중요하지 처리 순서가 중요하지는 않다.
본 프로그램은 다음과 같이 #define TED의 유무와 #define RALPH의 유무에 따라 컴파일 되는 곳이 다음 4가지 경우로 나눠진다.
1. TED있음, RALPH있음 : //1
2. TED있음, RALPH없음 : //1, //3
3. TED없음, RALPH있음 : //2
4. TED없음, RALPH없음 : //2, //3
4. 다음 프로그램에서 함수를 인수가 있는 매크로 정의를 이용하여 바꾸어라. 결과가 같게 나와야 함.
<수정전>
#include <stdio.h> int f(int x, int y) { int z = (x + y) / 2; return z; } int main() { int a; a = f(10, 13); printf("%d \n", a); }
<수정후>
#include <stdio.h> #define f(x,y) (((x)+(y))/2) int main() { int a; a = f(10, 13); printf("%d \n", a); }
5. 2차 방정식의 근을 구하는 프로그램을 인수가 있는 매크로를 이용하여 작성하라. 근을 구하는 부분은 반드시 매크로를 이용해야 함.
#include <stdio.h> #define DISPLINANT(a,b,c) ((b)*(b)-(4*(a)*(c))) #define QUADRATIC_PLUS_VALUE(format,a,b,c) printf("%"#format"\n",(-(b)+DISPLINANT(a,b,c))/2*(a)) #define QUADRATIC_MINUS_VALUE(format,a,b,c) printf("%"#format"\n",(-(b)-DISPLINANT(a,b,c))/2*(a)) #define QUADRATIC_PLUS_IMAGINE_VALUE(f,a,b,c) printf("%"#f"+%"#f"i \n",-((b)/2*(a)),(DISPLINANT(a,b,c)/2*(a))) #define QUADRATIC_MINUS_IMAGINE_VALUE(f,a,b,c) printf("%"#f"+%"#f"i \n",-((b)/2*(a)),(DISPLINANT(a,b,c)/2*(a))) int main() { double a, b, c; printf("a값을 입력하세요 : "); scanf_s("%lf", &a); printf("b값을 입력하세요 : "); scanf_s("%lf", &b); printf("c값을 입력하세요 : "); scanf_s("%lf", &c); if (DISPLINANT(a, b, c) >= 0) { printf("%gx^2+%gx+%g = 0의 근은 다음과 같습니다. \n", a, b, c); QUADRATIC_PLUS_VALUE(g, a, b, c); QUADRATIC_MINUS_VALUE(g, a, b, c); } else { printf("%gx^2+%gx+%g = 0의 근은 다음과 같습니다. \n", a, b, c); QUADRATIC_PLUS_IMAGINE_VALUE(g, a, b, c); QUADRATIC_MINUS_IMAGINE_VALUE(g, a, b, c); } }
반응형