본문 바로가기
작업/Programming

C언어 평면의 사분면 조건문으로 만들어 보기

 

Perfect C 도서의 6장은 조건 문법에 대해 소개하고 있습니다.

 

프로그래밍 연습 1번 문제에서 각도에 맞는 평면의 사분면 값을 출력하라고 했습니다.

이 문제를 통해 6장에서 배운 조건을 모두 활용해서 코딩을 해보았습니다.

 

 

if, else if, switch case 문장을 모두 사용했으며

문제 풀이보다는 조건문을 어떻게 사용할지에 대해 중점으로 적었습니다.

 

 

시작으로 어떻게 코드를 구성했는지 알고리즘을 소개하고,

실제 코드와 함께 다시 부연 설명하는 식으로 블로깅 하겠습니다.

 


문  제

 

 

0~360도의 평면 사분면 값을 출력 ( 125도 = 2사분면 )

 

0도는 '양의 X축'

90도는 '양의 Y축'

180도는 '음의 X축'

270도는 '음의 Y축' 출력

 


알 고 리 즘  설 계

 

 

1. 우선 표준 입력의 범위를 정하겠습니다.

 

문제 해결에 초점을 맞춘다면 해당 과정은 필요 없습니다.

잘못된 값을 입력했을 경우에 처리하는 과정도 차근차근 해보면 좋을 것 같아서 적용하였습니다.

음수를 입력했을 경우에는 입력 오류를 표시하도록 했습니다. 정상 입력 범위는 0 이상입니다.

 

 

 

2. 입력 범위를 0 이상으로 했기 때문에 360도 이상의 값이 나올 수 있습니다.  (ex. 550도)

 

출력을 위해 필요한 값은 0~359도이기 때문에(360도 = 0도) 다른 큰 값들은 의미가 없습니다.

따라서 360도 이상인 값은 360을 나머지 연산(%)하고 결괏값을 사용하였습니다.

(ex. 550도 -> 550 % 360 = 190도)

 

 

 

3. 0, 90, 180, 270도의 경우에 양의 X축, 양의 Y축, 음의 X축, 음의 Y축을 출력하라고 하였습니다.

 

그리고 나머지 각도들에 대해서는 각각 1, 2, 3, 4분면을 출력하라고 하였습니다.

따라서 두가지 경우로 나누고 각각을 처리하도록 구성하였습니다.

 

 

0, 90, 180, 270도는 90으로 나누었을 때 나머지가 0이 나오는 값들입니다.

따라서 나머지가 0이 되는 값들을 조건으로 정하고, 그 값들을 switch문으로 재분류하였습니다.

 

 

나머지가 0이 되지 않는 값들은 모두 사분면 안에 해당하는 값들이기 때문에

else if 문으로 따로 처리하였습니다.

 


코드

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>


int main() {

	int angle; // 0~360의 각도

	printf("각도 입력 : ");
	scanf("%d", &angle);

	// 0 양의 x축, 1~89 1사분면, 90 양의 y축, 91~179 2사분면
	// 180 음의 x축, 181~269 3사분면, 270 음의 y축 271~359 4사분면

		if (angle >= 0) {  // 양의 정수만 취급
			if (angle >= 360)
				angle = angle % 360; // 각도가 360보다 큰 경우 값 처리

			if (angle % 90 == 0) {     //경계선 값 출력
				switch (angle / 90) {
				case 0:
					printf("%d도 = 양의 X축\n", angle);
					break;
				case 1:
					printf("%d도 = 양의 Y축\n", angle);
					break;
				case 2:
					printf("%d도 = 음의 X축\n", angle);
					break;
				case 3:
					printf("%d도 = 음의 Y축\n", angle);
					break;
				}
			}
			else if (angle > 270) // 4사분면에 위치
				printf("각도 %d도 = 4사분면\n", angle);

			else if (angle > 180) // 3사분면에 위치
				printf("각도 %d도 = 3사분면\n", angle);

			else if (angle > 90) // 2사분면에 위치
				printf("각도 %d도 = 2사분면\n", angle);

			else if (angle > 0) // 1사분면에 위치
				printf("각도 %d도 = 1사분면\n", angle);
		}
		else
			printf("입력 오류 입니다. 양의 정수 값을 입력하세요.\n");


	return 0;
}

 

 


코 드 해 석

 

 

각도는 scanf() 함수를 통해 입력받습니다.

 

 

첫 번째 조건 ‘if ( angle >= 0 )’는 음의 값을 입력받을 경우 오류 처리를 하기 위한 조건입니다.

오류 처리는 마지막 else 구문에 있으며 메시지를 출력하는 것으로 하였습니다.

 

 

두 번째 조건 ‘if ( angle >= 360 )’는 입력 값이 360도 이상인 경우에 처리하기 위한 조건입니다.

360도는 0도와 같기 때문에 360도 이상의 값들은 간단하게 만들 필요가 있었습니다.

최종적으로 다듬어진 값이 angle 변수에 새로 저장되며 다음 if문으로 들어갑니다.

 

 

세 번째 조건 ‘if ( angle % 90 == 0 )’는 경계선에 해당하는 값들을 처리하기 위한 조건입니다.

switch로 (angle/90)의 값을 이용하는데,

0/90 =0, 90/90 =1, 180/90 =2, 270/90 =3으로 표현됩니다.

 

360도 이상부터는 두 번째 조건으로 간단히 표현되기 때문에 switch에 들어가는 값들이 가능해집니다.

 

 

 

그다음 else if 문장은 사분면의 값을 출력하기 위한 조건입니다.

가장 큰 수로 조건을 시작하면 ( angle > 0 && angle <90 ) 같은 조건 연산을 적용하지 않아도 됩니다.

 

 

코딩한 순서대로 순차적으로 코드를 읽기 때문에 가능한 것입니다.

 


출 력 결 과

 

 

 

 

해당 코드를 통해 조건으로 사용되는 문장을 이해하는 것에 도움이 되었으면 합니다.

코드는 PC로 보는 것을 기준으로 했기 때문에 모바일에서는 화면 조정하면서 봐야 합니다.

 

 

-끝-