반응형
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);
}
}
반응형