최대값, 최소값, 평균 구하는 코드
조회수 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에서는 직접 만들어야 할 겁니다.)
댓글 입력