연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH10 (1-5)

라이피 (Lypi) 2018. 6. 4. 16:05
반응형

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);
	}
}


반응형