본문 바로가기
C언어/쉽게 풀어쓴 C언어 EXPRESS 개정4판

[6下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 6장 PROGRAMMING (7~12번)

by EATSTAR 2023. 6. 19.
반응형

[ 1 ~ 6번 ]

 

[6上] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 6장 PROGRAMMING (上)

하 편은 준비중입니닷! * 본문은 Microsoft Visual Studio 2022 버전 17.6.3를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주

eatstar.tistory.com

 

* 본문은 Microsoft Visual Studio 2022 버전 17.6.3를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주세요.

7. 사용자로부터 키를 입력받아서 표준 체중을 계산한 후에 사용자의 체중과 비교하여 저체중인지, 표준인지, 과체중인지를 판단하는 프로그램을 작성하라. 표준 체중 계산식은 다음을 사용하라.  (if-else 선택 구조 / MEDIUM)

표준 체중 = (키 - 100) x 0.9

체중과 키를 이력하시오: 180 80
과체중입니다.
문제 의도
표준 체중을 계산하고 if-else 문으로 과체중 여부를 판정할 수 있는가?

 

#include <stdio.h>

int main(void) {
	double standrad_weight, weight, tall;

	printf("체중과 키를 입력하시오: ");
	scanf_s("%lf %lf", &weight, &tall);

	standrad_weight = (tall - 100) * 0.9;

	if (weight > standrad_weight) {
		printf("과체중입니다.");
	}
	else if (weight == standrad_weight) {
		printf("표준체중입니다.");
	}
	else {
		printf("저체중입니다.");
	}

	return 0;
}
코드 설명
키(tall)를 이용해서 표준 체중(standard_weight)을 구한다. 표준체중과 비교해서 체중이 더 크면 과체중, 같으면 표준 체중, 작으면 저체중으로 출력한다. (원래 표준체중이 완전히 같을 때 말고도 더 분포가 있어야 하지만 문제에 단서가 없으므로 이런 식으로 작성한다.)

 

 


8. 놀이 공원의 자유이용권의 가격을 계산하는 프로그램을 작성하여보자. 입장료는 다음과 같은 조건으로 결정된다. 현재 시간과 사용자의 나이를 입력받아서 지불하여야 하는 요금을 화면에 출력한다.  (중첩 선택 구조 / HARD)

구분 대인 소인
(3~12세/65세 이상)
자유이용권(오후 5시 이전) 34,000 25,000
야간이용권(오후 5시 이후) 10,000
현재 시간과 나이를 입력하시오(시간 나이): 18 33
요금은 10000원 입니다.
문제 의도
표에 제시된 대로 if-else 문을 중첩 사용해서 설계할 수 있는가? (대인, 소인과 자유이용권, 야간이용권에 따라서)

 

#include <stdio.h>

int main(void) {
	int time;
	int age;

	printf("현재 시간과 나이를 입력하시오(시간 나이): ");
	scanf_s("%d %d", &time, &age);

	if (time >= 17)
		printf("요금은 10000원입니다.");
	else
		if ((age >= 3 && age <= 12) || age >= 65)
			printf("요금은 25000원입니다.");
		else
			printf("요금은 34000원입니다.");

	return 0;
}
코드 설명
일단 공통적인 부분인 야간이용권에 대해 if-else 문을 사용한다. 그리고 나머지 자유이용권을 if-else 문으로 나이에 따라서 출력을 다르게 한다.

 

 


9. 다음과 같이 정의되는 함수의 함수값을 계산하여보자. 사용자로부터 x값을 입력받아서 함수값을 계산하여 화면에 출력한다. x는 실수이다.  (if-else 선택 구조 / MEDIUM)

x의 값을 입력하시오: 3.0
f(x)의 값은 23.00입니다.
문제 의도
if-else 문으로 함수값의 범위를 지정하고 그에 따라 x값이 입력됐을 때 출력할 수 있는가?

 

#include <stdio.h>

int main(void) {
	double x, sum;

	printf("x의 값을 입력하시오: ");
	scanf_s("%lf", &x);

	if (x <= 0) {
		sum = x * x - 9 * x + 2;
	}
	else {
		sum = 7 * x + 2;
	}

	printf("f(x)의 값은 %.2lf 입니다.", sum);

	return 0;
}
코드 설명
x가 0보다 작거나 같으면 x^2 - 9x + 2로 출력하고, 그 외의 경우에는 7x + 2를 출력한다.

 

 


10. (x,y) 좌표를 입력받아서 좌표가 속하는 사분면을 화면에 출력하는 프로그램을 작성하시오.  (연속적인 if-else 선택 구조 / MEDIUM)

x, y좌표를 입력하시오: 10 20
1사분면입니다.
문제 의도
AND 연산자(&&)를 이용해서 입력되는 x,y 값에 따라 알맞는 사분면을 출력할 수 있는가?

 

#include <stdio.h>

int main(void) {
	double x, y;

	printf("x,y좌표를 입력하시오: ");
	scanf_s("%lf %lf", &x, &y);

	if (x > 0 && y > 0) {
		printf("1사분면입니다.");
	}
	else if (x < 0 && y > 0) {
		printf("2사분면입니다.");
	}
	else if (x < 0 && y < 0) {
		printf("3사분면입니다.");
	}
	else {
		printf("4사분면입니다.");
	}

	return 0;
}
코드 설명
AND 연산자(&&)를 활용해서 연속적 if-else 문을 구성한다.

 

 


11. 사용자로부터 하나의 문자를 입력받아서 문자가 'R'이나 'r'이면 "Rectangle"이라고 출력한다. 'T'이거나 't'이면 "Triangle", 'C'이거나 'c'이면 "Circle"이라고 출력하는 프로그램을 작성한다. 그 외의 문자가 들어오면 "Unknown"이라고 출력한다.  (if-else 선택 구조 / MEDIUM)

문자를 입력하시오: C
Circle
문제 의도
if-else 문을 이용해 문자 입력에 따라 다르게 출력할 수 있는가?

 

#include <stdio.h>

int main(void) {
	char x;

	printf("문자를 입력하시오: ");
	scanf_s("%c", &x);
	
	switch (x) {
	case 'C':
	case 'c':
		printf("Circle");
		break;
	case 'R':
	case 'r':
		printf("Rectangle");
		break;
	default:
		printf("Unknown");
		break;
	}

	return 0;
}
코드 설명
이 경우에는 switch문도 효율적이므로 if-else문 대신 switch 문으로 구성해 봤다.
물론 if (x == 'C' || x == 'c') { ... 와 같이 구성할 수도 있다.
hint에서 scanf대신 getchar()을 써보라고 했으니 getchar을 사용하려면..
x = getchar();
이 코드를 scanf 대신에 넣어보자.

 

 


12. 2자리 숫자로 이루어진 복권이 있다. 사용자가 가지고 있는 복권 번호가 2자리 모두 일치하면 100만원을 받는다. 2자리 중에서 하나만 일치하면 50만 원을 받는다. 하나도 일치하지 않으면 상금은 없다. 복권 당첨 번호는 난수로 생성하고 사용자의 입력에 따라서 상금이 얼마인지를 출력하는 프로그램을 작성하라.

복권 번호를 입력하시오(0에서 99사이): 87
당첨번호는 29입니다.
상금은 없습니다.
문제 의도
난수를 지정된 범위 내에서 생성하고, 그 난수의 십의 자리 수와 일의 자리 수를 /와 %연산자를 통해 분리할 수 있는가?
또한 사용자의 복권 번호의 십의 자리 수와 일의 자리 수가 각각 복권 당첨 번호으 십의 자리 수와 일의 자리 수와 일치하는지 판단하고, 그 여부에 따라 얼마의 상금을 받는지를 if-else 문으로 설계할 수 있는가? 

 

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

int main(void) {
	int num1, num2;
	int num1digit1, num1digit2;
	int num2digit1, num2digit2;

	srand(time(NULL));
	printf("복권 번호를 입력하시오(0에서 99사이): ");
	scanf_s("%d", &num1);
	num1digit1 = num1 / 10;
	num1digit2 = num1 % 10;

	num2 = rand() % 100;
	num2digit1 = num2 / 10;
	num2digit2 = num2 % 10;

	printf("당첨번호는 %d입니다.", num2);

	if (num1digit1 == num2digit1 && num1digit2 == num2digit2) {
		printf("축하합니다. 100만원 당첨입니다.");
	}
	else if (num1digit1 == num2digit1 || num1digit2 == num2digit2) {
		printf("축하합니다. 50만원 당첨입니다.");
	}
	else {
		printf("당첨이 아닙니다. 당신은 돈을 잃었어요,");
	}

	return 0;
}
코드 설명
1~11번 문제까지는 굉장히 무난한 문제였는데, 12번에서 갑자기 풀악셀이 밟힌다.
일단 랜덤 난수를 출력해야 하니 <stdlib.h>와 <time.h>의 헤더 파일 2개를 포함시켜보자.
일단 사용자의 복권 번호를 입력받고 그 번호를 십의 자리의 수와 일의 자리의 수로 분리한다.
그리고 당첨 복권 번호도 난수(0~99)로 생성하고 자리수를 분리한다.
if-else 문을 이용해서 각 자리수가 둘다 같으면 100만원, 둘 중에 하나가 같으면 50만원,
그 외의 경우는 당첨이 아니라는 것을 출력한다.

 

반응형