感谢各位的注意!编译时没任何问题,只是在运行时问题很多;学生数不能多,用了12就出错;不知是什么情况?……………………各种问题;愿意的可以试一试!这是源文件:/*计算任意多个班级的平均分*/
#include <stdio.h>
int main()
{
int stu_num = 0; //Declare the student's number and initiate it
int class_num =0; //store the classes's number
int count = 0; //for index
double grades[stu_num]; //Store students's grades
double aver[class_num]; //Store every class's average
double temp_sum = 0; //Store every class's sum
double temp_average = 0;
//获取班级数
printf("你们有几个班呀?:");
scanf("%d",&class_num);
for(int i = 1;i<=class_num;++i)
{
count = 0;
printf("请输入第%d个班级的学生个数:",i);
scanf("%d",&stu_num);
printf("请输入每个学生的成绩:\n");
//Get every student's grade
for(int j = 0;j < stu_num;++j)
{
printf("%d>> ",j+1);
scanf("%lf",&grades[count]);
++count;
}
//Calculate the average and store it
temp_sum = 0;
for(int k = 0;k < stu_num;++k)
temp_sum += grades[k];
temp_average = temp_sum/(double)stu_num; //类型转换!
aver[i-1] = temp_average;
}
for(int d = 0;d < class_num;++d)
{
printf("第 %d 个班级的平均分为: %lf\n",d,aver[d]);
}
return 0;
}
5 回答
已采纳

MadMarical
TA贡献79条经验 获得超122个赞
你好。你的代码意思是动态的生成一个数组,比如输入classnum然后将这个classnum传入进数组。让数组也变成classnum这么大的。但是你建立数组的方式却是静态的,你已经初始化了一个classnum=0的数组,这个数组就是长度为0的数组。它不会因为你输入了一个classnum而变成长度为classnum大小的数组。如果要建立一个变长的数组,你需要在堆中开辟空间,在C中使用malloc 关键字,在C++使用new关键字。

尼斯達Nesta_0
TA贡献3条经验 获得超0个赞
可变长数组是不能改变容量的,一开始已经stu_num=0和class_num=0,则两个double的数组大小都被定义成0个字节,因此后面for循环的访问属于越界访问。当两个数组越界位置如果没有数据存储则没有问题,如果本来已经有其余栈区数据占据这些内存,则会引发各种问题,而且每次运行出现的问题都有可能不同,结果都有可能每次都不同

尼斯達Nesta_0
TA贡献3条经验 获得超0个赞
可变长数组是不能改变容量的,一开始已经stu_num=0和class_num=0,则两个double的数组大小都被定义成0个字节,因此后面for循环的访问属于越界访问。当两个数组越界位置如果没有数据存储则没有问题,如果本来已经有其余栈区数据占据这些内存,则会引发各种问题,而且每次运行出现的问题都有可能不同,结果都有可能每次都不同
- 5 回答
- 0 关注
- 2075 浏览
添加回答
举报
0/150
提交
取消