안녕하세요. 언제나휴일의 언휴예요.
제어문은 문법이 어려운 것은 아니죠.
하지만 막상 문제를 표현하려고 할 때 어떠한 제어문을 어떻게 전개해야 할 지 막막합니다.
이는 문법보다는 문제 해결 능력에 관한 것이죠.
문제를 해결하기 위해 알고리즘, 자료구조를 비롯한 다양한 경험을 요구합니다.
이번에는 다양한 제어문을 연습할 수 있는 다양한 문제를 제시할게요.
여러분께서 먼저 해결해 본 후에 코드를 비교해 보길 권할게요.
여기에서는 별도의 설명은 생략합니다.
두 수를 입력받은 후 작은 수~큰 수 사이의 모든 수의 합을 구하는 프로그램을 작성하시오.
#include <stdio.h>
int main(void)
{
int a, b;
int sum;
printf("두 개의 정수 입력:");
scanf_s("%d%d", &a, &b);
if (a > b)//a가 b보다 크면
{
//두 수를 교환
int temp = a;
a = b;
b = temp;
}
printf("%d ~ %d =", a, b);
for (sum = 0; a <= b; a++)
{
sum += a;
}
printf("%d\n", sum);
return 0;
}
1부터 100 사이에 있는 모든 6의 배수를 출력하는 프로그램을 작성하시오.
//1부터 100 사이에 있는 모든 6의 배수를 출력하는 프로그램
#include <stdio.h>
int main(void)
{
int n;
for (n = 1; n <= 100; n++)
{
if (n % 6 == 0)//6으로 나누어서 나머지가 없으면
{
printf("%d ", n);
}
}
printf("\n");
return 0;
}
한 자리의 정수를 입력 받은 후에 입력 받은 수의 단을 출력하는 프로그램을 작성하시오.
//예:
//한 자리의 정수를 입력하시오.
//7
//7 * 1 = 7 7 * 2 = 14 7 * 3 = 21
//7 * 4 = 28 7 * 5 = 35 7 * 6 = 42
//7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
#include <stdio.h>
int main(void)
{
int n;
int i;
printf("한 자리의 정수를 입력하세요.\n");
scanf_s("%d", &n);
if ((n <= 0) || (n> = 10))
{
printf("잘못 입력하였습니다.");
}
else
{
for (i = 1; i <= 9; i++)
{
printf("%d*%d= %2d ", n, i, n*i);
if (i % 3 == 0)
{
putchar('\n');
}
}
}
return 0;
}
두 개의 양의 정수를 입력받아 공약수의 합을 계산하는 프로그램을작성하시오.
//두 개의 정수를 입력받아 공약수의 합을 계산
#include <stdio.h>
int main(void)
{
int a, b;
int n;
int sum=0;
printf("두 개의 정수 입력:");
scanf_s("%d%d", &a, &b);
if (a > b)//a가 b보다 크면
{
//두 수를 교환
int temp = a;
a = b;
b = temp;
}
printf("%d와 %d의 공약수:",a,b);
for (n = 1; n <= a; n++)
{
if ((a%n == 0) && (b%n == 0))//n이 a와 b의 약수일 때
{
sum += n;
printf("%d ", n);
}
}
printf("\n%d와 %d의 공약수의 합:%d\n",a,b, sum);
return 0;
}
두 개의 양의 정수를 입력받아 공배수를 작은 순서부터 차례대로 10개를 출력하는 프로그램을 작성하시오.
//두 개의 정수를 입력받아 공약수 10개를 차례대로 출력
#include <stdio.h>
int main(void)
{
int a, b;
int n;
int count = 0;
printf("두 개의 정수 입력:");
scanf_s("%d%d", &a, &b);
if (a > b)//a가 b보다 크면
{
//두 수를 교환
int temp = a;
a = b;
b = a;
}
printf("%d와 %d의 공약수를 차례대로 (최대)10개 출력\n", a, b);
for (n = 1; (n <= a)&&(count<10); n++)
{
if ((a%n == 0) && (b%n == 0))//n이 a와 b의 약수일 때
{
count++;
printf("%d ", n);
}
}
printf("\n");
return 0;
}
‘a’문자에서 ‘z’문자 사이의 모든 문자와 아스키 코드 값을 출력하는 프로그램을 작성하시오.
//소문자의 아스키 코드값을 출력
#include <stdio.h>
int main(void)
{
char ch;
for (ch = 'a'; ch <= 'z'; ch++)
{
printf("%c:%d\n", ch, ch);
}
return 0;
}
다음처럼 입력한 정수 높이의 삼각형을 출력하는 프로그램을 작성하시오.
//삼각형 출력
//입력
// 5 - n
//출력
// * 1- 공백 4, 별1, 개행
// *** 2- 공백 3, 별3, 개행
// ***** 3- 공백2, 별5, 개행
// ******* 4- 공백1, 별7, 개행
// ********* 5- 공백0, 별9, 개행
//공백 = n-line
//별 = 2*line -1
//개행=1
#include <stdio.h>
int main(void)
{
int n;
int line,space,star;
scanf_s("%d",&n);//입력
for(line=1;line<=n;line++)//n개 라인
{
for(space=1;space<=(n-line);space++)//공백 n-line개
{
putchar(' ');
}
for(star =1; star<=(2*line -1); star++)//별 2*line -1개
{
putchar('*');
}
putchar('\n');//개행
}
return 0;
}
다음처럼 입력한 정수의 높이에 맞게 다이아몬드를 출력하는 프로그램을 작성하시오.
// 다이아몬드 출력
// 입력
// 5 - n
//출력
// * 1- 공백 4, 별1, 개행
// *** 2- 공백 3, 별3, 개행
// ***** 3- 공백2, 별5, 개행
// ******* 4- 공백1, 별7, 개행
// ********* 5- 공백0, 별9, 개행
// ******* 4- 공백1, 별7, 개행
// ***** 3- 공백2, 별5, 개행
// *** 2- 공백 3, 별3, 개행
// * 1- 공백 4, 별1, 개행
//line:1~n
//공백 = n-line
//별 = 2*line -1
//개행=1
//line:n-1 ~ 1
//공백 = n-line
//별 = 2*line -1
//개행=1
#include <stdio.h>
int main(void)
{
int n;
int line,space,star;
scanf_s("%d",&n);//입력
for(line=1;line<=n;line++)//line: 1~n
{
for(space=1;space<=(n-line);space++)//공백 n-line개
{
putchar(' ');
}
for(star =1; star<=(2*line -1); star++)//별 2*line -1개
{
putchar('*');
}
putchar('\n');//개행
}
for(line=n-1; line>=1;line--)//line:n-1 ~ 1
{
for(space=1;space<=(n-line);space++)//공백 n-line개
{
putchar(' ');
}
for(star =1; star<=(2*line -1); star++)//별 2*line -1개
{
putchar('*');
}
putchar('\n');//개행
}
return 0;
}
다음처럼 입력한 정수의 높이에 맞게 산봉우리를 출력하는 프로그램을 작성하시오.
//산봉우리 출력
//입력
//5 - n
//출력
// * 1 공백(9+9),별1, 개행
// *** 2 공백(9+8), 별3, 개행
// ***** 3 공백(9+7),별5, 개행
// ******* 4 공백(9+6), 별7, 개행
// ********* 5 공백(9+5), 별9, 개행
// * *********** * 6 공백4, 별1, 공백4, 공백4, 별11, 공백4, 공백4, 별1, 개행
// *** ************* *** 7 공백3, 별3, 공백3, 공백3, 별13, 공백3, 공백3, 별3, 개행
// ***** *************** ***** 8 공백2, 별5, 공백2, 공백2, 별15, 공백2, 공백2, 별5, 개행
// ******* ***************** ******* 9 공백1, 별7, 공백1, 공백1, 별17, 공백1, 공백1, 별7, 개행
// ************************************* 10 공백0, 별9, 공백0, 공백0, 별19, 공백0, 공백 0, 별9,개행
//line:1~2*n
//조건(line<=n)이 참일 때
//공백= (2*n-1)+(2*n-line) = 4*n -1-line
//별 = 2*line-1
//개행
//조건(line<=n)이 거짓일 때
//공백 = 2*n-line
//별 = 2*(line-n)-1
//공백 = 2*(2*n-line)
//별 = 2*line-1
//공백 = 2*(2*n-line)
//별 = 2*(line-n)-1
//개행
#include <stdio.h>
int main(void)
{
int n;
int line,space,star;
scanf_s("%d",&n);//입력
for(line=1;line<=2*n;line++)//line: 1~2n
{
if(line<=n)//line is 1~n
{
for(space=1;space<=(4*n - 1 - line);space++)//공백 4*n - 1 - line개
{
putchar(' ');
}
for(star =1; star<=(2*line -1); star++)//별 2*line -1개
{
putchar('*');
}
putchar('\n');//개행
}
else//line is n+1 ~ 2n
{
for(space=1;space<=(2*n-line);space++)//공백 2n-line개
{
putchar(' ');
}
for(star =1; star<=2*(line-n)-1; star++)//별 2*(line-n)-1개
{
putchar('*');
}
for(space=1; space<=(2*(2*n-line));space++)//공백 2*(2*n-line) 개
{
putchar(' ');
}
for(star =1; star<=(2*line-1); star++)//별 2*line-1개
{
putchar('*');
}
for(space=1; space<=(2*(2*n-line));space++)//공백 2*(2*n-line) 개
{
putchar(' ');
}
for(star =1; star<=2*(line-n)-1; star++)//별 2*(line-n)-1개
{
putchar('*');
}
putchar('\n');//개행
}
}
return 0;
}