c언어 연습문제 #5 (국비7일차)

 

오늘은 강의없이 문제풀이만 하는 날이다.

 

문제 1

 임의의 양의 정수(n)를 입력받아 1~100 사이에서 n의 배수의 개수를 출력하는 프로그램을 작성하세요.

실행결과

입력(양의 정수) : 7
7의 배수 : 7 14 21 28 35 42 49 56 63 70 77 84 91 98
7의 배수 개수 : 14
계속하려면 아무 키나 누르십시오...

 

A:

#include <stdio.h>

void main()
{
int num;
int total =0;

printf("입력(양의 정수) : ");
scanf_s("%d", &num);

printf("%d의 배수 : ",num);
for (int i=1 ; i<= 100; i++)
{
if(i % num ==0)

printf("%d ", i);
total = total + i / i;
}


}
printf("\n%d의 배수 개수 : %d",num, total);
}

 

문제 2

 반복문을 이용해서 다음과 같은 결과를 출력하는 프로그램을 작성하세요.

실행 결과
*
* *
* * *
* * * *
* * * * *
계속하려면 아무 키나 누르십시오...

 

A:

#include <stdio.h>

void main()
{
char star = '*';
for (int i = 0; i < 5; i++)
{
for(int j=0;j<i+1;j++)
{
printf("%c ", star);
}

printf("\n");
}
}

 

 

문제 3

 반복문을 이용해서 다음과 같은 결과를 출력하는 프로그램을 작성하세요.

실행 결과
*******
 *****
  ***
   *
계속하려면 아무 키나 누르십시오...

 

A:

별을 줄이 바뀌면서 2개씩 줄어드는 것과 앞에 공백이 하나씩 증가하는 것을 생각하느라 시간을 꽤 소비한 문제였다. 지금으로는 더 간단하게 풀 수 있는 방법을 모르겠다..

 

#include <stdio.h>

void main()
{
char star = '*';
char space = ' ';

for (int i = 0; i < 4; i++)
{
for (int k = 0; k < i; k++)
{
printf("%c", space);
}

for(int j=7; j-2*i>0 ; j--)
{
printf("%c", star);
}


printf("\n");
}
}

 

 

문제 4

반복문을 이용해서 키도브로부터 입력받은 값을 구구단으로 출력해 주는 프로그램을 작성하세요

실행 결과
숫자를 입력하세요 : 5
5 * 0 = 0입니다.
5 * 1 = 5입니다.
...(중략)
5 * 9 = 45입니다.
계속하려면 아무 키나 누르십시오...

 

A: 

비교적 간단한 문제였다.

#include <stdio.h>

void main()
{
int dan;

printf("숫자를 입력하세요 : ");
scanf_s("%d", &dan);

for (int i = 0; i < 10; i++)
{
printf("%d * %d = %d입니다.\n", dan, i, dan * i);
}
}

 

문제 5

 팩토리얼 연산 결과를 출력하는 프로그램을 작성하세요. 팩토리얼 연사을 위한 공식은 다음과 같습니다.
n! = n * (n-1) * ...* 3 * 2 * 1

실행 결과
팩토리얼 연산을 원하는 숫자를 입력하세요 : 5
5의 팩토리얼 연산 결과는 120입니다.
계속하려면 아무 키나 누르십시오..

 A:

#include <stdio.h>

void main()
{
int num;
int factorial = 1;

printf("팩토리얼 연산을 원하는 숫자를 입력하세요 : ");
scanf_s("%d", &num);

for (int i = 0; i < num; i++)
{
factorial = factorial * (num - i);
}
printf("%d의 팩토리얼 연산 결과는 %d입니다.", num, factorial);
}

 

문제 6

 간단한 덧셈 계산기를 작성합니다. 하지만 계산 결과를 출력한 후 종료되지 않고 다음 계산을 위해 입력을 받을 준비를 합니다.

실행 결과
첫 번재 수를 입력해 주세요 : 3
두 번째 수를 입력해 주세요 : 10
3 + 10 = 13입니다.
첫 번째 수를 입력해 주세요 : 

 

A:

do while 문을 사용하면 비교적 쉽게 풀 수 있는 문제이다.

 

#include <stdio.h>

void main()
{
int num1, num2;

do
{
printf("첫 번째 수를 입력해 주세요: ");
scanf_s("%d", &num1);
printf("두 번째 수를 입력해 주세요: ");
scanf_s("%d", &num2);
printf("%d + %d = %d입니다.\n", num1, num2, num1 + num2);
} while (1);
}

 

문제 7

 시험 점수의 평균을 산출하려고 합니다. 과목은 총 10과목입니다. 각 과목의 점수를 차례로 입력받고 평균을 보여주는 프로그램을 작성해  보세요.

실행 결과

열 과목의 점수의 평균을 계산합니다.
점수를 입력해 주세요 : 80
점수를 입력해 주세요 : 93
점수를 입력해 주세요 : 100
점수를 입력해 주세요 : 83
점수를 입력해 주세요 : 72
점수를 입력해 주세요 : 69
점수를 입력해 주세요 : 53
점수를 입력해 주세요 : 88
점수를 입력해 주세요 : 73
점수를 입력해 주세요 : 77
열 과목 점수의 평균은 78.8점입니다.
계속하려면 아무 키나 누르십시오...

 

A:

#include <stdio.h>

void main()
{
int score;
double total = 0;

printf("열 과목의 점수의 평균을 계산합니다.\n");
for (int i = 0; i < 10; i++)
{
printf("점수를 입력해 주세요 : ");
scanf_s("%d", &score);

total = total + score;
}
printf("열 과목 점수의 평균은 %.1lf점입니다.", total / 10);
}

문제 8

 키보드로부터 정수를 계속 입력받아 덧셈 연산을 수행합니다. 만약 0이 입력되면 지금까지 입력한 정수의 덧셈 결과와 총 몇 번을 입력했는지를 출력하는 프로그램을 작성하세요.

 

A:

#include <stdio.h>

void main()
{
int num=0;
int total = 0;
int count = 0;

printf("정수를 입력하면 덧셈 연산하는 프로그램. 0을 입력하면 덧셈 결과와 총 몇 번 입력했는지 출력\n\n");

do
{
printf("정수 입력 :");
scanf_s("%d", &num);

total = total + num;
count++;

} while (num != 0);

printf("덧셈 결과 : %d \n", total);
printf("정수 입력 횟수 : %d \n", count-1);
}

문제 9

프로그램 사용자로부터 양의 정수를 하나 입력 받아서, 그 수만큼 "Hello World!"를 출력하는 프로그램을 작성해보자.

A:

#include <stdio.h>

void main()
{
int num;
printf("정수를 입력하면 입력한 횟수만큼 hello world 출력\n");
printf("횟수 입력 : ");
scanf_s("%d", &num);

for (int i = 0; i < num; i++)
{
printf("Hello World!\n");
}
}

 

문제 10

프로그램 사용자로부터 양의 정수를 하나 입력 받은 다음, 그 수만큼 3의 배수를 출력하는 프로그램을 작성해 보자. 예를 들어 5를 입력받았다면, 3 6 9 12 15를 출력해야하고 3을 입력받았다면, 3 6 9 를 출력해야 한다.

A:

#include <stdio.h>

void main()
{
int num;
printf("입력한 정수만큼 3의 배수를 출력");
printf("정수 입력 : ");
scanf_s("%d", &num);

for (int i = 1; i <= 3*num +1; i++)
{
if (i % 3 != 0) continue;

printf("%d ", i);
}
}

 

문제 11

프로그램 사용자로부터 입력 받은 숫자에 해당하는 구구단을 출력하되, 역순으로 출력하는 프로그램을 작성해 보자.

A:

#include <stdio.h>

void main()
{
int num;

printf("정수를 입력하면 역순으로 구구단을 출력하는 프로그램\n\n");

printf("단수를 입력하세요. : ");
scanf_s("%d", &num);

for (int i = 9; i > 0; i--)
{
printf("%d * %d = %d\n", num, i, num * i);
}
}

 

문제 12

1이상 100미만의 정수 중에서 7의 배수와 9의 배수를 출력하는 프로그램을 작성해 보자.
단! 7의 배수이면서 동시에 9의 배수인 정수는 한번만 출력해야 한다.

A:

#include <stdio.h>

void main()
{
for (int i = 1; i < 100; i++)
{
if (i % 7 != 0 && i % 9 != 0) continue;

printf("%d ", i);
}
}

 

문제 13

 두 개의 정수를 입력 받아서 두 수의 차를 출력하는 프로그램을 구현해 보자. 단, 무조건 큰 수에서 작은 수를 뺀 결과를 출력해야 한다. 예를 들어서 입력된 두 수가 순서에 상관없이 12와 5라면 7이 출력되어야 하고, 입력된 두 수가 순서에 상관없이 4와 16이라면 12가 출력되어야 한다. 즉, 출력 결과는 무조건 0 이상이 되어야 한다.

A:

#include <stdio.h>

void main()
{
printf("입력 받은 두수의 차이를 구하는 프로그램\n\n");

int num;
int minus = 0;

for (int i = 0; i < 2; i++)
{
printf("정수 입력 : ");
scanf_s("%d", &num);

minus = num - minus;
}

if (minus <= 0)
{
printf("결과 값: %d", -minus);
}
else
{
printf("결과 값: %d", minus);
}
}

 

문제 14

 위의 문제를 if와 else말고 삼항 연산자로 해보자.

A:

#include <stdio.h>

void main()
{

printf("입력 받은 두수의 차이를 구하는 프로그램\n\n");

int num;
int minus = 0;
int i = 0;

while (i < 2)
{
printf("정수 입력 : ");
scanf_s("%d", &num);

minus = num - minus;
i++;
}

int result;

result = (minus < 0) ? -minus : minus;
printf("결과 값: %d", result);

}

 

문제 15

구구단을 출력하되 짝수 단(2단, 4단, 6단, 8단)만 출력되도록 한다. 또한 2단은 2*2까지, 4단은 4*4까지, 6단은 6*6까지, 8단은 8*8까지만 출력되도록 해보자. 이를 해결하기 위해 break와 continue문을 사용해보자.

A:

#include <stdio.h>

void main()
{
for (int i = 2; i < 10; i++)
{
if (i % 2 == 1) continue;
for (int j = 1; j <10; j++)
{
if(j == i +1 ) break;
printf("%d * %d = %d\n", i, j, i * j);
}
printf("\n");

}
}

 

break와 continue를 안쓰면 더 간단하게 코딩이 가능하다.

#include <stdio.h>

void main()
{
for (int i = 2; i < 10; i+=2)
{
for (int j = 1; j <= i; j++)
{

printf("%d * %d = %d\n", i, j, i * j);
}
printf("\n");

}
}

 

문제 16

 프로그램 사용자로부터 입력 받은 정수의 평균을 출력하는 프로그램을 작성하되 다음 두 가지 조건을 만족시켜야 한다.
  - 먼저 몇 개의 정수를 입력할 것인지 프로그램 사용자에게 묻는다. 그리고 그 수 만큼 정수를 입력 받는다.
  - 평균값은 소수점 이하까지 출력되도록 한다.

A:

#include <stdio.h>

void main()
{
int num1,num2;
double total = 0;
printf("입력한 정수들의 평균을 출력\n\n");
printf("몇개의 정수를 입력하시겠습니까? :");
scanf_s("%d", &num1);

for (int i = 0; i < num1; i++)
{
printf("정수 입력 : ");
scanf_s("%d", &num2);

total += num2;
}

printf("평균 : %lf\n", total / num1);
}

 

문제 17

프로그램 사용자로부터 총 5개의 정수를 입력 받아서, 그 수의 합을 출력하는 프로그램을 작성해보자. 단, 한가지 조건이 있다. 정수는 반드시 1 이상이어야 한다. 만약에 1 미만의 수가 입력되는 경우에는, 이를 입력으로 인정하지 않고 재 입력을 요구해야 한다. 그래서 결국 1 이상의 정수 5개를 모두 입력 받을 수 있는 프로그램을 완성해야 한다.

A:

#include <stdio.h>

void main()
{
int num;
int total = 0;
int i = 0;
do
{

printf("정수 입력 : ");
scanf_s("%d", &num);


if (num < 1)
{
printf("1이상의 정수를 입력해주세요.\n");
continue;
}
else

total += num;
i++;
}

} while (i < 5);
printf("합 : %d", total);

}

 

for 문으로 풀기

#include <stdio.h>

void main()
{

int num;
int total = 0;
int i = 0;
for(;i<5;)
{

printf("정수 입력 : ");
scanf_s("%d", &num);


if (num < 1)
{
printf("1이상의 정수를 입력해주세요.\n");
continue;
}
else

total += num;
i++;
}

} while (i < 5);
printf("합 : %d", total);

}

 

문제 18

아래의 출력을 보이는 프로그램을 작성해보자.
 *
 o *
 o o *
 o o o *
 o o o o *

 참고로, 총 5행에 걸쳐서 출력이 이루어지고, 행이 더해질 때마다 'o'문자가 증가한다는 특징을 기반으로 while문의 중첩을 구성하면 된다.

A :

#include <stdio.h>

void main()
{
int i = 0;

while (i < 5)
{
int j = 0;
while (j < i)
{

printf("ㅇ");
j++;
}

printf("*");


i++;
printf("\n");
}
}