2014-04-18 2 views
-2

두 명 이상의 학생을 추가 할 때마다 첫 번째 학생과 동일한 GPA가 부여됩니다. 나는 매번 삽입하고, 최대 GPA를 어떻게 표시 할 수 있습니까?C : 학생을위한 평점 계산 프로그램

#include <stdio.h> 

FILE *f; 

struct student 
{ 
    char name[20]; 
    int id; 
    int n; 
    float sum; 
    float gpa; 
} s[100]; 

float FUN_GPA(int n); 

int main() 
{ 
    int m,i,x,b; 
    float max=0; 


    s[i].sum=0; 

    printf("Please Enter Number Of Students : "); 
    scanf("%d",&m); 

    for(i=0;i<m;i++) 
    { 
     printf("\nStudent %d : \n",i+1); 

     printf("Name : "); 
     scanf("%s",&s[i].name); 

     printf("ID : "); 
     scanf("%d",&s[i].id); 

     printf("Number Of Courses : "); 
     scanf("%d",&s[i].n); 

    } 
    printf("\nEnter Student Marks"); 
    for(i=0;i<m;i++) 
    { 
     printf("\n\n\t\t\t......[ Student %d ]......\n",i+1); 

     for(x=0;x<s[i].n;x++) 
     { 
      printf("Course %d Mark : ",x+1); 
      scanf("%d",&b); 

      s[i].sum+=b; 
     } 
     printf("\nSum Of The Courses Marks = %3.f",s[i].sum); 
     printf("\nGPA For Student %d = %f",i+1,FUN_GPA(s[i].gpa)); 


    } 
    if (s[i].gpa>max) 
     max=s[i].gpa; 
    printf("\n\nHighest GPA is done by Student %d with GPA = %f",i,max); 

    { 

     if((f=fopen("d:\\STUDENTS.txt","w"))==NULL) 
      printf("\ncant open file "); 
//  if((f=fopen("d:\\STUDENTS.txt","r"))==NULL) 
//  printf("\ncant open file "); 

     fprintf(f,"Name : %s\t ID : %d\t GPA = %f \n",s[i].name,s[i].id,s[i].gpa); 

     fclose(f); 
    } 
} 

float FUN_GPA(int i) 
{ 
    s[i].gpa=0; 
    s[i].gpa=s[i].sum/s[i].n; 

    return s[i].gpa; 
} 
+0

GPA는 무엇입니까? 제발 정교하게하십시오 –

+0

gpa는 학년 또는 다른 단어로 gpa = 성적 합/과정 수 –

+0

GPA는 학점에 따라 가중치가 적용되므로 학점 * 학점 + 학점 * 학점이 누락되었습니다 ..../학점의 합계 –

답변

0

FUN_GPA(s[i].gpa)FUN_GPA(i)으로 바꿉니다.

이 코드는 안에 넣습니다. 루프가 있습니다.

if (s[i].gpa>max) 
    max=s[i].gpa; 

동일한 것을 그런데,이 초기화에 적용 :별로 사용 ​​그것을 외부 갖는

s[i].sum=0; 

는 일반적 루프 외부 변수 i를 사용하지 않는 단계; 이것은 나쁜 습관이고, 당신의 특별한 경우에는, 완전히 잘못되었습니다! i은 최고 실적 학생의 지수가 아닙니다. 마지막으로 등록 된 학생 바로 다음의 배열 요소를 참조하기 때문에 루프가 끝나면 올바른 색인이 아닙니다. 지금까지 최고의 연기자의 지수를 추적 할 수있는 새로운 변수를 소개하십시오. 대신 i의, 따라 라인이 새로운 변수를 사용 : 동일

fprintf(f,"Name : %s\t ID : %d\t GPA = %f \n",s[i].name,s[i].id,s[i].gpa); 

여기; 이미 다른 곳에서했던 것처럼 1을 더하는 것을 잊지 마십시오!

printf("\n\nHighest GPA is done by Student %d with GPA = %f",i,max); 

일반적인 조언 : 설명이 포함 된 이름을 사용하십시오. i은 괜찮습니다. sn은 너무 커서 좋지 않습니다. m, xb은 속눈썹을 50 번 잘 때부터 명의 선생님 들께 좋습니다.

0

이 (가 현재 기록 된대로 하나만을 확인하고) for 루프에 있어야합니다 :

if (s[i].gpa>max) 
    max=s[i].gpa; 

당신은 아마도 imax 있던 추적 할 수 있습니다.

그래서 같은 : 따라

int iwithmax; 

for (i = 0 ; i < m ; i++) { 
    if (s[i].gpa > max) { 
     max = s[i].gpa; 
     iwithmax = i; 
    } 
} 

및 변경 인쇄 문 :

printf("\n\nHighest GPA is done by Student %d with GPA = %f",iwithmax,max);