一道C语言作业!!!

dreamup 2004-12-22 07:28:29
输入n个学生m门课程的成绩,求每们学生的平均成绩,差按平均成绩排序输出前10名学生的各科成绩。要求排序和输出分别在被调函数中进行。
#include <stdlib.h>
#define N 20
#define M 6
void sort(float a[][M+2]);
void print_scores(float a[][M+2],int n);

int main(){
float scores[N][M+2];
float sco;
int i,j;

for(i=0;i<N;i++){
printf("Please input No.%d's scores:",i+1);
for(j=1;j<M+1;j++){
scanf("%f",&sco);   /*这里如果直接用sacnf("%f",&scores[i][j])会出错,*/
              /*而用一个变量传值却不会出错,不知道为什么?*/
scores[i][j]=sco;
}
scores[i][0]=i+1;   /*存每名学生的学号*/
scores[i][M+1]=0;   /*存每名学生的平均成绩*/
printf("\n");
}
for(i=0;i<N;i++){
for(j=1;j<M;j++)
scores[i][M+1]+=scores[i][j];
scores[i][M+1]/=M;
}
for(i=0;i<N;i++){
printf("No.%.0f's scores:",scores[i][0]);
for(j=1;j<M+1;j++)
printf(" %.1f ",scores[i][j]);
printf("\n");
}
sort(scores);
print_scores(scores,10);
getch();
}

void sort(float a[][M+2]){
int i,j,temp;
int maxi;
for(i=0;i<N-1;i++){
maxi=i;
for(j=i+1;j<N;j++)
if(a[maxi][M+1]<a[j][M+1])
maxi=j;
if(maxi!=i){

for(j=0;j<M+2;j++){
temp=a[i][j];
a[i][j]=a[maxi][j];
a[maxi][j]=temp;
}
}
}
}
void print_scores(float a[][M+2],int n){
int i,j;
for(i=0;i<n;i++){
printf("No.%.0f's scores:",a[i][0]);
for(j=1;j<=M+1;j++)
printf(" %.1f ",a[i][j]);
printf("\n");
}
}
...全文
431 点赞 收藏 11
写回复
11 条回复
xiaoxiaozhi 2005年01月04日
数组不单单在数组名的地方代表内村里该数组首元素的地址
而且数组每行的首地址也代表该行首元素的地址
数组在内存中的存储是这样表示的
所以会出现编译是错误

链表在元素较多时会使得效率大大降低
这种情况下可以考虑使用结构体数组
回复 点赞
Larrys 2005年01月03日
很抱歉我最近没上网所以这么晚才来.
一定不可以加,不然不会通过 COMPILE的.
我暂时还不知道为什么我知道后会尽快回复你

-----------------------LARRYS
回复 点赞
Rick_ang 2005年01月03日
是因为行指针和列指针的问题..书上有写~~很详细..可以去看看
回复 点赞
Vo5 2004年12月25日
Larrys
我有点不明白
数组名scores是代表内存里该数组首元素的地址
但是scores[i][j]确实数组里的一个元素
不是地址
应该要加&取地址符的
回复 点赞
Larrys 2004年12月24日
你的源码我用TC2.0运行了。

“这里如果直接用sacnf("%f",&scores[i][j])会出错,而用一个变量传值却不会出错,不知道为什么?*/”
答:
关键在于数组本身也为指针类似。所以scanf的时候不要在数组元素前加地址运算"&"所以应写:
sacnf("%f",scores[i][j]);
不知你学习过节构体没有,你可以利用它来简化代码。我初学所以不能帮你太多,我把我知道的告诉你或许对你有帮助。
回复 点赞
xzhangyu 2004年12月23日
用结构体链表来做!
回复 点赞
welsly 2004年12月22日
同意楼上的,用结构体。
回复 点赞
snow810211 2004年12月22日
用结构呢.
struct Stu
{
int id;
float score;
}
可能稍微好点:0
回复 点赞
dongyuanzhang 2004年12月22日
就看你的数据多不多了!当然数组在条件允许的条件下最方便,不行可考虑指针数组!
回复 点赞
monika0617 2004年12月22日
用链表
回复 点赞
dreamup 2004年12月22日
这里用的是数组,不知道还有没有更好的方法来实现?
回复 点赞
发动态
发帖子
新手乐园
创建于2007-09-28

1.4w+

社区成员

4.1w+

社区内容

C/C++ 新手乐园
社区公告
暂无公告