C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名

C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名#include<stdio.h>
#include<string.h>
#define N 3
void main()
{
int i,j,a[N],t;
char b[N];
for(i=0;i<N;i++)
{
scanf("%d\n",&a[i]);
gets(b[i]);
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(a[j]<a[j+1])
{

t=a[j];
a[j]=a[j+1];
a[j+1]=t;
strcpy(p,b[j]);
strcpy(b[j],b[j+1]);
strcpy(b[j+1],p);

}
}

for(i=0;i<N;i++)
printf("%s%d\n",b+i,a[i]);
}这个哪里错了

一维数组 按你理解应该怎么存储多个名字?
一维char是一个连续的字符串 所以你使用b[i]访问他的时候 只能读取或写入一个字符 而名字是有多个字符组成的。
用一维数组表示字符串是比较麻烦的 你可以先定义一个大的char数组
比如 char b[最大名字个数*10]
然后 再
for(int i=0;i<3;i++){
scanf("%s",&b[i*10]);//每一次循环向后移动10个字符位置
}
然后说一下 你gets(b[i]) 函数应该传char* 也就是字符指针 而不是字符 应该是 &b[i]
再就是没有看到声明p变量
最后查一下排序有没有问题吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-27
#include<stdio.h>
#include<string.h>
#define NUM 5
main()
{
int i,j;
char name[NUM][10],stmp[10];
float score[NUM],tmp;
printf("输入姓名和成绩:\n");
for(i=0;i<NUM;i++)
scanf("%s%f",name[i],&score[i]);
for(i=0;i<NUM-1;i++)
for(j=i+1;j<NUM;j++)
if(score[i]<score[j])
{tmp=score[i];
score[i]=score[j];
score[j]=tmp;
strcpy(stmp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],stmp);
}
printf("排序为:\n");
for(i=0;i<NUM;i++)
printf("%.10s%f\n",name[i],score[i]);
}
相似回答