/* 一个好的示例程序可以帮助学习 */
/* 程序使用 malloc() 为数组分配内存 */
/* 加入了数据验证 */
#include <stdio.h>
#include <stdlib.h>
float average(float * array, int n); /* 函数原型 */
int main(void)
{
float * score, aver;
int i, n;
printf("有几个学生: ");
while(scanf("%d", &n) != 1 || n < 0) /* 保证输入的是正整数 */
{
while(getchar() != '\n');
printf("请正确输入学生数量: ");
}
while(getchar() != '\n');
score = (float *)malloc(sizeof(float) * n); /* 分配内存 */
if(n > 0 && score == NULL)
{
fputs("无法分配内存!", stderr);
exit(1);
}
for(i = 0; i < n; i++)
{
printf("第%d学生: ", i + 1);
if(scanf("%f", &score[i]) != 1) /* 输入非数字可以退出循环 */
{
while(getchar() != '\n');
break;
}
while(getchar() != '\n');
}
if(i > 0)
{
aver = average(score, i);
printf("\n共%d个学生,平均分: %.2f\n", i, aver);
}
else
puts("\n没有学生!");
if(n > 0)
free(score); /* 一定要记得,释放 malloc() 分配内存喔! */
getchar();
return 0;
}
float average(float * array, int n)
{
int i;
float sum;
if(n <= 0)
return 0.0;
for(i = sum = 0; i < n; i++)
sum += array[i];
return (sum / n);
}
[[italic] 本帖最后由 cosdos 于 2007-12-3 19:25 编辑 [/italic]]