C 具有函数和结构的类平均值

C 具有函数和结构的类平均值,c,C,别担心!我成功了,谢谢你们的帮助。我一回来就发布解决方案。 基本上,我只是试图根据结构数据库的用户输入值找到类平均值。除了我似乎无法获得特定作业的平均课堂成绩外,一切正常 以下是我正在努力解决的函数: 编辑(我修改了函数,但旧版本仍在完整的代码段中。) 例如,我将输入: 001 100 100 100 002 50 50 -1 0 0(终止) 产出将是: 班级作业的平均成绩是150.00 (但应该是75.00) void classavg(结构等级记录[200]) { } 以下是完整的代码:

别担心!我成功了,谢谢你们的帮助。我一回来就发布解决方案。

基本上,我只是试图根据结构数据库的用户输入值找到类平均值。除了我似乎无法获得特定作业的平均课堂成绩外,一切正常

以下是我正在努力解决的函数:

编辑(我修改了函数,但旧版本仍在完整的代码段中。)

例如,我将输入: 001 100 100 100

002 50 50

-1 0 0(终止)

产出将是:

班级作业的平均成绩是150.00

(但应该是75.00)

void classavg(结构等级记录[200]) {

}

以下是完整的代码:

/*
欧安会作业5:
标题:
作者:劳拉·肯特(LauraKent@my.unt.edu)lek0073
日期:2014年11月9日
欧安会1030
目的:
*/
#包括
结构等级
{
国际货币基金组织;
双hwavg;
双exam1;
双exam2;
};
无效标题信息(无效);
作废菜单(作废);
作废数据库(结构等级记录[200]);
作废学生信息(结构等级记录[200]);
无效studentavg(结构等级记录[200]);
无效字母平均值(整数);
void classavg(结构等级记录[200]);
int main()
{
结构等级记录[200];
headerinfo();
字符赋值[30];
数据库(记录);
int输入;
而(1)
{
菜单();
scanf(“%d”,输入(&I));
开关(输入)
{
案例1:
学生信息(记录);
打破
案例2:
学生VG(记录);
打破
案例3:
classavg(记录);
打破
案例4:
printf(“终止程序:再见!\n”);
返回0;
打破
违约:
printf(“错误!无效输入。\n\n”);
}
}
}
无效标题信息(无效)
{
printf(“程序:Homwork05.c\n作者:Laura Kent(LauraKent@my.unt.edu)lek0073\nCSCE 1030\n”);
}
作废菜单(作废)
{
printf(“选择下列选项之一:\n 1.学生成绩数据\n 2.学生成绩平均值\n 3.作业的班级平均值\n 4.退出\n”);
}
无效数据库(结构等级记录[200])
{
int i;
printf(“输入每个学生的EUID、作业平均值、考试1年级和考试2年级:\n\n”);
printf(“终止输入'-1'作为学生EUID,以及平均值和分数的一次性值。\n”);
对于(i=0;i 89.50)
{
字母='A';
}
其他如果(平均79.50)
{
字母='B';
}
其他如果(平均69.50)
{
字母='C';
}
其他如果(平均59.50)
{
字母='D';
}
其他的
{
字母='F';
}
printf(“字母等级:%c\n”,字母);
}
void classavg(结构等级记录[200])
{
int i;
字符赋值[30];
双类AVGHW=0,classavge1=0,classavge2=0,totalhw=0,totale1=0,totale2=0;
i=0;
while(记录[i].euid!=-1)
{
totalhw+=记录[i].hwavg;
totale1+=记录[i]。exam1;
totale2+=记录[i].exam2;
classavghw=总硬件/i;
classavge1=总计1/i;
classavge2=总计2/i;
i++;
}
printf(“输入作业:(家庭作业,exam1,exam2)\n”);
scanf(“%s”,赋值);
如果(strcmp(分配,“家庭作业”)==0)
{
printf(“班级作业平均值为:%.2lf\n”,classavghw);
}
否则如果(strcmp(分配,“exam1”)==0)
{
printf(“exam1类平均值为:%.2lf\n”,classavge1);
}
否则如果(strcmp(分配,“exam2”)==0)
{
printf(“exam2类平均值为:%.2lf\n”,classavge2);
}
其他的
printf(“不是有效的输入!\n”);

}
您没有发布全部代码,但乍一看,您的问题是您从未初始化过

double classavghw, classavge1, classavge2, totalhw, totale1, totale2;
这些变量

另外,在您的代码中,在
while()
循环中,您过早地增加了
i
[除非这是设计要求,否则在没有完整代码的情况下无法确定]。通常,索引
i
应该在循环执行加法后递增


如果您编辑并添加更多信息,我们可能会有更多线索。

您能提供一个给定结果和预期结果的示例吗?在使用+=之前,还应该初始化双精度值。该内存位置可能有任何内容,您假设它为0。您需要初始化变量。另外,您确定要在添加到总计之前增加循环体中的
i
?在我看来,递增
i
应该是循环体中的最后一条语句。不能在非终止字符串上使用字符串函数。因此,在调用scanf()之前,将分配数组初始化为所有“\0”。否则将导致未定义的行为,可能导致seg故障事件。关于此线路:scanf(“%s”,assign);应检查调用scanf()返回的值,以确保到分配数组的转换成功。此外,没有限制输入的长度,因此赋值数组可能会溢出,从而导致未定义的行为。最好使用类似fgets()的方法将输入读入本地缓冲区,然后检查输入的字符数,然后使用sscanf()提取字符串。或者,更简单地说。字符赋值[30]={'\0'};然后,;scanf(“%29s”,赋值);//29允许字符串终止符
double classavghw, classavge1, classavge2, totalhw, totale1, totale2;