본문 바로가기
컴퓨터/코딩

(제3판)C언어 콘서트 CHAPTER 6. Programming 문제 개인풀이

by 혼란한물범 2022. 7. 31.
반응형

개정3판 6장 프로그래밍 문제

개인풀이이기 때문에 출제자가 의도한 정답과 다를 수 있다.

 

 

Visual Studio로 실행해보고 싶은 사람들은 아래 링크에서 해당 문제를 찾아 복사 - 붙여넣기 하자 (다운받지 않아도 된다)

https://mega.nz/file/YG8mhC5b#NZpOvLHXf7GqWfI6IgUmBtI49Rfh0D7mmerbSD7E11A

 

 

1. 간단한 카운트 다운 프로그램을 작성하여 보자. 60초부터 0초까지 숫자를 출력하고 0초가 되면 "발사"를 출력한다.
#include <stdio.h>

int main(void)
{
for (int i = 60; i >= 0; i--) {
printf("%d ", i);
}
printf("발사");

return 0;
}

 

 

2. 사용자로부터 반복 횟수를 받아서 그 수만큼 "안녕하세요"를 출력하는 프로그램을 작성해보자.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int i;

printf("몇 번이나 반복할까요?: ");
scanf("%d", &i);

while (i > 0) {
printf("안녕하세요?\n");
i--;
}

return 0;
}

 

 

3. 다음과 같은 출력을 생성하는 프로그램을 작성하여 보자.

#include <stdio.h>

int main(void)
{
int j;

for (int i = 1; i < 8; i++) {
for (j = 1; j <= i; j++)
printf("%d", j);
for (int k = 8; k > j; k--)
printf("*");
printf("\n");
}

return 0;
}

 

 

4. 사용자로부터 정수를 입력받아서 계속 더하는 프로그램을 작성해보자. 사용자가 0을 입력하면 지금까지 입력된 모든 정수의 합계를 출력하고 종료한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int x, sum;

sum = 0;
do {
printf("정수를 입력하시오: ");
scanf("%d", &x);
sum += x;
} while (x != 0);

printf("합계=%d", sum);

return 0;
}

 

 

5. 1부터 100까지의 자연수 중에서 3의 배수를 출력하여 보자.

#include <stdio.h>

int main(void)
{
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0)
printf("%d ", i);
}

return 0;
}

 

 

6. 1부터 100까지의 자연수 중에서 3의 배수이면서 동시에 5의 배수인 숫자를 출력하여보자.

#include <stdio.h>

int main(void)
{
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0)
printf("%d ", i);
}

return 0;
}

 

 

7. 사용자로부터 정수 x, y를 입력받아서 x에서 y까지의 합을 구하는 프로그램을 작성하라.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int x, y, sum;

printf("시작정수: ");
scanf("%d", &x);
printf("종료정수: ");
scanf("%d", &y);
sum = 0;

for (int i = x; i <= y; i++)
sum += i;

printf("%d에서 %d까지의 합 = %d", x, y, sum);

return 0;
}

 

 

8. 아스키 코드 표를 출력하는 프로그램을 작성해보자.

#include <stdio.h>

int main(void)
{
for (int i = 0; i < 128; i++)
printf("%d:       %c\n", i, i);

return 0;
}

 

 

9. 반복적으로 사용자에게서 문자를 받아서 'a'가 나오면 카운터를 하나씩 증가한다. 사용자가 '.'를 입력하면 반복을 종료하고 입력한 'a'의 총 개수를 출력한다. 문자를 입력받을 때는 getchar() 함수를 사용한다.

#include <stdio.h>

int main(void)
{
char ch;
int count;

count = 0;
do {
printf("문자를 입력하시오: (종료 .)");
ch = getchar();
getchar();

if (ch == 'a')
count++;
} while (ch != '.');

printf("a의 개수 = %d", count);

return 0;
}

 

 

10. 반복문을 이용하여 화씨 온도 0도부터 100까지의 구간에 대하여 10도 간격으로 섭씨 온도로 환산하는 표를 작성하라.

#include <stdio.h>

int main(void)
{
int f, c;

printf("=======================\n");
printf("화씨온도       섭씨온도\n");
printf("=======================\n");

for (f = 0; f <= 100; f++) {
c = (f - 32) * 5 / 9;
printf("%d        %d\n", f, c);
f += 9;
}

return 0;
}

 

 

11. 중첩 반복문을 사용하여서 다음과 같이 출력하는 프로그램을 작성하여 보자.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int x;

printf("정수를 입력하시오: ");
scanf("%d", &x);

for (int i = 1; i <= x; i++) {
for (int j = 1; j <= i; j++)
printf("%d ", j);
printf("\n");
}

return 0;
}

 

 

12. 컴퓨터는 막대 그래프를 그리는 데도 사용된다. 사용자로부터 1부터 50사이의 숫자 10개를 입력받아서 숫자만큼의 별표를 출력하는 프로그램을 작성하라. 막대는 세로로 그려지게 된다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int data;

for (int i = 0; i < 10; i++) {
printf("데이터를 입력하시오: ");
scanf("%d", &data);

if (data < 1 || data > 50) {
printf("1부터 50사이의 숫자를 입력하세요.");
break;
}

for (int j = 1; j <= data; j++)
printf("*");
printf("\n");
}

return 0;
}

 

 

13. 피보나치 수열을 계산하는 프로그램을 작성해보자. 피보나치 수열은 0과 1부터 시작하며 앞의 두 수를 더하여 뒤 수를 만든다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int fib1, fib2, fib, number;

printf("몇 번째 항까지 구할까요? ");
scanf("%d", &number);
fib1 = 0;
fib2 = 1;
printf("%d, %d, ", fib1, fib2);

for (int i = 2; i <= number; i++) {
fib = fib1 + fib2;
printf("%d, ", fib);
fib1 = fib2;
fib2 = fib;
}

return 0;
}

 

 

14. 1²+ 2²+3²+…+n²의 값을 계산하여 출력하여 보자.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int n, result;

printf("n의 값을 입력하시오: ");
scanf("%d", &n);
result = 0;

for (int i = 1; i <= n; i++)
result += (i * i);

printf("계산값은 %d입니다.", result);

return 0;
}

 

 

15. 자동차의 연료탱크 프로그램을 시뮬레이션하여 보자. 초기값이 1000리터이고 사용자가 주행을 하면 연료가 줄어든다. 반복문을 사용하여서 사용자로부터 충전 또는 사용한 연료를 입력받아서 연로 탱크에 남아 있는 연료가 10% 미만이면 경고를 출력한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define int_OIL 1000

int main(void)
{
double oil, liter;
char ch;

printf("초기연료량: 200\n");
oil = 200;

while (1) {
printf("연료 충전은 +, 소모는 -로 입력해주세요: ");
scanf("%c%lf", &ch, &liter);
getchar();

if (ch == '+') {
oil += liter;
printf("현재 남아있는 양은 %lf입니다.\n", oil);
if (oil <= int_OIL * 0.1)
printf("\n(경고) 연료가 10%% 이하입니다.\n");
}
else if (ch == '-') {
oil -= liter;
printf("현재 남아있는 양은 %lf입니다.\n", oil);
if (oil <= int_OIL * 0.1 && oil <= 0) {
printf("\n(경고) 연료가 10%% 이하입니다.\n");
break;
}
else if (oil <= int_OIL * 0.1)
printf("\n(경고) 연료가 10%% 이하입니다.\n");
}
}

return 0;
}

 

 

16. 사용자가 입력한 수가 소수인지 아닌지를 출력하는 프로그램을 작성하라. 소수는 1과 자기 자신 이외에는 약수를 가지지 않아야 한다. 약수는 % 연산자를 이용하여서 검사할 수 있다. 즉 i가 5의 약수라면 i%5가 0이 된다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int x;

printf("정수를 입력하시오: ");
scanf("%d", &x);

for (int i = 2; i < x; i++) {
if (x % i == 0) {
printf("%d은 소수가 아닙니다.", x);
return 0;
}
}

printf("%d은 소수입니다.", x);

return 0;
}

 

 

17. 피타고라스의 정리는 직각 삼각형에서 직각을 낀 두 변의 길이를 a, b라고 하고, 빗변의 길이를 c라고 하면 a²+b²=c²의 수식이 성립한다는 것이다. 각 변의 길이가 100보다 작은 삼각형 중에서 피타고라스의 정리가 성립하는 직각 삼각형은 몇 개나 있을까? 3중 반복문을 이용하여 피타고라스의 정리를 만족하는 3개의 정수를 찾도록 한다.

#include <stdio.h>

int main(void)
{
int a, b, c;

for (a = 2; a < 100; a++) {
for (b = 2; b < 100; b++) {
for (c = 2; c < 100; c++) {
if ((a * a) + (b * b) == (c * c))
printf("%d %d %d\n", a, b, c);
}
 }
}

return 0;
}

 

 

18. 라스베가스에서 50달러를 가지고 도박을 하는 사람이 있다. 한 번의 도박에 1달러를 건다고 가정하자. 돈을 따거나 잃을 확률은 0.5로 동일하다고 가정하자. 도박사는 가진 돈을 다 잃거나 목표 금액인 250달러에 도달하면 도박을 중지한다. 도박사가 목표 금액에 도달하는 확률이 얼마나 되는지를 계산해보자.

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

int main(void)
{
int bets, win, cash;
double rate;

printf("초기 금액 $50\n");
printf("목표 금액 $250\n");
bets = 0;
win = 0;
cash = 50;

while (1) {
bets++;
if ((double)rand() / RAND_MAX < 0.5) {
cash++;
win++;
}
else
cash--;

if (cash == 0 || cash == 250)
break;


rate = ((double)win / (double)bets) * 100;
printf("%d 중의 %d번 승리\n", bets, win);
printf("이긴 확률=%lf", rate);

return 0;
}

 

 

19. 파이(π)는 원에서 원주와 반지름의 비율을 나타내는 상수이다. 파이를 계산하는 것은 무척 시간이 많이 걸리는 작업으로 주로 슈퍼 컴퓨터의 성능을 시험하는 용도로 사용된다. 지금은 컴퓨터의 도움으로 10조개의 자리수까지 계산할 수 있다. 파이를 계산하는 가장 고전적인 방법은 Gregory-Leibniz 무한 수열을 이용하는 것이다. 위의 수열은 간단하기 하지만 수렴은 상당히 늦다고 알려져 있다. 약 70자리까지는 계산할 수 있다. 사용자가 입력한 반복 횟수까지 위의 무한 수열을 계산하는 프로그램을 작성하여 보라.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
int sign, number;
double Pi;

printf("반복횟수:");
scanf("%d", &number);
sign = 1;
Pi = 0;

for (double i = 1; i <= number; i++) {
if (sign > 0)
Pi += 4 / i;
else
Pi -= 4 / i;
sign *= -1;
i++;
}

printf("Pi = %.6lf", Pi);

return 0;
}

 
반응형

댓글