新问题,为什么成绩大小排序,排完以后,名字顺序还是有问题?运行程序的结果也是错的。
该程序是输入7个学生的成绩,然后利用函数调用,从大到小排列成绩及学生姓名。然后输出最高分和最低分以及平均分。
#include "stdio.h"#include "string.h"#define N 7float pj(char a[7][7],float b[7]){ int i,j; float t[N],p; char f[N][N]; p=0; for(j=0;j<N-1;j++) for(i=0;i<N-j;i++) if(b[i]<b[i+1]) { t[i]=b[i+1]; strcpy(f[j],a[j+1]); b[i+1]=b[i]; strcpy(a[j+1],a[j]); b[i]=t[i]; strcpy(a[j],f[j]); } printf("学生成绩为:\n"); for(i=0;i<N;i++) printf("%10s\t%.2f\n",a[i],b[i]); printf("最高成绩为:%.2f\t最低成绩为:%.2f\n",b[0],b[N-1]); for(i=0;i<N;i++) p+=b[i]; return p;}void main(){ char a[N][N]; float b[N]; int i; float m; printf("请输入学生姓名及成绩:\n"); for(i=0;i<N;i++) scanf("%s%f",a[i],&b[i]); printf("学生成绩为:\n"); for(i=0;i<N;i++) printf("%10s\t%.2f\n",a[i],b[i]); m=pj(a,b)/N; printf("学生的平均成绩为:%.2f\n",m);}#include "stdio.h"#include "string.h"#define N 7float pj(char a[7][7],float b[7]){ int i,j; //float t[N],p;不要分配过多的内存空间 float t,p; //char f[N][N]; char f[1][N]; p=0; for(j=0;j<N-1;j++)//冒泡排序 { for(i=j+1;i<N;i++) if(b[j] < b[i]) { t=b[j]; b[i]=b[j]; b[j]=t; strcpy(f[0],a[i]); strcpy(a[i],a[j]); strcpy(a[j],f[0]); } /* if(b[i]<b[i+1]) { t[i]=b[i+1]; strcpy(f[j],a[j+1]); b[i+1]=b[i]; strcpy(a[j+1],a[j]); b[i]=t[i]; strcpy(a[j],f[j]); }*/ } printf("学生成绩为:\n"); for(i=0;i<N;i++) printf("%10s\t%.2f\n",a[i],b[i]); printf("最高成绩为:%.2f\t最低成绩为:%.2f\n",b[0],b[N-1]); for(i=0;i<N;i++) p+=b[i]; return p;}void main(){ char a[N][N]; float b[N]; int i; float m; printf("请输入学生姓名及成绩:\n"); for(i=0;i<N;i++) scanf("%s%f",a[i],&b[i]); printf("学生成绩为:\n"); for(i=0;i<N;i++) printf("%10s\t%.2f\n",a[i],b[i]); m=pj(a,b)/N; printf("学生的平均成绩为:%.2f\n",m);}
[解决办法]
=============================================
t[i]=b[i+1];
strcpy(f[j],a[j+1]);
b[i+1]=b[i];
strcpy(a[j+1],a[j]);
b[i]=t[i];
strcpy(a[j],f[j]);
===========================================
1. t[i] 没有被赋初值
2. 没有必要用t[i] 直接用float就好
3. 学生姓名,没有被交换,没有用到中间变量,可用一个char str_tm[N]