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

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

사상 2023. 2. 27. 19:53

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

 

JUNGOL

 

www.jungol.co.kr

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

 

교재 P.168 연습문제1 - 소스1

#include <stdio.h>
int main(){
    int a, b, c, d, e;

    scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);

    printf("%d %d %d %d %d", a, b, c, d, e);

    return 0;
}

 

교재 P.169 연습문제 - 소스2

#include <stdio.h>
int main(){
    int a[5];

    scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]);

    printf("%d %d %d %d %d", a[0], a[1], a[2], a[3], a[4]);

    return 0;
}

 

교재 P.170 연습문제1 - 소스3

 #include <stdio.h>
int main(){
    int a[5], i;
    for(i=0;i<5;i++){
        scanf("%d", &a[i]);
    }
    for(i=0;i<5;i++){
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}

 

교재 P.171 자가진단1

#include <stdio.h>
int main(){
    int i;
    char alpha[10];

    for(i=0;i<10;i++){
        scanf(" %c", &alpha[i]);
    }
    for(i=0;i<10;i++){
        printf("%c", alpha[i]);
    }
    return 0;
}

 

※ 배열은 a[0] 부터 시작하므로 for(i=1;i<=10;i++)로 하지 않고 for(i=0;i<10;i++)로 작성하였습니다.

 

교재 P.172 연습문제2

#include <stdio.h>
int main(){
    char c[26];
    int i;

    for(i=0;i<26;i++){
        c[i] = 'A' + i;
    }
    for(i=25;i>=0;i--){
        printf("%c ", c[i]);
    }
    printf("\n");

    return 0;
}

 

교재 P.173 자가진단2

#include <stdio.h>
int main(){
    int i, array[10];

    for(i=0;i<10;i++){
        array[i] = i+1;
    }
    for(i=0;i<10;i++){
        printf("%d ", array[i]);
    }
    return 0;
}

 

교재 P.174 연습문제3

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

    for(i=0;i<10;i++){
        scanf("%d", &num[i]);
    }

    printf("%d %d %d\n", num[2], num[4], num[9]);
    return 0;
}

 

교재 P.175 자가진단3

#include <stdio.h>
int main(){
    int i;
    char array[10];

    for(i=0;i<10;i++){
        scanf(" %c", &array[i]);
    }
    printf("%c %c %c", array[0], array[3], array[6]);
    
    return 0;
}

 

교재 P.175 연습문제4

#include <stdio.h>
int main(){
    int num[100], i, count;

    for(i=0;i<100;i++){
        scanf("%d", &num[i]);
        if(num[i] == 0)
            break;
    }

    count = i;
    for(i=1;i<count;i+=2){
        printf("%d ", num[i]);
    }
    printf("\n");
    
    return 0;
}

 

교재 P.176 자가진단4

#include <stdio.h>
int main(){
    int i, cnt, array[100];

    for(i=0;i<100;i++){
        scanf("%d", &array[i]);
        if(array[i] == 0)
            break;
    }
    cnt = i-1;
    for(i=cnt;i>=0;i--){
        printf("%d ", array[i]);
    }
    return 0;
}

 

※ cnt = i-1에서 마지막에 입력된 0을 빼 주었습니다.

 

교재 P.177 연습문제5

#include <stdio.h>
int main(){
    int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int year, month;

    while(1){
        printf("YEAR = ");
        scanf("%d", &year);
        printf("MONTH = ");
        scanf("%d", &month);

        if(month == 0){
            break;
        }
        else if(month <= 0 || month > 12){
            printf("잘못 입력하였습니다.\n\n");
        }
        else{
            if(year % 400 == 0) days[2] = 29;
            else if(year % 4 ==0 && year % 100 != 0) days[2] = 29;
            else days[2] = 28;
            printf("입력하신 달의 날 수는 %d일입니다.\n\n", days[month]);
        }
    }
    return 0;
}

 

교재 P.179 자가진단5

#include <stdio.h>
    int main(){
    int a, b;
    double sum=0;
    double array[6] = {85.6, 79.5, 83.1, 80.0, 78.2, 75.0};

    scanf("%d %d", &a, &b);
    sum = array[a-1] + array[b-1];
    printf("%.1lf", sum);
}

 

※ array[6]배열에 반의 평균 점수를 입력하였습니다.

배열은 0부터 시작하기 때문에 1반을 입력받고 싶어서 1을 입력하면 2반의 점수를 불러오기 때문에 a-1로 하여 한칸씩 앞당겼습니다.

 

교재 P.180 연습문제6

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

    for(i=0;i<10;i++){
        scanf("%d", &num[i]);
    }

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

    return 0;
}

 

교재 P.181 자가진단6

#include <stdio.h>
int main(){
    int i, min = 1000, array[10];
    
    for(i=0;i<10;i++){
        scanf("%d", &array[i]);
        if(min > array[i]){
            min = array[i];
        }
    }
    printf("%d", min);

    return 0;
}

 

※ 문제에서 입력으로 주어지는 정수는 1000을 넘지 않는다고 하였으므로 min의 초기값으로 1000을 대입하였습니다.

min의 초기값은 입력 받을 값보다 큰 값을 지정해 두어야 합니다.

 

교재 P. 182 연습문제7

#include <stdio.h>
int main(){
    int num[10];
    int max = -10000, min = 10000;
    int i;

    for(i=0;i<10;i++){
        scanf("%d", &num[i]);
    }

    for(i=0;i<10;i++){
        if(num[i] % 2 == 0){
            if(max < num[i]){
                max = num[i];
            }
        }
        else
            if(min > num[i]){
                min = num[i];
            }
    }
    printf("%d %d\n", min, max);

    return 0;
}

 

교재 P.183 자가진단7

#include <stdio.h>
int main(){
    int i, max=-10000, min=100000;
    int array[10];
    
    for(i=0;i<10;i++){
        scanf("%d", &array[i]);
    }

    for(i=0;i<10;i++){
        if(array[i] < 100){
            if(max < array[i]){
                max = array[i];
            }
        }
        else
            if(min > array[i]){
                min = array[i];
            }
    }
    if(max == -10000)
        max = 100;
    if(min == 100000)
        min = 100;
    printf("%d %d", max, min);

    return 0;
}

 

※ for반목문에서는 100 미만의 수 중 최댓값과 100 이상의 수 중 최소값을 구하는 부분을 구현하였고

   문제에서  해당하는 수가 없으면 100을 출력한다고 하였으므로

    max의 값과 min의 값이 초기값에서 변하지 않았다면(해당하는 수가 없으면) 100으로 초기화 시켜주었습니다.

 

교재 P.184 연습문제8

#include <stdio.h>
int main(){
    int score[10];
    int sum = 0;
    double avg;
    int i;

    for(i=0;i<10;i++){
        scanf("%d", &score[i]);
    }
    for(i=0;i<10;i++){
        sum += score[i];
    }
    avg = sum / 10.0;

    printf("총점 = %d\n", sum);
    printf("평균 = %.1lf", avg);

    return 0;
}

교재 P.185 자가진단8

#include <stdio.h>
int main(){
    int odd_sum=0, even_sum=0, i, array[10];
    double avg;

    for(i=0;i<10;i++){
        scanf("%d", &array[i]);
        if(i % 2 != 0){
            odd_sum += array[i];
        }
        else
         even_sum += array[i];
    }

avg = (double)even_sum / 5;

printf("sum : %d\n", odd_sum);
printf("avg : %.1lf", avg);

return 0;
}

 

교재 P.186 연습문제9

#include <stdio.h>
int main(){
    int a[5] = {95, 75, 85, 100, 50};
    int i, j, tmp;

    for(i=0;i<4;i++){
        for(j=i+1;j<5;j++){
            if(a[i] > a[j]){
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
    for(i=0;i<5;i++){
        printf("%d ", a[i]);
    }
    return 0;
}

 

교재 P.189 자가진단9

#include <stdio.h>
int main(){
    int i, j, temp, array[10];

    for(i=0;i<10;i++){
        scanf("%d", &array[i]);
    }

    for(i=0;i<10;i++){
        for(j=0;j<10-1-i;j++){
            if (array[j] < array[j+1]) {
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }

    for(i=0;i<10;i++){
        printf("%d ", array[i]);
    }
    return 0;

}

※ for(j=0;j<10-1-i;j++)부분은 j값이 증가할 수록 앞부분은 정렬이 되어 뒷부분의 계산 식을 줄이기 위해 이렇게 작성하였습니다.