C语言 数组存放名字并排序?

怎么把多个人的英文名和对应的分数放进数组 然后再进行排序。如下
姓名 分数
zhangsan 15
lisi 20
分数我可以放进数组 也可以排序 但是名字我放进去 取不出来。

#include<stdio.h>

#include<string.h>

#include<math.h>

struct st{//这是自定义的一个结构体,下面是两个成员; 

char a[22];//名字储存在a数组中; 

int b;    //分数储存在b中; 

};

int main()

{//struct st 不要忘了,否则c[111]就是一个没有定义的无效数组; 

struct st c[111];//这是对结构体的引用;c数组中每个单位都包括上面的两个成员; 

int n,t;

char d[111];

scanf("%d",&n);//输入n位人数; 

getchar();//在输入一个数字之后按回车再输入字符,不加getchar();后面输出的字符会丢失;进而编译错误;别问我为什么知道,都在“泪”里; 

for(int i=0;i<n;i++)//循环赋值 

{

scanf("%s%d",c[i].a,&c[i].b);

}

for(int i=0;i<n;i++)//先来一冒泡排序; 

{

for(int j=0;j<n-i-1;j++)

{

if(c[j].b>c[j+1].b)//比较结构体成员b的大小; 

{

t=c[j].b;

c[j].b=c[j+1].b;//上面条件成立,数值交换; 

c[j+1].b=t;

strcpy(d,c[j].a);//strcpy(a,b)字符复制粘贴函数,b→a;字符串不能用=赋值; 

strcpy(c[j].a,c[j+1].a);//上面if成立成绩b对应的名字交换; 

strcpy(c[j+1].a,d);

}

}

}

printf("\n");

for(int i=0;i<n;i++)//循环打印排序后的人名和成绩; 

{

printf("%s %d\n",c[i].a,c[i].b);

}

return 0;

 } 

根据你的描述,这是大致代码;可能有些瑕疵,你根据原题再做修改,希望能帮到你;望采纳;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-23

冒泡排序,分数放进数组,名字放进二维字符串,字符串的第一维对应数组的下标,排序时各进行一次交换,交换可以通过一个缓冲的字符串t[]来实现,使用strcpy(类似于变量的赋值),譬如说

char s[2][20];

char t[20];

s[0] = "abc", s[1] = "abcd";

strcpy(t, s[0]);

strcpy(s[0], s[1]);

strcpy(s[1], t);

需要头文件#include<string.h>

本回答被网友采纳
第2个回答  2020-02-23

可以用结构体数组

相似回答