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


#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에 들어가는 학생 수에 맞춰서 배열의 크기를 맞추고 싶은데, 어떻게 하죠 ..?

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

  • 2016년 09월 29일에 작성됨

조회수 226


1 답변


좋아요
0
싫어요
채택취소하기

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

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에서는 직접 만들어야 할 겁니다.)

  • 2016년 09월 30일에 작성됨
    C++, C# 좋아합니다.

  • 소중한 답변 감사드립니다. 잘 참고하겠습니다 !    TAEG   2016.9.30 15:20     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close