GPA分数计划

时间:2016-12-05 19:28:24

标签: c

我应该编写一个程序,询问用户课堂上有多少学生。然后,它要求每个学生的GPA。最后,它应该显示每个GPA分数的学生数量。到目前为止,这就是我所拥有的,但它似乎没有正确计算。

#include <stdio.h>

int main(void){
int cnt1, cnt2, cnt3, cnt4, student, numofsdts, GPA, GPAFreq[4];

printf("Enter number of students: ");
scanf("%d", &numofsdts);

student = 1;

while(student <= numofsdts){
    printf("GPA of student number %d: ", student);
    scanf("%d", &GPA);

    if(GPA < 1 || GPA > 4){
        printf("invalid number \n");
    }
    else{
        student++;
    }

    if(student == numofsdts + 1)
        break;


    if(GPAFreq[1])
        cnt1++;
    else if(GPAFreq[2])
        cnt2++;
    else if(GPAFreq[3])
        cnt3++;
    else if(GPAFreq[4])
        cnt4++;

}

printf("GPA 1: %d students \n", cnt1);
printf("GPA 2: %d students \n", cnt2);
printf("GPA 3: %d students \n", cnt3);
printf("GPA 4: %d students \n", cnt4);
}

2 个答案:

答案 0 :(得分:3)

设置int cnt1 = 0, cnt2 = 0等(默认情况下它们不会无效,只是有一些垃圾[就像租来的房间没有明确清理......]。)

此外:

if(GPA < 1 || GPA > 4){
    printf("invalid number \n");
    continue; // skip the rest of the loop body
}

或略微更清洁的方法(完整):

#include <stdio.h>

int main(void){
int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
int numofsdts, GPA;

printf("Enter number of students: ");
scanf("%d", &numofsdts);

students = 0;
while(students <= numofsdts){
    printf("GPA of student number %d: ", students + 1);
    scanf("%d", &GPA);

    if(GPA < 1 || GPA > 4){
        printf("invalid number \n");
        continue;
    }

    if(GPA == 1)
        cnt1++;
    else if(GPA == 2)
        cnt2++;
    else if(GPA == 3)
        cnt3++;
    else if(GPA == 4)
        cnt4++;

    students++;
}

printf("GPA 1: %d students \n", cnt1);
printf("GPA 2: %d students \n", cnt2);
printf("GPA 3: %d students \n", cnt3);
printf("GPA 4: %d students \n", cnt4);
}

答案 1 :(得分:1)

这里有多个错误。首先,cnt1-4必须在添加之前进行初始化。第二个是C使用零索引,因此GPAFreq[4]不访问数组的第四个元素(GPAFreq[3]

第三是你的if声明没有按照你的想法行事。它将数组内部的值作为布尔变量进行评估,即0为false,其他任何内容为true。更好的方法是这样做: GPAFreq[GPA - 1] += 1; 这将计算阵列的每个索引中的频率。然后要打印它们,您只需访问GPAFreq,不再需要cnt变量。