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

C언어 연습문제 풀이 CH10 (6-8)

라이피 (Lypi) 2018. 6. 4. 21:49
반응형

6. 입력받은 세 개의 정수 중 가장 큰 값을 구하는 프로그램을 매크로 MAX(A,B,C)를 이용하여 작성하라.

#include <stdio.h>

#define MAX(a,b,c) (((a)>(b)) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c)))

int main()
{
	int a, b, c;

	printf("a값을 입력하세요 : "); scanf_s("%d", &a);
	printf("b값을 입력하세요 : "); scanf_s("%d", &b);
	printf("c값을 입력하세요 : "); scanf_s("%d", &c);

	printf("입력하신 값 중에서 가장 큰 값은 %d입니다. \n", MAX(a, b, c));
}


7.  프로그램의 실행결과가 다음과 같이 되도록 매크로 printexpr()를 정의하라.

int main()
{
	printexpr(3 + 1);
}

//실행 결과 expr = 4

#define printexpr(a) printf("expr:%d",a)

int main()
{
	printexpr(3 + 1);

}


8. 주어진 스트링에서 대문자는 소문자로 소문자는 대문자로 바꾸는 프로그램을 다음에서 주어진 매크로를 이용해서 작성하라.

#define UPCASE(c) (( (c)>='a' && (c)<='z') ? (c)-('a'-'A') : (c) //소문자를 대문자로 바꾸는 매크로 함수

#define LOCASE(c) (( (c)>='A' && (c)<='Z') ? (c)+('a'-'A') : (c) //대문잘ㄹ 소문자로 바꾸는 매크로 함수


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define UPCASE(c) ( ((c)>='a' && (c)<='z') ? (c)-('a'-'A') : (c)) //소문자를 대문자로 바꾸는 매크로 함수
#define LOCASE(c) ( ((c)>='A' && (c)<='Z') ? (c)+('a'-'A') : (c)) //대문자를 소문자로 바꾸는 매크로 함수

struct str {
	char d;
	str* next;
};

str* trans_str(str* head);
str* inputstr(void);
void printstr(str* str);
void destroy(str* head);



int main()
{
	str* start = inputstr();

	printstr(start);

	start = trans_str(start);

	printstr(start);

	destroy(start);

	_getch();
}

str* trans_str(str* string)
{
	str* head = string;

	while (string->next != NULL) {
		if (string->d >= 'a' && string->d <= 'z') {
			string->d = UPCASE(string->d);
		}
		if (string->d >= 'a' && string->d <= 'z') {
			string->d = LOCASE(string->d);
		}
		string = string->next;
	}

	return head;
}

str* inputstr(void) 
{

	str* word = (str*)malloc(sizeof(str));
	str* head = word;
	char temp;

	temp = _getche();

	while (temp != 13) {
		//printf("확인용 \n");
		str* nextchar = (str*)malloc(sizeof(str));

		word->d = temp;
		word->next = nextchar;
		word = word->next;

		temp = _getche();
	}

	word->next = NULL;

	return head;

}

void printstr(str* string)
{
	while (string->next != NULL) {
		putchar(string->d);
		string = string->next;
	}
	printf("\n");
}

void destroy(str* head)
{
	str* dstr;

	while (head->next != NULL) {
		dstr = head;
		head = head->next;
		free(dstr);
	}
	dstr = head;
	head = head->next;
	free(head);

}


반응형