怎么把多个人的英文名和对应的分数放进数组 然后再进行排序。如下
姓名 分数
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;
}
根据你的描述,这是大致代码;可能有些瑕疵,你根据原题再做修改,希望能帮到你;望采纳;
冒泡排序,分数放进数组,名字放进二维字符串,字符串的第一维对应数组的下标,排序时各进行一次交换,交换可以通过一个缓冲的字符串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>