C GPA分数计划

C GPA分数计划,c,C,我应该写一个程序,询问用户一个班级有多少学生。然后,它要求每个学生的平均成绩。最后,它应该显示每个GPA分数的学生人数。到目前为止,这是我所拥有的,但它似乎没有正确计算 #include <stdio.h> int main(void){ int cnt1, cnt2, cnt3, cnt4, student, numofsdts, GPA, GPAFreq[4]; printf("Enter number of students: "); scanf("%d", &nu

我应该写一个程序,询问用户一个班级有多少学生。然后,它要求每个学生的平均成绩。最后,它应该显示每个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);
}
#包括
内部主(空){
int cnt1、cnt2、cnt3、cnt4、学生、numofsdts、GPA、GPAFreq[4];
printf(“输入学生人数:”);
scanf(“%d”和numofsdts);
学生=1;
同时(学生4){
printf(“无效数字\n”);
}
否则{
学生++;
}
如果(学生==numosdts+1)
打破
if(GPAFreq[1])
cnt1++;
否则如果(GPAFreq[2])
cnt2++;
否则如果(GPAFreq[3])
cnt3++;
else if(GPAFreq[4])
cnt4++;
}
printf(“GPA 1:%d名学生”,cnt1);
printf(“GPA 2:%d名学生”,cnt2);
printf(“GPA 3:%d名学生”,cnt3);
printf(“GPA4:%d名学生”,cnt4);
}

设置
int cnt1=0、cnt2=0等(默认情况下它们不会被清空,只是有一些垃圾[比如租来的房间没有明确清理…])

此外:

if(GPA<1 | | GPA>4){
printf(“无效数字\n”);
continue;//跳过循环体的其余部分
}
或稍微干净一点的方法(全部):

#包括
内部主(空){
int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
国际货币基金组织,GPA;
printf(“输入学生人数:”);
scanf(“%d”和numofsdts);
学生=0;
同时(学生4){
printf(“无效数字\n”);
继续;
}
如果(GPA==1)
cnt1++;
否则如果(GPA==2)
cnt2++;
否则如果(GPA==3)
cnt3++;
否则如果(GPA==4)
cnt4++;
学生++;
}
printf(“GPA 1:%d名学生”,cnt1);
printf(“GPA 2:%d名学生”,cnt2);
printf(“GPA 3:%d名学生”,cnt3);
printf(“GPA4:%d名学生”,cnt4);
}

设置
int cnt1=0、cnt2=0等(默认情况下它们不会被清空,只是有一些垃圾[比如租来的房间没有明确清理…])

此外:

if(GPA<1 | | GPA>4){
printf(“无效数字\n”);
continue;//跳过循环体的其余部分
}
或稍微干净一点的方法(全部):

#包括
内部主(空){
int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
国际货币基金组织,GPA;
printf(“输入学生人数:”);
scanf(“%d”和numofsdts);
学生=0;
同时(学生4){
printf(“无效数字\n”);
继续;
}
如果(GPA==1)
cnt1++;
否则如果(GPA==2)
cnt2++;
否则如果(GPA==3)
cnt3++;
否则如果(GPA==4)
cnt4++;
学生++;
}
printf(“GPA 1:%d名学生”,cnt1);
printf(“GPA 2:%d名学生”,cnt2);
printf(“GPA 3:%d名学生”,cnt3);
printf(“GPA4:%d名学生”,cnt4);
}

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

第三个问题是,
if
语句没有按您认为的那样执行。它将数组中的值作为布尔变量进行计算,即0为
false
,其他任何值均为
true
。更好的方法是这样做:
GPAFreq[GPA-1]+=1;

这将计算数组的每个索引中的频率。然后要打印它们,您只需访问
GPAFreq
,不再需要
cnt
变量。

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

第三个问题是,
if
语句没有按您认为的那样执行。它将数组中的值作为布尔变量进行计算,即0为
false
,其他任何值均为
true
。更好的方法是这样做:
GPAFreq[GPA-1]+=1;

这将计算数组的每个索引中的频率。然后要打印它们,您只需访问
GPAFreq
,不再需要
cnt
变量。

首先-定义期望值。其次-描述正在发生的情况。然后,使用调试器逐步检查代码,以确定哪里不起作用。而不是e:
c
arrays start@zeroFirst-定义期望值。其次-描述正在发生的事情。然后,使用调试器逐步检查代码,以确定哪里出了问题。注意:
c
arrays start@zero您错过了所有错误中最大的一个错误-
c
中的数组是基于零的。这一点不错!但实际上是存在的是一个更大的错误:根本不需要GPAFreq!(或者可以用它代替
cnt1
,等等),但您不知道作业的参数,这可能是他/她的课程中数组的第一课。好的,与其完成作业,不如将
cnt1
等替换为
GPAFreq[0]
等,作为读者的练习(提示:
int-GPAFreq[4]={}
将所有元素都置零)。您错过了所有错误中最大的一个错误-
c
中的数组是零基的。这一点很好!但实际上有一个更大的错误:根本不需要GPAFreq!(或者可以使用它代替
cnt1
,等等)但是你不知道作业的参数,这可能是他/她的课程中数组的第一课。好的,我们不完成作业,而是让读者把
cnt1
等替换为
GPAFreq[0]
等作为练习(提示:
int-GPAFreq[4]={}
清空所有元素)。最初我没有使用数组,效果很好。但是,我需要使用数组,但我不知道如何正确使用它们。最初我
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);
}