728x90
Program 1
도형의 면적을 계산하는 프로그램을 쓰시오. (도형의 종류는 삼각형, 정사각형, 사각형, 원의 네 가지로 한다.)
- 입력 : 네 가지 도형 중에 하나를 선택, 각 도형의 길이 정보
- 출력 : 선택한 도형의 길이 정보와 계산한 면적 결과 출력
- 예외처리, 설명 주석, 문제 해결 방법에 대한 설명 필수
1) 문제 해결 방법에 대한 설명
- 프로그램을 반복 실행하다가 사용자가 프로그램 종료를 선택하면 실행을 중지해야 하기 때문에 변수 선언을 제외한 전체 프로그램을 while(i)로 반복, 프로그램 종료 선택 시 i를 1에서 0으로 변경 (* switch문을 사용하기 때문에 break; 명령문을 사용하기 헷갈리는 점을 고려)
- 사용자가 선택한 옵션에 따라 출력하는 안내문, 입력받는 길이 값, 연산 방법이 다르기 때문에 이후 실행되는 코드는 switch문 안에서 해결
- 나머지 설명은 주석으로 대신합니다.
2) 소스 코드
#include <stdio.h>
#define pi 3.141592
int main()
{
int i = 1, n = 0;
int plane = 0;
float hor = 0, ver = 0, rad = 0;
// 프로그램 종료 입력 전까지 프로그램 반복 실행
while (i)
{
printf("삼각형[1] 정사각형[2] 사각형[3] 원[4] 프로그램 종료[5]\n");
printf("면적을 구할 도형의 번호를 선택하세요. >> ");
scanf_s("%d", &plane);
// 사용자의 입력값을 받아 switch 조건문으로 실행
switch (plane)
{
case 1:
// 유효한 입력이 들어올 때까지 입력 반복
while (1)
{
printf("삼각형의 면적을 구합니다. 가로와 높이를 실수로 입력하세요. >> ");
// 길이 값을 입력 받아 유효 개수를 검사
n = scanf_s("%f %f", &hor, &ver);
if (n != 2) {
//유효 개수가 기대값과 다르면 입력 버퍼를 비우고 입력 오류 메세지, 입력을 다시 받음
while (getchar() != '\n');
printf("?? 길이 입력 오류\n");
}
// 유효 개수가 기대값과 같으면 입력 반복을 중지, 결과를 출력
else break;
}
printf("[ 결과 ] 가로 : %.2f, 높이 : %.2f, 삼각형 면적 : %.2f\n\n", hor, ver, hor * ver / 2);
break;
case 2:
while (1)
{
printf("정사각형의 면적을 구합니다. 한 변 길이를 실수로 입력하세요. >> ");
n = scanf_s("%f", &hor);
if (n != 1) {
while (getchar() != '\n');
printf("?? 길이 입력 오류\n");
}
else break;
}
ver = hor;
printf("[ 결과 ] 한 변 길이: %.2f, 정사각형 면적 : %.2f\n\n", hor, hor * ver);
break;
case 3:
while (1)
{
printf("사각형의 면적을 구합니다. 가로와 높이를 실수로 입력하세요. >> ");
n = scanf_s("%f %f", &hor, &ver);
if (n != 2) {
while (getchar() != '\n');
printf("?? 길이 입력 오류\n");
}
else break;
}
printf("[ 결과 ] 가로 : %.2f, 높이 : %.2f, 삼각형 면적 : %.2f\n\n", hor, ver, hor * ver);
break;
case 4:
while (1)
{
printf("원의 면적을 구합니다. 반지름 길이를 실수로 입력하세요. >> ");
n = scanf_s("%f", &rad);
if (n != 1) {
while (getchar() != '\n');
printf("?? 길이 입력 오류\n");
}
else break;
}
printf("[ 결과 ] 반지름 : %.2f, 원 면적 : %.2f\n\n", rad, rad * rad * pi);
break;
case 5:
printf("**** 프로그램을 종료합니다 ****\n\n");
// 전체 프로그램 반복을 중지하기 위해 i값을 0으로 변경
i = 0;
break;
default:
// 도형을 잘못 선택하였을 경우 입력버퍼를 지우고 프로그램 반복
while (getchar() != '\n');
printf("?? 번호 선택이 잘못되었습니다.\n\n");
break;
}
}
return 0;
}
3) 입력/출력 결과
Program 2
다음을 참고로 표준 입력으로 받은 성별, 신장(키), 몸무게를 이용하여 비만도를 출력하는 프로그램을 작성하시오. 유효한 입력 값이 아니면 다시 입력받도록 처리해야 한다.
- 비만 지수 = (현재 체중/ 표준 체중) × 100(%)
- 남자 표준 체중: 신장(m) × 신장(m) × 22
- 여자 표준 체중: 신장(m) × 신장(m) × 21
- 비만도(100 기준) : 정상(±10% 까지), 체중 과다(10% 초과 ~ 20% 이하), 비만(20% 초과), 체중 미달(-10% 미만)
- 입력 : 성별, 신장(cm, 2m 이하), 몸무게(kg, 100kg 이하)
- 예외처리, 설명 주석, 문제 해결 방법에 대한 설명 필수
1) 문제 해결 방법에 대한 설명
- 프로그램 반복을 종료하지 않으므로 변수 선언 이후 코드는 while(1) 문으로 반복
- 성별을 입력받은 후 성별을 잘못 입력했을 경우 신장과 몸무게의 입력을 받지 않고 반복하도록 바로 switch문 실행
- 비만지수를 계산하여 100 값을 기준으로 범위를 계산, 숫자의 범위이기 때문에 간단하게 if, else if, else문을 활용
- 나머지 설명은 주석으로 대신합니다.
2) 소스 코드
#include <stdio.h>
int main()
{
int n = 0;
int sex = 0;
float height = 0, weight = 0;
float standard = 0, BMI = 0;
while (1)
{
printf("성별을 입력하세요. 1(여자) 2(남자): ");
scanf_s("%d", &sex);
switch (sex)
{
case 1:
while (1)
{
printf("신장(cm)과 몸무게(kg)를 입력하세요: ");
n = scanf_s("%f %f", &height, &weight);
// 입력이 잘못되었거나 음수값이 입력되었을 때
if (n != 2 || height <= 0 || weight <= 0) {
while (getchar() != '\n');
printf("신장 또는 몸무게를 잘못 입력하였습니다.\n");
}
// 문제가 없으면 입력 반복을 중지
else break;
}
// 여자 표준 체중 계산
standard = (height / 100) * (height / 100) * 21;
break;
case 2:
while (1)
{
printf("신장(cm)과 몸무게(kg)를 입력하세요: ");
n = scanf_s("%f %f", &height, &weight);
if (n != 2 || height <= 0 || weight <= 0) {
while (getchar() != '\n');
printf("신장 또는 몸무게를 잘못 입력하였습니다.\n");
}
else break;
}
// 남자 표준 체중 계산
standard = (height / 100) * (height / 100) * 22;
break;
default:
// 성별을 잘못 입력했을 경우 입력 버퍼를 비우고 프로그램 반복
while(getchar() != '\n');
printf("성별을 잘못 입력하였습니다.\n\n");
continue;
}
// 비만지수 계산
BMI = (weight / standard) * 100;
printf(" 현재 신장: %.2f, 체중: %.2f\n", height, weight);
printf(" 표준 체중: %.2f, 비만지수: %.2f\n", standard, BMI);
// 비만지수가 90퍼센트 미만일 시 체중 미달, 90~110 정상, 110 초과 ~120 체중과다, 120 초과 비만
if (BMI < 90) printf("비만도 판정 결과 : \"체중 미달\"입니다.\n\n");
else if (BMI <= 110) printf("비만도 판정 결과 : \"정상\"입니다.\n\n");
else if (BMI <= 120) printf("비만도 판정 결과 : \"체중 과다\"입니다.\n\n");
else printf("비만도 판정 결과 : \"비만\"입니다.\n\n");
}
return 0;
}
3) 입력/출력 결과
Program 3
임의의 양의 정수와 자릿수 정수(n)를 입력받아 n의 자릿수에서 반올림하는 프로그램을 작성하시오.
- 예로 12365와 1을 입력하면 12370을 출력하고, 12365와 2를 입력하면 12400을 출력한다.
- 12365 10 입력하면 다시 입력받도록 한다.
1) 문제 해결 방법에 대한 설명
- 사용자가 마지막 질문에 n이라고 대답 시 프로그램 실행 반복을 종료하여야 하므로 변수 선언 이외의 코드는 while(i) 안에서 실행
- 자릿수 비교와 반올림 연산을 위해 dec 변수를 계산, dec은 사용자가 입력한 자릿수가 반올림되는 자릿수의 실제값을 의미 (ex. 2 -> 100, 3 -> 1000), dec을 계산하기 위해 자릿수만큼 10을 곱해줌
- 자릿수 비교를 위해 dec/10 값보다 입력한 실수가 큰지 확인 (999 3 -> 1000으로 반올림 가능, 99 3 -> 99에는 세번째 자릿수 없음)
- 반올림 연산은 <math.h>의 버림 메소드를 이용해도 되지만, 직접 구현 입력 값의 (반올림이기 때문에) 반올림하는 자릿수에 5를 더하고, dec으로 나눠 버림(5를 더했기 때문에 실제로는 반올림) 후 자릿수를 맞추기 위해 dec 값으로 다시 곱해줌
- 나머지 설명은 주석으로 대신합니다.
2) 소스 코드
#include <stdio.h>
#include <math.h>
int main()
{
int i = 1;
int input = 0, digit = 0, dec = 1;
char ans;
while (i)
{
printf("임의의 양의 정수와 자릿수 정수를 입력하시오>> ");
scanf_s("%d %d", &input, &digit);
//매 반복마다 dec을 1로 초기화
dec = 1;
for (int j = 0; j < digit; j++)
{
dec *= 10;
}
//음수거나 자릿수를 잘못 입력하였을 경우 입력버퍼 지우고 다음 실행 생략
if (input < dec/10 || input <= 0) {
while (getchar() != '\n');
printf("음수이거나 자릿수 지정 오류입니다.\n\n");
continue;
}
// 반올림 출력
printf("%d 자리에서 반올림한 결과 >> %d\n", digit, ((input + (dec / 2)) / dec) * dec);
// n입력시 반복 종료
printf("계속 하시겠습니까(y/n)? ");
scanf_s(" %c", &ans);
if (ans == 'n') i = 0;
printf("\n");
}
return 0;
}
3) 입력/출력 결과
Program 4
표준 입력으로 받은 두 실수의 사칙 연산을 수행하는 프로그램을 작성하시오.
- switch 문을 사용하고, 연산 종류 선택은 문자(+, -, *, .)로 하시오.
1) 문제 해결 방법에 대한 설명
- 전체 프로그램을 반복하고, 실수 입력과 연산 종류 입력을 각각 반복하며 해당 두 반복은 break;로 종료
- 나머지 설명은 주석으로 대신합니다.
2) 소스 코드
#include <stdio.h>
int main()
{
int n;
float a, b;
char cal;
// 프로그램 반복
while (1)
{
// 실수 잘 입력할 때까지 반복
while (1)
{
printf("두 실수 입력 : ");
n = scanf_s("%f %f", &a, &b);
// 잘못 입력시 입력버퍼 비우고 반복
if (n != 2) {
while (getchar() != '\n');
printf("다시 ");
continue;
}
// 잘 입력 했을 경우 입력 반복 종료
break;
}
// 연산종류 잘 입력할 때까지 반복
while (1)
{
printf("연산종류 선택 : ");
scanf_s(" %c", &cal);
// switch문 안에서 연산
switch (cal) {
case '+':
printf("%.2f %c %.2f = %.2f", a, cal, b, a + b);
break;
case '-':
printf("%.2f %c %.2f = %.2f", a, cal, b, a - b);
break;
case '*':
printf("%.2f %c %.2f = %.2f", a, cal, b, a * b);
break;
case '/':
printf("%.2f %c %.2f = %.2f", a, cal, b, a / b);
break;
// 연산자 잘못 입력 시 입력 반복
default:
printf("연산자를 잘못 선택했습니다.\n");
continue;
}
// 입력 잘 되었을 때 연산 후 입력 반복 종료
printf("\n\n");
break;
}
}
return 0;
}
3) 입력/출력 결과
728x90
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 함수 1 (Lab 05) (0) | 2020.11.21 |
---|---|
[C 프로그래밍 실습] 배열 (Lab 04) (0) | 2020.11.05 |
[C 프로그래밍 실습] 반복 / 포인터 기초 (Lab 03) (0) | 2020.10.27 |
[C 프로그래밍 실습] 연산자 / 조건문 (Lab 02) (0) | 2020.10.14 |
[C 프로그래밍 실습] 자료형과 변수 / 전처리와 입출력 (Lab 01) (0) | 2020.10.13 |
댓글