任务和代码:输入学生成绩,输出高于平均成绩的学生序号和成绩。
其中学生人数不定,可能10个,可能1000。在录入成绩之前,学生人数由键盘输入。
由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来。考虑学生人数不定,用动态数组是个更适合的方案
/*
文件名:main.c
作者:小风景
完成日期:2016.7.21
问题描述:输入学生成绩,输出高于平均成绩的学生序号和成绩。
其中学生人数不定,可能10个,可能1000。在录入成绩之前,学生人数由键盘输入。
由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来。考虑学生人数不定,用动态数组是个更适合的方案
程序输出:
*/
#include <stdio.h>
#include <malloc.h>
int main()
{
int number; //学生人数
int *score; //动态数组的首地址
int sum=0,ave; //成绩和、均分
int i = 0;
//输入学生人数,为动态数组score分配合适大小的空间
printf("请输入学生人数:");
scanf("%d",&number);
score = (int *)malloc(number*sizeof(int)); //动态分配数组空间
//读入学生成绩,并求出成绩和
printf("请输入学生的成绩:\n");
while(i < number)
{
fflush(stdin); //清空输入缓存,防止上一次输入的的数据残留
printf("请输入第%d名学生的成绩:",i+1);
scanf("%d",score+i);
sum += *(score + i);
i++;
}
//求平均成绩
ave = sum / number;
printf("%d名学生的平均成绩为:%d\n",number,ave);
//输出高于平均分的学生的学号(即序号)和成绩
printf("高于平均分的学生的学号(即序号)和成绩为:\n");
for(i = 0;i < number;i++)
{
if(*(score + i) > ave)
{
printf("学号:%d\t成绩:%d\n",i + 1,*(score + i));
}
}
//释放动态分配的空间
free(score);
return 0;
}
程序运行结果:
总结:程序中有个需要注意的小点是在输入时为了防止一次输入多个数而没有清空缓存,导致后面的无需输入而能够得出正常结果,需要在每次输入后清空输入缓存。另外注意,C语言到这个部分需要多加了解和掌握指针的操作,所以应该尽量避免以数组的方式操作。程序中还有一点不足就是当没有学生成绩高于平均成绩时,没有输出。