解题思路:
使用
注意事项:

//此题有坑!

//1.测试数据有多组!!!!

//2.数据点2猜测包含有100个char的名字,因此name需要分配101的空间


参考代码:


#include<stdio.h>

#include<stdlib.h>

#include<stdbool.h> 

#include<string.h>

typedef struct Person

{

    char name[101]; //注意

    int age;

    int score;

}person;


void SelectSort(person* p,int quantity);

void Swap(person* p1, person* p2);


int main()

{

    int quantity;

while(scanf("%d",&quantity) != EOF)

    {

person* p = (person*)malloc(quantity * sizeof(person));

for(int i=0; i<quantity; i++)

{

scanf("%s %d %d", p[i].name, &p[i].age, &p[i].score);

}

SelectSort(p,quantity);

for(int i=0; i<quantity; i++)

{

printf("%s %d %d\n", p[i].name, p[i].age, p[i].score);

}

}

    return 0;

}


void SelectSort(person* p,int quantity)

{

for(int i=0; i<quantity; i++)

{

for(int j=i+1; j<quantity; j++)

{

bool isSwitch = false;      //此处不直接交换,而是使用flag,增强可读性与简洁性

if(p[i].score > p[j].score)

{

isSwitch = true;

}

else if(p[i].score == p[j].score)

{

int isAFirst = strcmp(p[i].name, p[j].name);    //strcmp('a','b') < 0 

if(isAFirst > 0)

{

isSwitch = true;

}

else if(0 == isAFirst)

{

if(p[i].age > p[j].age)

{

isSwitch = true;

}

}

}

if(isSwitch)

{

Swap(&p[i], &p[j]);    //此处应理解一维数组中的元素不能直接用作指针

}

}

}


}


void Swap(person *p1, person *p2)    //对交换进行封装,便于理解

{

person temp = *p1;        //对于结构体,直接使用解引用符,对值复制即可

*p1 = *p2;

*p2 = temp;

return;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论