13. score에 저장된 점수가 70이하면 '하', 71~90이면 '중', 91이상이면 '상'으로 출력하려고 한다. 다음 왼쪽 if문은 결과가 정상적이지만, 오른쪽 if문은 score가 60일 때 '하중상'으로 잘못 출력된다. 이유를 적으시오.
//올바른 if문
if (score <= 70)
printf("하");
else if (score <= 90)
printf("중");
else
printf("상")
//잘못된 if문
if (score <= 70)
printf("하");
if (score <= 90)
printf("중");
if (score <= 100)
printf("상")
잘못된 if문은 score가 60 이하일 때 모든 if문이 실행된다. 따라서 하중상이 모두 출력된다. 올바른 if문은 else문으로 이전 조건을 배제하므로 원하는 결과가 출력된다.
14. 입력 단위(cm, inch)와 값을 입력받은 후, 입력 단위가 cm이면 inch로, inch면 cm로 변환하는 프로그램을 조건문을 이용해 작성하시오. 단, 입력 단위가 cm이면 문자 'c'나 'C'를, inch이면 'i'나 'I'를 입력한다. 1inch는 2.54cm에 해당하며 출력 값은 소수 두자리로 나타낸다.
#include <stdio.h>
int main(void)
{
double value;
char unit;
printf("입력 단위가 cm이면 문자 'c'나 'C'를, inch이면 'i'나 'I'를 입력하세요.\n");
printf("입력 단위: ");
scanf_s("%c", &unit, sizeof(unit));
printf("입력 값:");
scanf_s("%lf", &value);
if (unit == 'I' || unit == 'i')
printf("입력한 %.2lfinch는 %.2lfcm입니다.\n", value, value * 2.54);
else if (unit == 'C' || unit == 'c')
printf("입력한 %.2lfcm는 %.2lfinch입니다.\n", value, value / 2.54);
else
printf("잘못된 단위입니다.");
return 0;
}
입력 단위를 char형 변수 unit에, 입력 값을 double형 변수 value에 받는다. unit이 'I' 또는 'i'이면 inch를 cm로 변환하고, 'c' 또는 'C'이면 cm를 inch로 변환한다. 아니면 잘못된 단위를 입력했다고 출력한다.
15.어떤 수를 입력받고 입력받은 수보다 작은 소수를 전부 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main(void)
{
int max; //최대 숫자
int n = 2, judge = 1; //judge는 True, False를 판단함
printf("최대 몇까지의 소수를 출력? ");
scanf_s("%d", &max);
while (n < max)
{
for (int i = 2; i < n; i++)
{
if (n % i == 0)
{
judge = 0;
break;
}
else judge = 1;
}
if (judge == 1) printf("%d ", n);
n++;
}
return 0;
}
11번과 같은 소수 판단 코드를 사용했다. while문에서는 소수인지 판단할 수를 증가시킨다. for문에서는 그 수가 소수인지를 판단한다.
처음에 n은 2로 초기화 했다. for문을 통해 소수인지 판단한다. 2가 소수이니 judge는 1이고, 따라서 n을 출력한다(21행).
2는 판별이 끝났으므로 다음 수를 판별해야 한다. 22행에서 n을 1 증가시켜 3이 소수인지 판단한다. 즉, 내부 for문에서 소수 판단이 끝나면 외부 while문에서 출력하고 다음 수로 넘기는 과정을 거친다.
16. 1~n의 합 중 1000을 넘지 않는 가장 큰 합과 그때의 n을 구하는 프로그램을 작성하시오.
#include <stdio.h>
int main(void)
{
int i = 1, sum = 0;
while (1)
{
sum += i;
if (sum >= 1000) break;
i++;
}
sum -= i;
i--;
printf("1부터 %d까지의 합이 %d입니다.", i, sum);
return 0;
}
i = 1, sum = 0으로 초기화한다. while문 안에서 sum에 i를 누적해서 더하고 i를 증가시킨다. sum을 구하고 1000보다 크면 break로 반복문을 빠져나온다.
우리가 원하는 값은 1000을 넘지 않는 가장 큰 합이다. 이 값이 990이다. 이 때의 i 값은 44이다.
9행에서 990은 1000 보다 작으므로 break문은 실행되지 않는다. 그래서 10행이 실행되고 i값은 45가 된다. 이 i가 990에 더해져서 sum은 1035가 되고 반복문이 종료된다.
그래서 sum과 i는 우리가 원하는 값보다 한 단계 더 나아간 값이 저장되어 있다. 올바르게 출력하려면 반복문을 빠져나온 뒤 한 단계를 다시 돌려야 한다. 그래서 12행에서 sum에다 i를 빼고, 13행에서 i를 감소시켰다.
17. 다음 수식을 계산하는 프로그램을 작성하시오. (for문 이용)
#include <stdio.h>
int main(void)
{
int i, n, sum = 0;
printf("제곱의 합을 구할 n을 입력:");
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
sum += i * i;
printf("1부터 %d까지 제곱의 합은 %d입니다.", n, sum);
return 0;
}
이걸 굳이 for문을 이용해야 하나 싶긴 하다. 반복문 안에서 sum에 i의 제곱을 누적하기만 하면 되는 간단한 문제다.
18. 구구단(2단~9단)을 출력하는 프로그램을 작성하시오, 이때 단 사이는 한 행씩 띄우며 출력하도록 한다.
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 2; i <= 9; i++)
{
for (j = 1; j <= 9; j++)
printf("%d * %d = %2d\n", i, j, i * j);
printf("\n");
}
return 0;
}
일반적인 구구단 출력과 동일하다. 단 사이를 한 행씩 띄우려면 내부 반복문이 끝난 후 개행문자를 출력하면 된다.
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (24,25,26) (0) | 2020.07.26 |
---|---|
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (19,20,21,22,23) (0) | 2020.07.26 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (8,9,10,11,12) (0) | 2020.07.24 |
소수점 이하 자리에 나오는 0을 없애고 싶을 때 (0) | 2020.05.25 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 5~7 (0) | 2018.03.17 |