C언어(자기주도C언어프로그래밍)/Chapter08. 반복제어문3

자기주도C언어프로그래밍 Chapter08. 반복제어문3 - 형성평가

사상 2023. 2. 27. 01:36

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언어를 어떻게 배웠는지 이해가 안되더라고요,,

 

개인적으로 복습을 많이 해야 할 것 같은 챕터입니다..