#include<stdio.h> #include<stdlib.h> #define N 10 struct Student { int num; int score; }; void sortByChoose(struct Student *pData,int n); int main(void) { struct Student data[10],*p; int i; for(p=data,i=0;i<N;i++) { scanf("%d %d",&p->num,&p->score); p++; } sortByChoose(data,N); for (p=data,i=0;i<N;i++) { printf("%2d-%-5d", p->num, p->score); p++; } return 0; } void sortByChoose(struct Student *pData,int n) { struct Student *p1,*p2,*p; int num, score,i,j; for(p1=pData;p1<pData+n-1;p1++) { /* 请在这里填写答案 */ } } 输入样例: 29 90 15 80 87 55 65 84 35 80 33 55 44 79 99 80 89 80 41 55 输出样例: 29-90 65-84 15-80 35-80 99-80 89-80 44-79 87-55 33-55 41-55
时间: 2024-01-15 19:05:26 浏览: 41
以下是`sortByChoose`函数的完整实现过程:
```c
void sortByChoose(struct Student *pData, int n) {
struct Student *p1, *p2, *p;
int num, score, i, j;
for (p1 = pData; p1 < pData + n - 1; p1++) {
p = p1;
for (p2 = p1 + 1; p2 < pData + n; p2++) {
if (p->score < p2->score) {
p = p2;
}
}
if (p != p1) {
num = p1->num;
score = p1->score;
p1->num = p->num;
p1->score = p->score;
p->num = num;
p->score = score;
}
}
}
```
在实现过程中,我们使用了选择排序的思想,每次从未排序的部分中选择一个最小的元素,放到已排序的末尾。这里的选择排序是基于分数的降序排列。
在`main`函数中,我们首先读取输入数据,并将它们存储在`data`数组中。然后,调用`sortByChoose`函数对`data`数组进行排序。最后,我们遍历`data`数组,输出排序后的结果。
注意,`printf`函数中的格式化字符串`"%2d-%-5d"`表示输出一个两位宽度的整数(如果不足两位,则在前面补空格),然后输出一个连字符`-`,最后输出一个五位宽度的整数(如果不足五位,则在后面补空格)。
阅读全文