C언어(자기주도C언어프로그래밍)/Chapter10. 배열2

자기주도C언어프로그래밍 Chapter10. 배열2 - 연습문제&자가진단

사상 2023. 3. 13. 00:49

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10a0 

 

JUNGOL

 

www.jungol.co.kr

사이트에서 직접 프로그램을 돌려볼 수 있습니다.

 

교재 P.194 연습문제1

#include <stdio.h>
int main(){
    int num, i;
    int count[11] = {0};

    while(1){
        scanf("%d", &num);
        if(num < 1 || num > 10) break;
        count[num]++;
    }
    for(i=1;i<=10;i++){
        if(count[i] > 0){
            printf("%d : %d개\n", i, count[i]);
        }
    }
    return 0;
}

 

교재 P.196 자가진단1

#include <stdio.h>
int main(){
    int i, count[26] = {0};
    char alpha;

    while(1){
        scanf(" %c", &alpha);
        if(alpha < 'A' || alpha > 'Z')
            break;
        
        count[alpha-'A']++;
    }    
    for(i=0;i<26;i++){
        if(count[i] > 0)
            printf("%c : %d\n", 'A' + i, count[i]);
    }

    return 0;
}

 

※ 전 이게 정말 어려웠네요... 원래 저번주에 하다가 이 문제에서 멘탈이 반쯤 나가서 ... 이번주에 글을 쓰네요...ㅋㅋ

 

교재 P.197 연습문제2

#include <stdio.h>
int main(){
    int num, i;
    int count[10] = {0};

    while(1){
        scanf("%d", &num);
        if(num==0)  break;
        count[num % 10]++;
    }

    for(i=0;i<10;i++){
        if(count[i]>0){
            printf("%d : %d개\n", i, count[i]);
        }
    }
    return 0;
}

교재 P.198 자가진단2

#include <stdio.h>
int main(){
    int i, num, count[10] = {0};

    while(1){
        scanf("%d",  &num);
        if(num==0)
            break;
        count[num / 10]++;
    }

    for(i=0;i<10;i++){
        if(count[i] > 0){
            printf("%d : %d\n", i, count[i]);
        }
    }

    return 0;
}

 

교재 P.199 연습문제3

#include <stdio.h>
int main(){
    int i;
    int fibo[41] = {0, 1, 1};

    for(i=3;i<=40;i++){
        fibo[i] = fibo[i-1] + fibo[i-2];
    }

    for(i=10;i<=40;i+=10){
        printf("피보나치 수열 %d항 : %d\n", i, fibo[i]);
    }

    return 0;
}

 

교재 P.200 자가진단3

#include <stdio.h>
int main(){
    int i=0, num;
    int array[10000] = {100};
    scanf("%d", &num);
    array[1] = num;

    while(1){
        array[i+2] = array[i] - array[i+1];
        if(array[i] >= 0)
            printf("%d ", array[i]);
        else{
            printf("%d ", array[i]);
            break;
        }
        i++;
    }
    return 0;
}

 

※ 배열의 크기는 임의로 10000을 넣었습니다. 

※ while(1)로 해두고 음수일때 출력을 한다음에 break;를 하는게 뭔가 어색해서 수정해 봤습니다.

교재 P.200 자가진단3  - 2

#include <stdio.h>
int main(){
    int i=0, num;
    int array[10000] = {100};
    scanf("%d", &num);
    array[1] = num;

    do{
        array[i+2] = array[i] - array[i+1];
        printf("%d ", array[i]);
        i++;
    }while(array[i-1]>0);
    return 0;
}

 

※ do-while문(먼저 한번 실행 한 다음 조건을 체크함)을 이용하여 먼저 array[0]의 값을 출력해주고

i++에 의해  i=1이 됩니다. 이 이후로는 array[i-1]의 값이 항상 존재하므로(array[0]부터 출발함) 출력하는데 오류가 없고

while(array[i-1]>0)은 마지막에 array[i] 가 음수가 되었을 때 종료해야 하는데 그러기 위해선 그 전 값(array[i-1])이 마지막 양수면 되므로 이렇게 작성하였습니다.

 

교재 P.201 연습문제4

#include <stdio.h>
int main(){
    int i, j;
    int arr[3][3] = {{3, 5, 4}, {2, 6, 7}, {8, 10, 1}};

    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

교재 P.202 자가진단4

#include <stdio.h>
int main(){
    int i, j, array[3][5] = {{5, 8, 10, 6, 4}, {11, 20, 1, 13, 2}, {7, 9, 14, 22, 3}};

    for(i=0;i<3;i++){
        for(j=0;j<5;j++){
            printf("%2d   ", array[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

교재 P.203 연습문제5

#include <stdio.h>
int main(){
    int i, j;
    int a[3][3], b[3][3], hap[3][3];

    for(i=0;i<3;i++){
        printf("첫 번째 배열 %d행 ", i+1);
        for(j=0;j<3;j++){
            scanf("%d", &a[i][j]);
        }
    }

    for(i=0;i<3;i++){
        printf("두 번째 배열 %d행 ", i+1);
        for(j=0;j<3;j++){
            scanf("%d", &b[i][j]);
        }
    }
    
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            hap[i][j] = a[i][j] + b[i][j];
        }
    }

    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%d ", hap[i][j]);
        }
        printf("\n");
    }

    return 0;    
}

 

※ 교재에는 "첫번째"와 "두번째"가 이어져 써있으나 웹 상에서 돌렸을땐 "첫 번째"와 "두 번째"로 써야 정답 처리가 됩니다.

 

교재 P.205 자가진단5

#include <stdio.h>
int main(){
    int i, j, arr1[2][4], arr2[2][4], result[2][4];

    printf("first array\n");
    for(i=0;i<2;i++){
        for(j=0;j<4;j++){
            scanf("%d", &arr1[i][j]);
        }
    }

    printf("second array\n");
    for(i=0;i<2;i++){
        for(j=0;j<4;j++){
            scanf("%d", &arr2[i][j]);
        }
    }

    for(i=0;i<2;i++){
        for(j=0;j<4;j++){
            result[i][j] = arr1[i][j] * arr2[i][j];
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

교재 P.205 연습문제6

#include <stdio.h>
int main(){
    int i, j;
    int score[4][4] = {{0}};

    for(i=0;i<3;i++){
        printf("%d번째 학생의 점수 ", i+1);
        for(j=0;j<3;j++){
            scanf("%d", &score[i][j]);
            score[i][3] += score[i][j];
            score[3][j] += score[i][j];
            score[3][3] += score[i][j];
        }
    }

    printf("     국어 영어 수학 총점\n");
    for(i=0;i<4;i++){
        if(i<3) printf(" %d번", i+1);
        else    printf("합계");
        for(j=0;j<4;j++){
            printf("%4d", score[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

교재 P.208 자가진단6

#include <stdio.h>
int main(){
    int i, j, count=0, array[5][5];

    for(i=0;i<5;i++){
        for(j=0;j<4;j++){
            scanf("%d", &array[i][j]);
            array[i][4] = (array[i][0] + array[i][1] + array[i][2] + array[i][3]) / 4;
        }
    }

    for(i=0;i<5;i++){
        if(array[i][4] >= 80){
            printf("pass\n");
            count++;
        }
        else
            printf("fail\n");
    }
    printf("Successful : %d", count);
    
    return 0;
}

 

※ 배열의 행을 하나 더 만들어 평균을 저장하고 평균 값을 이용하여 pass와 fail을 구분하였습니다.

 

교재 P.208 연습문제7

#include <stdio.h>
int main(){
    int i, j;
    int pas[6][6] = {0};

    pas[1][1] = 1;
    for(i=2;i<6;i++){
        for(j=1;j<=i;j++){
            pas[i][j] = pas[i-1][j-1] + pas[i-1][j];
        }
    }

    for(i=1;i<6;i++){
        for(j=1;j<=i;j++){
            printf("%d ", pas[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

교재 P.210 자가진단7

#include <stdio.h>
int main(){
    int i, j, array[5][5];
    
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            array[i][0] = 1;
            array[0][j] = 1;
            if(i>0 && j>0){
                array[i][j] = array[i-1][j] + array[i][j-1];
            }
        }
    }
    
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%d ", array[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

 

 

자가진단1을 하다 막혀서 나중에 해야지 하다 결국 한 주가 밀렸네요...ㅋㅋ;;

원래는 3/12(일)에 연습문제와 자가진단을 끝내려고 했는데 중간에 캡스톤 디자인 회의가 잡혀서 타임오버...가 됐네요

어제 감기에 걸려서 몸 상태가 안좋아기도 하고 내일 10시 수업이라 형성평가까지는 힘들거 같아요...

형성평가는 평일 중에 작성하겠습니다.