- 论坛徽章:
- 0
|
作了一些修改,大家帮忙看看还有什么问题
#include <stdio.h>
#include <stdLib.h>
#include <memory.h>
int main()
{
// 定义保存批量数据的二维数组,
// 并用memset()函数完成数组的初始化
const int classnum = 6;
const int stnum = 100;
// 这个定义和初始化也可以更简单地写成
// int scores[classnum][stnum] = {0};
int scores[classnum][stnum]];
memset(scores,0,classnum*stnum*sizeof(intscores));
// 利用for语句完成数据的输入
// 逐个班级循环
for(int i = 0; i < classnum;++i)
{
printf("please input the scores of class %d:\n",i+1);
// 逐个学生循环
// 这里我们需要将数组的最后一个元素预留为0,
// 表示数组的结束,防止数组访问越界
// 所以输入循环的最大次数是stnum-1
for(int j = 0; j < stnum-1; ++j)
{
// 将输入的数据保存到scores[i][j]
scanf("%d",&scores[i][j]);
// 判断刚刚输入的数据是否为0,
// 如果为0,则利用break结束本层循环
if(0 == scores[i][j])
{
break;
}
// 判断输入的数据是否为负数
// 如果是,则提示用户重新输入
else if(scores[i][j] < 0)
{
puts("ERROR! the score must be greater than 0.");
--j; // 撤销本次输入增加的序号
}
}
}
// …
return 0;
}
// 获得一维数组的平均值
float getaver(int* st)
{
int count = 0;
floatint total = 0.0;
// 只要没有遇到表示数据结束的0值,
// 就一直累加所有数据的值
while(0!=*st)
{
++count; // 数据个数加1
total += *st; // 累加数据
++st; // 指向下一个数据
}
// 返回平均值
if( 0 == count ) // 对没有元素的情况作特殊处理
{
return 0.0;
}
else
{
return (float)total/count;
}
}
// 通过数组的平均值大小进行比较
int cmp(const void* a, const void* b)
{
// 获得两个数组的平均值
float avera = getaver((int*)a);
float averb = getaver((int*)b);
// 返回比较结果
return avera - averb;
}
int main()
{
// …
// 利用qsort()函数对二维数组进行排序
qsort(scores, // 数组名,也就是数组首地址
classnum, // 数组元素个数
stnum*sizeof(int), // 每个数据元素占用的空间
cmp); // 比较规则函数
return 0;
}
|
|