최대값, 최소값, 평균 구하는 코드

조회수 8709회
#include <stdio.h>
int main(){
    int max=0;
    int min=0;
    int stu=0;
    int i=0;
    int sum=0;
    float avg=0;
    int num[i];


    printf("학생 수를 입력하세요 : ");
    scanf("%d",&stu);

    for(i=0;i<stu;i++){
    a:
        printf("%d번째 학생의 점수를 입력하세요 : ",(i+1));
        scanf("%d",num[i]);
        if(num[i]>100||num[i]<0){
            printf("범위에 맞게 점수를 입력하세요");
            goto a;
        }
        sum+=num[i];
        if(i==0){
            max=num[0];
            min=num[0];
        }
        else{
            if(num[i]>max){
                max=num[i];
            }
            else{
                if(num[i]<min){
                    min=num[i];
                }
            }
        }
    }
    avg=sum/stu;

    printf("최대값 : %d",max);
    printf("최소값 : %d",min);
    printf("평균 : %f",avg);

}

num[i]부분부터 문제인것 같습니다.

아래 scanf에 들어가는 학생 수에 맞춰서 배열의 크기를 맞추고 싶은데, 어떻게 하죠 ..?

저것만 해결하면 다 됩니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 이전 질문에 답을 하려고 작성 중이었는데, 비슷한 새로운 질문을 올리셔서 여기에 작성합니다.

    i를 증가시키지 않고 다시 입력받게 하려면, for문 내에서 while문으로 반복문을 중첩하거나, i--;로 i를 한번 감소시킨 후 continue를 통해 루프를 다시 시작하면 됩니다.

    goto 키워드는 로직의 흐름을 무시하고 강제로 이동시키기 때문에 왠만하면 쓰지 않는 것이 좋습니다.

    a:
            printf("%d번째 학생의 점수를 입력하세요 : ",(i+1));
            scanf("%d",num[i]);
            if(num[i]>100||num[i]<0){
                printf("범위에 맞게 점수를 입력하세요");
                goto a;
            }
    

    이왕이면 이렇게 바꾸어주세요.

            printf("%d번째 학생의 점수를 입력하세요 : ",(i+1));
            scanf("%d",num[i]);
            if(num[i]>100||num[i]<0){
                printf("범위에 맞게 점수를 입력하세요");
                i--;
                continue;
            }
    

    int num[]; 에는 학생 수의 최대 허용치를 배열의 크기로 넣어줘야 할 듯합니다. c언어에서 배열은 무조건 크기가 정해져 있어야 하기 때문입니다.

    그리고 stu에 학생 수를 입력받을 때, 그 최대 허용치 이상은 받지 못하도록 루프를 돌려 재입력을 받을 수 있게 처리해야 할 듯 합니다. c언어 정수 입력 scanf에서 문자열 입력 시 예외 처리를 참고해주세요.

    예를 들면,

    int num[500];
    
    stu = 0;
    while (stu <= 0 || stu > 500){    // stu값이 1~500 일때, 빠져나옴
        printf("학생 수를 입력하세요 : ");
        scanf("%d",&stu);
        while (getchar() != '\n'); // 입력버퍼 해제 용 (위 링크 참고)
    }
    

    만약 고정된 크기의 배열이 아니라, 유동적인 크기의 배열이 꼭 필요하다면, 포인터와 동적할당을 이용할 수밖에 없습니다. (c++에는 간편하게 라이브러리로 제공되지만 c에서는 직접 만들어야 할 겁니다.)

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)