C GPA分数计划
我应该写一个程序,询问用户一个班级有多少学生。然后,它要求每个学生的平均成绩。最后,它应该显示每个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
#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使用零索引,soGPAFreq[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);
}