자기주도C언어프로그래밍 Chapter08. 반복제어문3 - 형성평가
1. 정수 20개를 입력받아서 그 합과 평균을 출력하되 0이 입력되면 20개 입력이 끝나지 않더라도 그 때까지 입력된 합과 평균을 출력하는 프로그램을 작성하시오. (0은 입력된 개수에 포함시키지 않는다. 평균은 소수 부분은 버리고 정수 부분만 출력한다.)
입력 예
5 9 6 8 4 3 0
출력 예
35 5
#include <stdio.h>
int main(){
int num, cnt=0, sum=0, avg;
for(;;){
scanf("%d", &num);
sum += num;
if(num != 0)
cnt++;
if(num == 0 || cnt == 20)
break;
}
avg = (double)sum / cnt;
printf("%d %d", sum, avg);
return 0;
}
※ for(; ;)로 무한 루프를 사용하고 특정 조건 만족 시 break를 하는 형태로 작성하였습니다.
(while(1)로 쓰셔도 무방합니다.)
※ avg에서 소수점 이하는 버리고 정수값만 나타내는 표현이 이거 말고 더 쉬운 방법이 있는지 모르겠습니다..
2. 1부터 100까지의 정수 중 한개를 입력받아 100보다 작은 배수들을 차례대로 출력하다가 10의 배수가 출력되면 프로그램을 종료하도록 프로그램을 작성하시오.
입력 예
7
출력 예
7 14 21 28 35 49 56 63 70
#include <stdio.h>
int main(){
int i, num;
scanf("%d", &num);
for(;;){
printf("%d ", num * i);
i++;
if(num*i >= 100)
break;
else
if((num*i) % 10 == 0){
printf("%d", num*i);
break;
}
}
return 0;
}
※ for(;;)의 무한 반복에서
1. 100이상의 수가 나오면 바로 종료하는 조건
2. 100 미만의 수 중 10의 배수가 나오면 출력하고 종료하는 조건
을 각각 설정하였습니다.
3~10. 자연수 n을 입력받아 각 문제의 출력예와 같이 출력되는 프로그램을 작성하시오.
3.
입력 예
3
출력 예
*
**
***
**
*
#include <stdio.h>
int main(){
int i, j, n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
printf("*");
}
printf("\n");
}
for(i=1;i<=n;i++){
for(j=n-1;j>=i;j--){
printf("*");
}
printf("\n");
}
return 0;
}
4.
입력 예
3
출력 예
*****
***
*
***
*****
#include <stdio.h>
int main(){
int i, j, n;
scanf("%d", &n);
for(i=1;i<=n-1;i++){
for(j=1;j<i;j++){
printf(" ");
}
for(j=i;j<=n*2-i;j++){
printf("*");
}
printf("\n");
}
for(i=1;i<=n;i++){
for(j=1;j<=n-i;j++){
printf(" ");
}
for(j=1;j<=i*2-1;j++){
printf("*");
}
printf("\n");
}
return 0;
}
※ 연습문제 5번과 자가진단 5번을 참고하여 만들었습니다.
*****
***
이부분을 출력하는 for문을 작성하고
나머지를 출력하는 for문을 작성하였습니다.
5.
입력 예
3
출력 예
*
***
*****
#include <stdio.h>
int main(){
int i, j, n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=(n-i)*2;j++){
printf(" ");
}
for(j=1;j<=i*2-1;j++){
printf("*");
}
printf("\n");
}
}
6.
입력 예
3
출력 예
1
1 2
1 2 3
#include <stdio.h>
int main(){
int i, j, n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=(n-i)*2;j++){
printf(" ");
}
for(j=1;j<=i;j++){
printf("%d ", j);
}
printf("\n");
}
return 0;
}
7.
입력 예
3
출력 예
A B C
D E 0
F 1 2
#include <stdio.h>
int main(){
int i, j, n;
int num=0;
char alpha = 'A';
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=n-i+1;j++){
printf("%c ", alpha++);
}
for(j=2;j<=i;j++){
printf("%d ", num++);
}
printf("\n");
}
return 0;
}
8.
입력 예
3
출력 예
1 2 3
4 5
6
#include <stdio.h>
int main(){
int i, j, n, num=1;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=i*2-2;j++){
printf(" ");
}
for(j=i;j<=n;j++){
printf("%d ", num++);
}
printf("\n");
}
return 0;
}
9.
입력 예
3
출력 예
#
# #
# # #
# #
#
#include <stdio.h>
int main(){
int i, j, n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
printf("# ");
}
printf("\n");
}
for(i=2;i<=n;i++){
for(j=1;j<=i*2-2;j++){
printf(" ");
}
for(j=i;j<=n;j++){
printf("# ");
}
printf("\n");
}
return 0;
}
10.
입력 예
3
출력 예
1 3 5
7 9 1
3 5 7
#include <stdio.h>
int main(){
int i, j, n, num=1;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d ", num);
num += 2;
if(num > 10)
num=1;
}
printf("\n");
}
return 0;
}
※ num +=2로 홀수 값을 늘려주며 홀수의 값이 10이 넘으면 1로 바꿔주는 형식으로 작성하였습니다.
오늘까지 한 내용 중 가장 어려웠던 챕터였던 것 같습니다.
형성평가를 하는동안 앞부분 연습문제와 자가진단 내용을 계속 참고하면서 겨우 했네요..
4~8번에서 멘탈이 나가서.. 1학년때 C언어를 어떻게 배웠는지 이해가 안되더라고요,,
개인적으로 복습을 많이 해야 할 것 같은 챕터입니다..