Sister Nosilv story

[쉽풀C] 6장 조건문_중간점검 도전문제 Exercise Programming 해설

by 노실언니

쉽게 풀어쓴 C언어 Express - 천인국 - 생능출판사 - 개정3판

Chapter 6. 조건문

* 내 식대로 챕터정리

내 방식대로 정리 / 태블릿 사도 해결 안 될 것 같은 내 손

제어문 중 조건문도 반복문도 둘 다 조건에 의해서 돌아가고,

차이점이라면 1 / n회 실행가능성인데

왜 굳이 조건문/반복문으로 나눴는지 모르겠당


p231. 중간점검

1️⃣. 중괄호로 묶은 여러 개의 문장을 무엇이라고 하는가?

 🢩 복합문(Compound statement) ≒ { ㆍㆍㆍ } Block

2️⃣. C에서 참과 거짓은 어떤 정수로 표시되는가?

 🢩 거짓: 0 ↔ 참: 0 아닌 모든 값

3️⃣. if문 안의 조건식으로 많이 사용되는 수식의 종류는 무엇인가?

 🢩 비교연산자(== != >= <= > <)나 논리연산자( && || ! )가 사용된 수식

4️⃣. if문이 끝나면 어떤 문장이 실행되는가?

 🢩 if (조건식) {실행블록}이 끝나면, 다시 순차적으로 다음 문장을 실행한다. re-sequence

5️⃣. 조건에 따라서 실행되어야 하는 문장이 두개 이상이면 어떻게 하여야 하는가?

 🢩 if (조건식) 명령한줄 → if (조건식) {실행블록} 그리고, 적절한 개행과 들여쓰기

p236. 중간점검

1️⃣. 변수 n의 값이 100보다 크거나 같으면 "large", 100보다 작으면 "small" 을 출력하는 if-else문을 작성하라

 🢩

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int n;
	printf("variable n >> ");
	scanf("%d", &n);

	if (n >= 100) printf("large\n");
	else printf("small\n");

	return 0;
}

 

p240. 중간점검

1️⃣. n의 값이 각각 -1, 0, 5인 경우에 다음의 코드에 의하여 생성되는 출력은 무엇인가?

if (n == 0)
		printf("A");
	else if (n > 3)
    	printf("B");
    else
    	printf("C");

 🢩 C, A, B

들여쓰기 상태가 이상하긴 하지만, 들여쓰기가 중요한 python이 아니니까 if~else if~else로 묶어주기

n = 0 → A ㆍㆍㆍ [ 0 ]

n ≠ 0 ∩ n > 3 → B ㆍㆍㆍ [ 5 ]

n ≠ 0 ∩ n <= 3 → C ㆍㆍㆍ [ -1 ]

 

2️⃣. 컵의 사이즈를 받아서 100ml미만은 small, 100ml이상 200ml미만은 medium, 200ml 이상은 large라고 출력하는 연속적인 if-else문을 작성하시오.

 🢩

int size;
printf("size >> ");
scanf("%d", &size);

if (0 < size && size < 100) printf("small\n");
else if (100 <= size && size < 200) printf("medium\n");
else if (200 <= size) printf("large\n");
else printf("SIZE ERROR\n");

 

p242. 도전문제

위의 프로그램은 단순히 산술 연산자만을 처리한다. 비트 연산자(&, |, ^)을 추가하여 보자. 비트 연산자인 경우에는 16진수로 입력값과 결과값을 출력하여 보자.

 🢩

char op;
int x, y;
printf("+ - * / & | ^ Expression (no spacebar) >> ");
scanf("%d%c%d", &x, &op, &y);

if (op == '+') printf("%d %c %d = %d\n", x, op, y, x + y);
else if (op == '-') printf("%d %c %d = %d\n", x, op, y, x - y);
else if (op == '*') printf("%d %c %d = %d\n", x, op, y, x * y);
else if (op == '/') printf("%d %c %d = %lf\n", x, op, y, (double)x / y);
else if (op == '&') printf("%04x %c %04x = %04x\n", x, op, y, x & y);
else if (op == '|') printf("%04x %c %04x = %04x\n", x, op, y, x | y);
else if (op == '^') printf("%04x %c %04x = %04x\n", x, op, y, x ^ y);
else printf("Wrong Expression\n");

 

p244. 도전문제

만약 판별식이 0이면 중복된 근이 없다. 판별식이 0인 경우를 따로 체크하여서 근이 -b/(2a)라고 출력하는 문장을 추가해보자.

 🢩

int a, b, c;
double d;
printf("ax^2 + bx + c = 0\n");
printf("a, b, c ? ");
scanf("%d %d %d", &a, &b, &c);

if (!a) printf("[linear equation]\n x = %lf\n", -c / b);
else {
	printf("[quadratic equation]\n");
	d = (b * b) - (4 * a * c);
	if (!d) printf(" D=0, x = %lf - multiple root\n", -(double)b / (2 * a));
	else if (d > 0) printf(" D>0, x = %lf, %lf\n", ((-b) + sqrt(d)) / (2 * a), ((-b) - sqrt(d)) / (2 * a));
	else if (d < 0) printf(" D<0, x = imaginary root\n");
	else printf("Something Error\n");
}

 

p250. 중간점검

1️⃣. case 절에서 break 문을 생략하면 어떻게 되는가?

 🢩 switch문 밖으로 break 하지 않고, 계속 다음 case절을 진행한다.

2️⃣. 변수 fruit의 값이 각각 1, 2 ,5일 때, 다음의 코드의 출력을 쓰시오.

switch (fruit) {
case 1:
	printf("사과 \n");
	break;
case 2:
	printf("배 \n");
case 3:	
	printf("바나나 \n");
	break;
default:
	printf("과일 \n");
	break;
}

 🢩 사과, 배 바나나, 과일

[1] → case 1 사과 & break

[2] → case 2 배 & case 3 바나나 & break

[5] → default 과일 & break

 

p251. 도전문제

위의 프로그램은 단순히 산술 연산자만을 처리한다. 비트 연산자(&, |, ^)을 추가하여 보자. 비트 연산자인 경우에는 16진수로 입력값과 결과값을 출력하여 보자.

 🢩

int x, y;
char op;
printf(" + - * / % & | ^ Expression (NO spacebar) >> ");
scanf("%d%c%d", &x, &op, &y);

switch (op){
case '+': printf("%d %c %d = %d\n", x, op, y, x + y); break;
case '-': printf("%d %c %d = %d\n", x, op, y, x-y); break;
case '*': printf("%d %c %d = %d\n", x, op, y, x*y); break;
case '/': printf("%d %c %d = %lf\n", x, op, y, (double)x/y); break;
case '%': printf("%d %c %d = %d\n", x, op, y, x%y); break;
case '&': printf("%04x %c %04x = %04x\n", x, op, y, x&y); break;
case '|': printf("%04x %c %04x = %04x\n", x, op, y, x|y); break;
case '^': printf("%04x %c %04x = %04x\n", x, op, y, x^y); break;
default: printf("ERROR\n"); break;
}

 * switch 속 case도 들여쓰기를 하는게 보편적일 것 같은데, 비주얼스튜디오에선 자동으로 들여쓰기를 안해준다.

  특별한 이유가 있는걸까?

  ▶ 구글 검색 switch indent style guide → 1링크 2링크

더보기

🢩 < 답은 없으나 case를 들여쓰기한 것을 선호한다. > - 왜? READABLE 가독성

 - 이상: case는 논리적으로 label이고, label은 그들이 속한 블록(여기선 switch)과 같은 들여쓰기 수준을 가져야 해.

    Oracle Java Code Conventions : case는 No Indentation (마지막 업데이트 1999년)

 - 현실: 원칙이고 논리고 나발이고, 암튼 case는 들여쓰기 하는게 더 보기좋아 ㅇㅈ? ㅇㅇㅈ! 

    Google Java Style Guide : case Indentation

+ α ' switch문은 들여쓰기가 생기기도 전에 만들어졌다 ! '

[ visual studio IDE 자동 switch / case indent 설정 ]

Tools > Options > Text Editor > C/C++ > Code Style

> Formatting > Identation > ☑️Indent case contents & labels

시원-

  

p254. 도전문제

삼각형의 내각을 받아서 내각의 합이 180º인지를 검사하도록 코드를 추가하라.

 🢩

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{

	int a, b, c;
	int x, y, z, total_angle;
	printf("line  AB = c\n");
	printf("line  BC = a\n");
	printf("line  CA = b\n");
	printf("angle ab = C\n");
	printf("angle bc = A\n");
	printf("angle ca = B\n\n");

	printf("Length of a, b, c >> ");
	scanf("%d %d %d", &a, &b, &c);

	printf("Angle of A, B, C >> ");
	scanf("%d %d %d", &x, &y, &z);
	total_angle = x + y + z;

	if (((a + b) > c && (b + c) > a && (c + a) > b) && (total_angle == 180)) printf("It's real triangle\n");
	else printf("It's not real triangle\n");
	
	return 0;
}

if 의 조건식이 많이 길고 복잡한데, 우리 컴퓨터가 안 힘들까 ㅠㅠㅠㅠㅠ

 

p255. Summary

  • 문장의 실행 순서를 바꾸는 2가지 종류의 제어문은 조건문반복문이다.
  • if-else 문의 구조를 주석으로 설명하여 보라.
if ( 조건식 )
	문장1;		// 조건식이 '참≠0'이면 문장1을 실행해줘요
else
	문장2;		// 조건식이 '거짓0'이면 문장2를 실행해줘요
  • 조건에 따라서 실행되어야 하는 문장이 두 개 이상이면 이들 문장을 중괄호로 묶는다. 이것을 복합문이라고 한다.
  • switch 문의 구조를 주석으로 설명하여 보라.
switch (조건식) {	// 정수를 return 하는 제어식 <순간이동>
	case c1:	// 제어식의 결과값이 c1이면,
    	문장 1;	// 문장 1을 실행하고
        break;	// switch문 빠져나오기!
    case c2:	// 제어식이 결과값이 c2면,
    	문장 2;	// 문장 2를 실행하고
        break;	// switch문 빠져나오기!
    ...
    default:	// 제어식의 결과값이 모든 case의 값과 다르면,
    	문장 3;	// 문장 3을 실행하고
        break;	// switch문 빠져나오기!
    ...			// 이쪽 문장들은 dead code
}

p256. Exercise

1️⃣. 수식 !(1 + 1 >= 2)의 결과값은 얼마인가?

 🢩 ① 0

연산자 우선순위) 산술(+) > 비교(>=)

0 = !1

단항 > NOT(! ~) > 산술 > 비트이동 > 관계(비교) > 비트(&|^) > 논리(&&||) > 대입 > ,

 단항 > NOT > 산술 > 비트이동 > 비교 > 비트 > 논리 > 대입 >  , 

 

2️⃣. 수식 (10 > 20) && (20 > 10)의 결과값은 얼마인가?

 🢩 ① 0

- FALSE ∩ (TRUE) = FALSE ㆍㆍㆍ 논리AND는 하나라도 FALSE면 결과가 FALSE이다.

따라서, 첫 피연산자가 FALSE인 순간! 다음 피연산자의 상태를 따지지않고 바로 FALSE(0)를 낸다.

- Python은 bool형인 true false가 존재하지만, C는 0과 1(입력은 0이 아닌 모든 수)로 거짓/참을 따진다.

 

3️⃣. 조건 "x가 0 또는 1이면"을 올바르게 구현한 것을 모두 골라보자.

 🢩 ②, ③

- [예상식] if (x==0) || (x ==1)  ㆍㆍㆍ A ∪ B (OR)

① && (AND)

예상식과 동일

!(x!==0 && x!=1) ㆍㆍㆍ (A' ∩ B')' 드모르간 ㆍㆍㆍ A ∪ B 예상식과 동일

④ | : 비트OR연산자 ≠ 논리OR연산자

 

4️⃣. 다음의 작업을 수행하는 문장을 작성하라.

 ⒜ 속도가 60km/h이상이고 100km/h이하이면 "정상 속도"라고 출력한다.

  🢩

if (velocity >= 60 && velocity <= 100) printf("정상 속도");

 ⒝ x와 y 중에서 큰 값을 max에 저장하고 작은 값을 min에 저장한다.

  🢩

if (x > y) max = x, min = y;
else max = y, min = x;
result = (x > y);

switch(result){
	case 0:
    	max = x;
        min = y;
        break;
	case 1:
    	max = y;
        min = x;
        break;
	default:
    	break;
}

 ⒞ op가 1이면 "one"을 출력하고 op가 2이면 "two", op가 3이면 "three"를 출력한다.

  🢩

switch(op){
	case 1:
    	printf("one");
    	break;
    case 2: 
    	printf("two");
        break;
    case 3:
    	printf("three");
        break;
    default: break;
}

 

5️⃣. switch문은 if-else문으로 변경하고 if-else문은 switch문으로 변경하라.

 ⒜

if (x == -1) num--;
else if (x == 1) num++;
else num = 0;

  🢩

switch (x) {
	case -1:
		num--;	break;
	case 1:
		num++;	break;
	default:
		num = 0;	break;
}

 

 ⒝

switch (code) {
	case 'X':
		x++;	break;
	case 'Y':
		y++;	break;
	default:
		x = y = 0;	break;
}

  🢩

if (code == 'X') x++;
else if (code == 'Y') y++;
else x = y = 0;

 

6️⃣. 다음의 2개의 if 문을 논리 연산자를 사용하여 하나의 if 문으로 다시 작성하라.

 ⒜

if ( x > 10 )
	if ( x < 20 )
    	prinf("%d\n", x);

  🢩 10 < x < 20 AND

if ( x > 10 && x < 20 ) prinf("%d\n", x);

 

 ⒝

if ( x < 10 )
	prinf("%d\n", x);
if ( x > 20 )
   	prinf("%d\n", x);

  🢩 10보다 작거나 OR 20보다 큰 

if ( x > 10 || x < 20) prinf("%d\n", x);

 

7️⃣. 다음 프로그램의 출력을 쓰라.

 ⒜

if ( x > 10 )
	if ( x < 20 )
    	prinf("%d\n", x);

  🢩 10 < x < 20 (AND)

if ( x > 10 && x < 20 ) prinf("%d\n", x);

 

 ⒝

if ( x < 10 )
	prinf("%d\n", x);
if ( x > 20 )
   	prinf("%d\n", x);

  🢩 10보다 작거나 (OR) 20보다 큰 

if ( x > 10 || x < 20) prinf("%d\n", x);

 

8️⃣. 다음 문장의 오류를 찾아서 모두 수정하라. 오류가 없을 수도 있고 2개 이상의 오류가 있을 수도 있다. 문법적인 오류뿐만 아니라 논리적인 오류도 지적하라.

 ⒜ 

if (age > 18);			// ; 제거
	printf("성인\n");
else
	printf("청소년\n");

/*-----------------------------------
*	[답: Line 1.]
*	Wrong: 키워드 (조건); {실행블록;}
*	Right: 키워드 (조건) {실행블록;}
*/

if (age > 18)
	printf("성인\n");
else
	printf("청소년\n");

 ⒝

if ( 0 <= age <= 18)	// 0 <= age && age <= 18
	printf("청소년\n");

/*-----------------------------------
*	[답: Line 1. 수학식을 읽는 방식이 사람과 다르다]
*	Wrong: A 비교 B 비교 C ··· 사람에겐 지극 정상
*	Right: ( (A 비교 B) 논리로 묶기 (B 비교 C) )
*/

if ( 0 <= age && age <= 18)
	printf("청소년\n");

 ⒞

if ( x = 0 )	// x == 0
	printf("x는 0이다.\n");

/*-----------------------------------
*	[답: Line 1. 수학식을 읽는 방식이 사람과 다르다(2)]
*		Build Error (x)	Logic Error (o)
*	Wrong: x = 0 ; [Assignment] 변수x에 값0을 '할당' 후 그 값 반환.
*		∴ 항상 if (0 false), x Equal 0 임에도 불구하고 'x는 0이다' 출력X + Dead Code
*	Right: x == 0 ; [Comparison] 변수x값 'Equal' 0인지 물어본 후 답 반환.
*		∴ x Equal 0이면, if (1 True)가 되어 'x는 0이다' 출력
*/

if ( x == 0 )
	printf("x는 0이다.\n");

 ⒟ 대충 풀다 틀리기 딱 좋은 문제

if (speed > 120)			// if (speed > 150) printf("벌금 9 ···
	printf("벌금 6만원\n");
else (speed > 150)			// else if (speed > 120) printf("벌금 6 ···
	printf("벌금 9만원\n");
else
	printf("OK\n");

/*-----------------------------------
*	[답: if - else if - ··· - else & 조건영역의 포함관계]
*		Build Error (o)	Logic Error (o)
*	Wrong(1): else (조건영역) ··· Build Error
*	Right(1): else if (조건영역)
* 
*	Wrong(2): if (speed > 120) else if (speed > 150) ··· Logic Error
*			speed > 150인 경우, else if (speed > 150)이 아닌
*								if (speed > 120)의 블럭실행
*	Right(2): if (speed > 150) else if (speed > 120)
*			if 실행 ;						150 < speed
*			else if 실행 ;		120 < speed ≤ 150
*			else 실행 ;	speed ≤ 120
*/

if (speed > 150)
	printf("벌금 9만원\n")	
else if (speed > 120)
	printf("벌금 6만원\n");
else
	printf("OK\n");

 ⒠

if (score > 90)			// { } 사용
	printf("장학금\n");
	printf("우등\n");
else
	printf("좀 더 노력하세요\n");
	
/*-----------------------------------
*	[답: 복합문은 {···} 로 감싸주기]
*/

if (score > 90) {
	printf("장학금\n");
	printf("우등\n");
}
else
	printf("좀 더 노력하세요\n");

 ⒡ 8번의 8개 문제 중 가장 고난도. 함정함정스멜 'Logic'들어가는 순간 그러네요.

수능에서 '추론'만 들어가면 난이도가 올라가는 그런 결인감

if (x > 0)			// 컴파일러가 읽긴 하지만, x값이 뭐든 실행되는 것이 없는! 거의 Dead code
if (y > 0)			// { }로 포함관계 확실하게 할 것
	printf("x와 y는 모두 양수\n");
else				// if (y > 0)의 else 이므로 y ≤ 0 일 때,
	printf("x가 양수가 아님\n");	// 이 문장이 실행되는 논리적 오류 존재함
/*-----------------------------------
*	[답: 포함관계 & 이중if문 & logic 다 신경쓰기]
*/

if (x > 0) {		// ( x > 0 && y > 0 )로 해버리는 흑우없재
	if (y > 0)
		printf("x와 y는 모두 양수\n");
}
else				// 여기서 문제생김; 'x > 0', y ≤ 0 인 상황에서도 실행
	printf("x가 양수가 아님\n");

 ⒢

if (age > 0 | age <= 18)	// 비트OR인데다가, 실제론 논리OR도 아니고 논리AND여야함
	printf("청소년\n");
/*----------------------
*	[답: Line 1. 적절한 연산자가 맞는지 & logic신경쓰기]
*	Wrong: if (age > 0 | age <= 18)
*	Right: if (age > 0 && age <= 18)
*/

if (0 < age && age <= 18)
	printf("청소년\n");

 ⒣

int tiger = 3;
switch (animal){
	case tiger:
		···
}

/*----------------------
*	[답: Line 1. case엔 문자or숫자만 & logic신경쓰기]
*	Wrong: case tiger:
*	Right: case 3:
*/
int animal = 3;
switch (animal){
	case 3:
		printf("어흥!\n");
		break;
	···
	default:
		printf("누구냐 넌\n");
		break;
}

# 연산자 우선순위

# 제어[조건 ⇆ 실행]: 원하는 상황원하는 것원하는 횟수로 실행되는지(= 논리적 오류가 없는지) Check 必

 

p.258 Programming

1️⃣. 키보드에서 하나의 문자를 읽어서 모음과 자음을 구분하는 프로그램을 작성하여 보자. 단 switch 문을 사용한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	printf("문자를 입력하시오: ");
	int str = getchar();

	switch (str) {		// 알파벳 자모 구분에 관한 자세한 것은 덮어두는 걸로
		case ('A'):
		case ('E'):
		case ('I'):
		case ('O'):
		case ('U'):
		case ('a'):
		case ('e'):
		case ('i'):
		case ('o'):
		case ('u'):
			printf("모음입니다\n");
			break;
		default:
			printf("자음입니다\n");
			break;
	}
	return 0;
}

2️⃣. 사용자로부터 2개의 정수를 받아서 첫 번째 정수가 두 번째 정수로 나누어 떨어지는 지를 검사하는 프로그램을 작성하다. 즉 약수인지를 검사한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) 
{
	int a, b;
	printf("정수를 입력하시오: ");
	scanf("%d", &a);
	printf("정수를 입력하시오: ");
	scanf("%d", &b);
    
	if (!(a % b)) printf("약수입니다.\n");
	else printf("약수가 아닙니다.\n");

	return 0;
}

3️⃣. 사용자로부터 3개의 정수를 읽어 들인 후에 if-else 문을 사용하여 가장 작은 값을 결정하는 프로그램을 작성하라.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) 
{
	int a, b, c, min;
	printf("3개의 정수를 입력하시오: ");
	scanf("%d %d %d", &a, &b, &c);

	if (a < b) {
		if (a < c) min = a;
		else min = c;
	}
	else
		if (b < c) min = b;
		else min = c;

	// min = (a<b ? a : b); min = (min<c ? min : c);

	printf("제일 작은 정수는 %d입니다.\n", min);
	return 0;
}

4️⃣. 컴퓨터와 가위, 바위, 보 게임을 하는 프로그램을 작성하라. 컴퓨터는 사용자에게 알리지 않고 가위, 바위, 보 중에서 임의로 하나를 선택한다. 사용자는 프로그램의 입력 안내 메시지에 따라서, 3개 중에서 하나를 선택하게 된다. 사용자의 선택이 끝나면 컴퓨터는 누가 무엇을 선택하였고 누가 이겼는지, 비겼는지를 알려준다.

 

 [사전지식 必]

* <time.h>의 time(NULL) : UCT 1970-01-01 00:00:00 ~ 현재까지의 time interval(단위:sec) 반환

  └ time_t time(time_t* timer)

* <stdlib.h>의 rand(): 특정한 seed값에 대응하는 특정값[0~RAND_MAX] 반환 ( ∴ seed 안 변하면 rand()도 안 변함)

* <stdlib.h>의 srand(■): [0 ~ 자연수] 중 seed값 설정

  └ void srand(unsigned int)

* <stdlib.h>의 RAND_MAX: rand()의 최대범위 설정(아마도 32767)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>		// int rand(void), void srand(unsigned int), int RAND_MAX
#include <time.h>		// time_t time(time_t* timer)

int main(void) 
{
	int com, user;

	srand(time(NULL));			// 매 초 변하는 seed 설정
	com = (rand() % 3) + 1;		// {1, 2, 3}

	printf("선택하시오(1: 가위, 2:바위, 3:보)");
	scanf("%d", &user);

	printf("User: %d VS Com: %d\n", user, com);
	switch (com - user) {
		case 0:
			printf("서로 비겼음\n");
			break;
		case 1:			// 바위-가위, 보-바위
		case -2:		// 가위-보 
			printf("컴퓨터가 이겼음\n");
			break;
		case -1:		// 가위-바위, 바위-보
		case 2:			// 보-가위
			printf("사용자가 이겼음\n");
			break;
		default:
			printf("[Err]입력값이 1, 2, 3이 아닙니다\n");
	}

	return 0;
}

5️⃣. 놀이 공원에서 롤러코스터에 타려면 키가 140cm 이상이고 나이가 10살 이상이어야 한다고 가정하자. 사용자에게 키와 나이를 질문한 후에 "타도 좋습니다" 또는 "죄송합니다"를 출력하는 프로그램을 작성하여보자.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int height, age;
	printf("키를 입력하시오(cm): _\b");
	scanf("%d", &height);
	printf("나이를 입력하시오: _\b");
	scanf("%d", &age);

	if (height >= 140 && age >= 10) printf("타도 좋습니다.\n");
	else printf("죄송합니다.\n");

	return 0;
}

6️⃣. 사용자로부터 몇 월인지를 정수로 입력받아서 Jan와 같은 영어단어로 출력하는 프로그램을 작성하라.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int month;
	printf("월번호를 입력하시오: _\b");
	scanf("%d", &month);
	
	switch (month) {
		case 1: 
			printf("Jan\n");	break;
		case 2: 
			printf("Fab\n");	break;
		case 3: 
			printf("Mar\n");	break;
		case 4: 
			printf("Apr\n");	break;
		case 5: 
			printf("May\n");	break;
		case 6: 
			printf("Jun\n");	break;
		case 7: 
			printf("Jul\n");	break;
		case 8: 
			printf("Aug\n");	break;
		case 9: 
			printf("Sep\n");	break;
		case 10: 
			printf("Oct\n");	break;
		case 11: 
			printf("Nov\n");	break;
		case 12: 
			printf("Dec\n");	break;
		default:
			printf("[ERROR]\n"); break;
	}
	return 0;
}

7️⃣. 사용자로부터 키를 입력받아서 표준 체중을 계산한 후에 사용자의 체중과 비교하여 저체중인지, 표준인지, 과체중인지를 판단하는 프로그램을 작성하라. 표준 체중 계산식은 다음을 사용하라.

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int height, real_weight;
	double standard_weight;

	printf("체중과 키를 입력하세요: ");
	scanf("%d %d", &real_weight, &height);

	standard_weight = (height - 100) * 0.9;
	if (real_weight < (standard_weight - 5))
		printf("저체중입니다.\n");
	else if (((standard_weight - 5) <= real_weight) && (real_weight < (standard_weight + 5)))
		printf("표준체중입니다.\n");
	else
		printf("과체중입니다.\n");

	return 0;
}

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

구분 대인 소인(3~12세/65세이상)
자유이용권(오후 5시 이전) 34,000 25,000
야간이용권(오후 5시 이후) 10,000
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int hour, age;
	printf("현재 시간과 나이를 입력하시오(시간, 나이): ");
	scanf("%d %d", &hour, &age);

	int charge;
	if (0 < age && age <= 2) charge = 0;			// 나이가 대, 소인 어느 곳에도 해당않는 'baby' - 무료
	else if (hour >= 17) charge = 10000;			// 나이가 baby가 아닌 사람 중 시간이 after 17 - 야간
	else if (12 < age && age < 65) charge = 34000;	// 나이가 대인이고 시간이 after 17이 아님 - 자유 대인
	else if (0 < age) charge = 25000;				// 나이가 소인이고 시간이 after 17이 아님 - 자유 소인
	else charge = -1;								// 그 외의 입력은 오류처리

	if (charge >= 0) printf("요금은 %d입니다.\n", charge);
	else printf("입력오류로 출력할 수 없습니다.\n");

	return 0;
}

9️⃣. 다음과 같이 정의되는 함수의 함수값을 계산하여 보자. 사용자로부터 x값을 입력받아서 함수값을 계산하여 화면에 출력한다. x는 실수이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	double x, result;
	
	printf("x의 값을 입력하시오: ");
	scanf("%lf", &x);

	switch (x>0)
	{
		case 0:			// x ≤ 0
			result = (x * x) - (9 * x) + 2;
			break;
		case 1:			// x > 0
			result = (7 * x) + 2;
			break;
		default:
			printf("ERROR\n");
			break;
	}

	printf("f(x)의 값은 %lf\n", result);
	return 0;
}

🔟. (x, y) 좌표를 입력받아서 좌표가 속하는 사분면을 화면에 출력하는 프로그램을 작성하라.

 

* Chapter 5에 비슷한 문제가 있었음; 220p 10번

더보기

조건 연산자 ?만을 이용하여 2차원 공간의 x 좌표와 y 좌표를 입력받아서 그 좌표가 속하는 사분면을 출력하는 프로그램을 작성하시오. (x>0 && y>0)? printf("1사분면"): printf(" ");와 같은 문장을 사용하여 작성해본다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	double x, y;
	int quardrant;
	printf("좌표(x, y): ");
	scanf("%lf %lf", &x, &y);

	if (x * y == 0) quardrant = 0;
	else if (x > 0 && y > 0) quardrant = 1;
	else if (x < 0 && y < 0) quardrant = 3;
	else if (x > 0) quardrant = 4;
	else if (y > 0) quardrant = 2;
	else printf("ERROR\n");

	if (quardrant) printf("%d사분면\n", quardrant);
	else printf("축 위에 있습니다.\n");

	return 0;
}

1️⃣1️⃣. 사용자로부터 하나의 문자를 입력받아서 문자가 'R'이나 'r'이면 "Rectangle"이라고 출력한다. 'T'이거나 't'이면 "Triangle", 'C'이거나 'c'이면 "Circle"이라고 출력하는 프로그램을 작성한다. 그 외의 문자가 들어오면 "Unknown"이라고 출력한다.

*HINT 문자하나를 읽을 때는 scanf() 뿐만 아니라 getchar()도 사용가능

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	char shape;
	printf("문자를 입력하시오: ");
	shape = getchar();

	switch (shape) {
		case('R'):
		case('r'):
			printf("Rectangle\n");
			break;
		case('T'):
		case('t'):
			printf("Triangle\n");
			break;
		case('C'):
		case('c'):
			printf("Circle\n");
			break;
		default:
			printf("Unknown\n");
			break;
	}
	return 0;
}

 

~END~

반응형

블로그의 정보

노력하는 실버티어

노실언니

활동하기