输出学生成绩(动态分配):输入学生人数后输入每个学生的成绩,最好输出学生的平均成绩,最高成绩和最低成绩。要求使用动态内存分配来实现。试编写相应程序
#include<stdio.h> //输出学生成绩实验代码
#include<stdlib.h>
int main()
{
int n,i;
float *a,max,min,sum;
while(1)
{
printf("请输入学生人数:(输入0退出)\n");
scanf("%d",&n);
max=0,min=1000,sum=0; //数据每次循环重置,以防上个循环结果影响下个循环的输出
if(n==0)
{
printf("程序运行结束\n");
break;
}
else if(n<0)
{
printf("学生人数输入错误!请重新输入\n");
continue;
}
else
{
a=(float*)malloc(n*sizeof(float));
printf("请输入%d个学生的成绩:\n",n);
for(i=0;i<n;i++)
{
scanf("%f",a+i);
if(a[i]<0) //由于题目未对成绩上限作要求,故只考虑了下限
{
printf("学生成绩输入错误!请重新输入:\n");
i--;
continue;
}
else
{
if(a[i]<min)
min=a[i];
if(a[i]>max)
max=a[i];
}
sum+=a[i];
}
printf("此%d位学生的平均成绩为%.2f\n",n,sum/n);
printf("此%d位学生的最高成绩为%.1f\n",n,max);
printf("此%d位学生的最低成绩为%.1f\n\n",n,min);
}
}
return 0;
}
要注意题目要求,变量范围控制好以保证代码健壮
这里没有free,所以动态分配的这块内存好像在关了debug程序后会一直被占用....
不过回不回收好像和操作系统有关系?
C不像java会捡垃圾...唉
结果: