2014-10-06 2 views
1

저는 아직 초보자이기 때문에이 프로그램에서 약간의 문제가 있습니다. 모든 것은 배열 등급 []에 대한 요소로 사용되는 입력 값의 평균을 계산할 때까지 정상적으로 작동합니다.내 프로그램은 입력 된 배열 요소의 평균을 취하지 않을 것입니다.

출력은 각 학생의 입력 학년 옆에 학생 번호 1 ~ 5가 나열된 표입니다. 학생 번호와 성적을 잘 표시 할 수 있지만 프로그램이 평균을 올바르게 계산하지 못하는 것 같습니다. 도와주세요?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

void main() 
{  
    float grade[5]; 
    int n; 

    for(n=1; n<=5; n++){ 
     printf("Enter grade %d between 0 and 100: ",n); 
     scanf("%f", &grade[n]); 
    } 

    printf("\nStudent\t\tGrade\n"); 

    for(n=1; n<=5; n++){ 
     printf("%d\t\t%.1f\n\n",n ,grade[n]); 
    } 
    printf("--------------------\n"); 

    float avg = (grade[0] + grade[1] + grade[2] + grade[3] + grade[4])/5; 
    printf("Average Grade:\t%.1f", avg); 
} 
+4

'float grade [5];에 대한 배열 첨자는 0에서 4까지이며 1에서 5가 아닙니다. 따라서 정의되지 않은 동작으로 이어지는 스캔 및 인쇄 작업시 배열의 범위를 벗어납니다. 당신의 평균은 unintialized 변수를 사용합니다 ('grade [0]'). 당신은'scanf()'의 반환 값을 검사하여 매번 실제 데이터를 얻을 수 있도록해야한다. –

답변

3

for 루프가 올바르지 않습니다. 특히 인덱스는 0부터 시작합니다. 대신

for(n=1; n<=5; n++) { 

사용

for(n = 0; n < 5; n++) { 

의 평균의 계산이 정확하다. 그 전에는 잘못된 인덱싱 일뿐입니다.

2

배열 인덱스는 C에서 1이 아닌 0부터 시작합니다. 평균을 계산할 때이 권한을 얻지 만 데이터를 입력하기 위해 루프를 수행 할 때는 그렇지 않습니다. 따라서 당신은 할 때

for(n=1; n<=5; n++){ 
    printf("Enter grade %d between 0 and 100: ",n); 
    scanf("%f", &grade[n]); 
} 

당신은 배열의 끝을지나 1을 실행 끝낸다.

대신 당신은 0에서 루프를 시작해야합니다

for(n=0; n<5; n++){ 
    printf("Enter grade %d between 0 and 100: ",n); 
    scanf("%f", &grade[n]); 
} 

두 번째 루프는 동일합니다. 코멘트에서 언급 한 바와 같이 당신은 그 계정에 두 번째 루프에서 학생 번호를 인쇄 할 때 낮은 하나되는 색인을해야 : 당신은 또한 두번째 루프 내에서 avg의 계산을 넣을 수 있습니다

printf("%d\t\t%.1f\n\n", n+1,grade[n]); 
+0

'n'이 아닌'n + 1'을 출력 할 때와 같은 출력을 얻으려면. – dom0

+0

@ dom0, 좋은 캐치 – shuttle87

0

.

avg = 0; 
for(n=0; n<5; n++){ 
    printf("%d\t\t%.1f\n\n",n ,grade[n]); 
    avg += grade[n]; 
} 
관련 문제