给你个思路,将每个输入的个人信息判断一下,分别录入两个结构体数组,
再将两个结构体数组分别冒泡排序,分别输出
在你的代码上改了下,有好多可以优化的地方,
例如可以将冒泡排序封装成一个函数
给代码给你参考一下
#include
#include
struct student{
char name[20]; //姓名
char sex[10]; //性别
int age; //年龄
};
int main()
{
int i,j,n;
int countM=0,countF=0;
struct student s1;
printf("Input n:");
scanf("%d",&n);
struct student boy[n+1]; //分别定义两个结构体数组
struct student girl[n+1];
for(i=1;i<=n;i++){
scanf("%s%s%d",s1.name,s1.sex,&s1.age);
if(strcmp(s1.sex,"boy")==0){ //男生存在男生的结构体数组中,女生同理
strcpy(boy[countM].name,s1.name);
strcpy(boy[countM].sex,s1.sex);
boy[countM].age=s1.age;
countM++; //统计男生的个数(后面排序用到)
}
if (strcmp(s1.sex,"girl")==0) {
strcpy(girl[countF].name,s1.name);
strcpy(girl[countF].sex,s1.sex);
girl[countF].age=s1.age;
countF++;
}
}
for ( i=0;i
for (j=0;j
if (boy[j].age>boy[j+1].age){
struct student tem;
strcpy(tem.name,boy[j].name);
strcpy(tem.sex,boy[j].sex);
tem.age=boy[j].age;
strcpy(boy[j].name,boy[j+1].name);
strcpy(boy[j].sex,boy[j+1].sex);
boy[j].age=boy[j+1].age;
strcpy(boy[j+1].name,tem.name);
strcpy(boy[j+1].sex,tem.sex);
boy[j+1].age=tem.age;
}
}
}
for ( i=0;i
for ( j=0;j
if (girl[j].age>girl[j+1].age){
struct student tem;
strcpy(tem.name,girl[j].name);
strcpy(tem.sex,girl[j].sex);
tem.age=girl[j].age;
strcpy(girl[j].name,girl[j+1].name);
strcpy(girl[j].sex,girl[j+1].sex);
girl[j].age=girl[j+1].age;
strcpy(girl[j+1].name,tem.name);
strcpy(girl[j+1].sex,tem.sex);
girl[j+1].age=tem.age;
}
}
}
for (i=0;i
printf ("%s ",boy[i].name);
}
printf ("\n");
for (i=0;i
printf ("%s ",girl[i].name);
}
return 0;