一道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");
}
}
...全文
466 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
这里用的是数组,不知道还有没有更好的方法来实现?

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧