AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 7장 배열 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 7장 배열

아랑팡팡 2023. 3. 31. 14:34
728x90

혼자해보기 7-1

다음 배열 선언에서 오류를 찾아 수정하시오.

1) int a[4] = {1,2,3,4,5};

  -> int a[5] = {1,2,3,4,5} or int a[4] = {1,2,3,4}

2) int b[3];

 b[1] = 10;

 b[2] = 10;

 b[3] = 10;

 

혼자해보기 7-2

다음에 제시된 배열의 원소를 모두 곱한 결과를 출력하는 프로그램을 작성하시오.

#include <stdio.h>

int main(void) {
    int mult[] = { 4, 2, 5, 1, 3 };
    int sum = 1; 

    for (int i = 0; i < 5; i++) {
        sum *= mult[i]; 
    }

    printf("원소들을 곱한 합 : %d", sum);

    return 0;
}

 

혼자해보기 7-3

다음과 같이 2차원 배열을 선언하시오. 그리고 3열로 구성되어 있는 배열의 각 열별로 더한 값을 출력하는 프로그램을 작성하시오.

#include <stdio.h>

int main(void) {
   
    int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };

    int sum1 = 0, sum2 = 0, sum3 = 0;

    for (int i = 0; i < 3; i++) {
        sum1 += a[i][0];
        sum2 += a[i][1];
        sum3 += a[i][2];
    }

    printf("1열의 원소를 다 더하면 : %d\n", sum1);
    printf("2열의 원소를 다 더하면 : %d\n", sum2);
    printf("3열의 원소를 다 더하면 : %d", sum3);

    return 0;
}

 

01. 다음 프로그램의 문법적인 오류나 논리적인 오류를 수정하시오.

1) int a[4] = {10,20,30,40,50};

-> int a[5] = {10, 20, 30, 40, 50};

 

2) int a[3][] = {5, 15, 10, 35, 40, 20};

-> 마지막 차원의 크기는 생략할 수 없다.

int a[3][2] = {{5,15}, {10, 35}, {40, 20}};

 

3)  char str[5] = "Error";

-> char[6] = "Error";

 

4) 

#include <stdio.h>

int main(void) {
   
    int a[3] = { 4, 5, 10 };
    int sum = 0;

    printf("배열의 원소를 모두 더합니다.\n");

    for (int i = 0; i < 3; i++) {
        sum += a[i];
    }
    printf("결과는 %d입니다.\n", sum);

    return 0;
}

 

5) 

#include <stdio.h>

int main(void) {
   
    char name[] = "Peter";

    printf("반복문을 이용해서 문자열을 출력합니다.\n");
    for (int i = 0; i < 5; i++) {
        printf("%c", name[i]);
    }

    return 0;
}

 

6) 

#include <stdio.h>

int main(void) {
   
    char subject[] = "English";
    int i = 0;

    printf("반복문을 이용해서 문자열을 출력합니다.\n");

    while (subject[i]) {
        putchar(subject[i++]);
    }

    return 0;
}

 

7)

#include <stdio.h>

int main(void) {
   
    int aryTmp[] = { 10, 20, 30, 40 };
    int i, aryLength;

    aryLength = sizeof(aryTmp) / sizeof(int);

    printf("배열명을 이용해서 주소를 출력합니다.\n");
    for (i = 0; i < aryLength; i++) {
        printf("aryTmp의 %d의 주소는 %p이다.\n", i + 1, &aryTmp[i]);
    }

    return 0;
}

 

02. 정수형인 1차원 배열 a,b를 선언하고 두 배열의 각 원소를 합한 결과를 배열 c로 만들어 화면에 출력하시오.

- 배열 a : 45, 20, 5, 9, 30, 15

- 배열 b: 23, 18, 28, 3, 11, 22

#include <stdio.h>

int main(void) {
   
    int a[] = { 45, 20, 5, 9, 30, 15 };
    int b[] = { 23, 18, 28, 3, 11, 22 };
    int c[6];

    for (int i = 0; i < 6; i++) {
        c[i] = a[i] + b[i];
        printf("c[%d] = %d\n", i, c[i]);
    }

    return 0;
}

 

03. 02번 문제에서 선언한 배열 a,b에서 배열 a의 각 원소와 배열 b의 각 원소를 비교하여 배열 a의 원소가 크면 'Y'를 아니면 'N'을 가진 문자형 배열 d를 if문을 이용하여 작성하시오.

#include <stdio.h>

int main(void) {
   
    int a[] = { 45, 20, 5, 9, 30, 15 };
    int b[] = { 23, 18, 28, 3, 11, 22 };
    char d[6];

    for (int i = 0; i < 6; i++) {
        if (a[i] > b[i]) {
            d[i] = 'Y';
        }
        else {
            d[i] = 'N';
        }
    }

    printf("결과 : ");
    for (int i = 0; i < 6; i++) {
        printf("%c ", d[i]);
    }

    return 0;
}

 

 

05. 비밀번호를 입력받아 시스템에 저장되어 있는 비밀번호와 일치하면 종료 메시지를 출력하고, 일치하지 않으면 비밀번호를 다시 물어보는 프로그램을 작성하시오. 이때 시스템 비밀번호는 'code'. 종료 메시지는 '프로그램을 종료합니다.'로 작성하시오.

#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
   
    char input[20];
    char code[] = "code";
    int count = 0;

    while (!count) {
        printf("비밀번호를 입력해 주세요 : ");
        scanf("%s", input);

        if (strcmp(input, code) == 0) { // strcmp함수는 문자열을 비교하는 함수로 
            count = 1;                  // 두 문자열이 같으면 0을 다르면 0이 아닌값을 반환해서 문자열의 길이를 비교할떄 용이하다.
            printf("비밀번호가 일치합니다!\n");
            printf("프로그램을 종료합니다.");
        }
        else {
            printf("비밀번호가 일치하지 않습니다.\n");
        }
   }

    return 0;
}

 

 

 

07. 성적을 계산하는 프로그램을 작성한다고 한다. 아래 질문에 답하시오.

1) 철수, 민수, 영희의 국어, 영어, 수학 점수를 각각 입력받아 kor, eng, math의 1차원 배열로 저장하시오.(단, 각 배열의 첫번째 요소는 철수, 두번째 요소는 민수, 세번째 요소는 영희로 한다.)

#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
   
    int kor[3], eng[3], math[3];

    printf("철수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[0], &eng[0], &math[0]);
    printf("민수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[1], &eng[1], &math[1]);
    printf("영희의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[2], &eng[2], &math[2]);

    printf("\n");
    printf("철수의 국어점수 : %d\n", kor[0]);
    printf("철수의 영어점수 : %d\n", eng[0]);
    printf("철수의 수학점수 : %d\n\n", math[0]);
    printf("민수의 국어점수 : %d\n", kor[1]);
    printf("민수의 영어점수 : %d\n", eng[1]);
    printf("민수의 수학점수 : %d\n\n", math[1]);
    printf("영희의 국어점수 : %d\n", kor[2]);
    printf("영희의 영어점수 : %d\n", eng[2]);
    printf("영희의 수학점수 : %d\n\n", math[2]);
   
    return 0;
}

 

2) 세 과목의 평균을 각각 구하고 평균이 가장 높은 과목의 평균 점수를 출력하시오.

#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
   
    int kor[3], eng[3], math[3];
    float koravg, engavg, mathavg;

    printf("철수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[0], &eng[0], &math[0]);
    printf("민수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[1], &eng[1], &math[1]);
    printf("영희의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[2], &eng[2], &math[2]);

    koravg = (kor[0] + kor[1] + kor[2]) / 3.0;
    engavg = (eng[0] + eng[1] + eng[2]) / 3.0;
    mathavg = (math[0] + math[1] + math[2]) / 3.0;

    printf("\n");
    printf("철수의 국어점수 : %d\n", kor[0]);
    printf("철수의 영어점수 : %d\n", eng[0]);
    printf("철수의 수학점수 : %d\n\n", math[0]);
    printf("민수의 국어점수 : %d\n", kor[1]);
    printf("민수의 영어점수 : %d\n", eng[1]);
    printf("민수의 수학점수 : %d\n\n", math[1]);
    printf("영희의 국어점수 : %d\n", kor[2]);
    printf("영희의 영어점수 : %d\n", eng[2]);
    printf("영희의 수학점수 : %d\n\n", math[2]);

    printf("세과목의 평균\n");
    printf("국어점수 평균 : %.1f\n", koravg);
    printf("영어점수 평균 : %.1f\n", engavg);
    printf("수학점수 평균 : %.1f\n\n", mathavg);

    if (koravg >= engavg && koravg >= mathavg) {
        printf("국어점수의 평균이 [%1.f]점으로 가장 높습니다.", koravg);
   }
    else if (engavg >= koravg && engavg >= mathavg) {
        printf("영어점수의 평균이 [%1.f]점으로 가장 높습니다.", engavg);
    }
    else {
        printf("수학점수의 평균이 [%1.f]점으로 가장 높습니다.", mathavg);
    }

    return 0;
}

 

3) 세 과목의 합이 가장 높은 학생의 이름을 출력하시오.

#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
   
    int kor[3], eng[3], math[3], total[3];
    float koravg, engavg, mathavg;
    char topname[3][10] = { "철수", "민수", "영희" }; // null을 포함한 크기

    printf("철수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[0], &eng[0], &math[0]);
    printf("민수의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[1], &eng[1], &math[1]);
    printf("영희의 국어, 영어, 수학 점수를 입력하세요 : ");
    scanf("%d %d %d", &kor[2], &eng[2], &math[2]);

    koravg = (kor[0] + kor[1] + kor[2]) / 3.0;
    engavg = (eng[0] + eng[1] + eng[2]) / 3.0;
    mathavg = (math[0] + math[1] + math[2]) / 3.0;

    for (int i = 0; i < 3; i++) {
        total[i] = kor[i] + eng[i] + math[i];
    }
    int max = 0;
    int top = 0;
    for (int i = 0; i < 3; i++) {
        if (total[i] > max) {
            max = total[i];
            top = i;
        }
    }

    printf("\n");
    printf("철수의 국어점수 : %d\n", kor[0]);
    printf("철수의 영어점수 : %d\n", eng[0]);
    printf("철수의 수학점수 : %d\n\n", math[0]);
    printf("민수의 국어점수 : %d\n", kor[1]);
    printf("민수의 영어점수 : %d\n", eng[1]);
    printf("민수의 수학점수 : %d\n\n", math[1]);
    printf("영희의 국어점수 : %d\n", kor[2]);
    printf("영희의 영어점수 : %d\n", eng[2]);
    printf("영희의 수학점수 : %d\n\n", math[2]);

    printf("세과목의 평균\n");
    printf("국어점수 평균 : %.1f\n", koravg);
    printf("영어점수 평균 : %.1f\n", engavg);
    printf("수학점수 평균 : %.1f\n", mathavg);

    if (koravg >= engavg && koravg >= mathavg) {
        printf("국어점수의 평균이 [%1.f]점으로 가장 높습니다.", koravg);
   }
    else if (engavg >= koravg && engavg >= mathavg) {
        printf("영어점수의 평균이 [%1.f]점으로 가장 높습니다.", engavg);
    }
    else {
        printf("수학점수의 평균이 [%1.f]점으로 가장 높습니다.", mathavg);
    }

    printf("\n\n%s의 합계가 가장 높습니다.", topname[top]);
    
    

    return 0;
}

 

08. 1차원 배열 A[10] = {15, 12, 3, 35, 78, 22, 11, 2, 49, 19}의 최대값과 최소값을 출력하는 프로그램을 작성하시오.

#include <stdio.h>
#pragma warning(disable:4996)
int main(void) {
   
    int A[10] = { 15, 12, 3, 35, 78, 22, 11, 2, 49, 19 };
    int max = A[0], min = A[0];

    for (int i = 0; i < 10; i++) {
        if (A[i] > max) {
            max = A[i];
        }
        if (A[i] < min) {
            min = A[i];
        }
    }

    printf("최대값 : %d\n", max);
    printf("최소값 : %d\n", min);
    

    return 0;
}
728x90
반응형
LIST