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

C언어 연습문제 풀이 CH10 (9-11)

라이피 (Lypi) 2018. 6. 5. 02:29
반응형

9. 다음 주어진 프로그램을 전처리기가 처리한 후 결과가 어떻게 나올지 써보라. 의도한 것과 다르다면 소스를 고쳐라.

#define SQR(x) ((x)*(x))

void main(void)
{
	int i = 2;

	printf("%d\n", SQR(++i))
}

//전처리기 처리 후 코드

#include <stdio.h>
#define SQR(x) ((x)*(x))

void main(void)
{
int i=2;

printf("%d\n", SQR(++i));
//위의 코드는 

printf("%d\n", (++i) * (++i));
//와 같다. 즉 3*4가 되어 12가 나온다.

//매크로 함수에서는 증감연산자를 쓸 수 없다고 생각하는게 좋으니

i = 2;

++i;
printf("%d\n", SQR(i));
//i값을 꼭 증가시켜야 한다면 이렇게 써야하고,

i = 2;

printf("%d\n", SQR(i + 1));
//그런게 아니라면 그냥 이렇게 쓰면 된다.
}


10. 다음 프로그램이 아래와 같은 결과가 출력될 수 있도록 factory.h를 작성하라.

#include <stdio.h>
#include "factory.h"

int main()
{
	char temp[80];
	float r;
	
	sprintf_s(temp, "원주율 PI = %f", PI);
	puts(temp);
	
	r = 2.4f;
	
	sprintf_s(temp, "반지름이 %f인 원의 면적은 =%f", r, cyclearea(r));
	puts(temp);
	
	sprintf_s(temp, "반지름이 %f인 원의 길이는 =%f", r, cylen(r));
	puts(temp);
}

//실행결과

원주율 PI = 3.140000

반지름이 2.400000인 원의 면적은 = 18.086402

반지름이 2.400000인 원의 길이는 = 15.072001

//factory.h

#define PI 3.14
#define cyclearea(r) (PI*(r)*(r))
#define cylen(r) (2*PI*(r))



11. 다음 프로그램이 아래와 같은 결과가 출력될 수 있도록 test.h를 작성하라.

#include <stdio.h>
#include "test.h"

int main()
{
	char temp[80];

	sprintf_s(temp, "OS 형태는 %d 입니다.", OSSTYLE);
	puts(temp);

	sprintf_s(temp, "BLOCKSIZE 형태는 %d 입니다.", BLOCKSIZE);
	puts(temp);
}

OS 형태는 1입니다.

BLOCKSIZE는 6400입니다.


//test.h

#define OSSTYLE 1
#define BLOCKSIZE 6400


반응형