用c语言编写本题:补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。 函数接口定义: void sortByChoose(struct Student *pData,int n); 裁判测试程序样例: #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-03-18 14:46:10 浏览: 206
答案如下:
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(p2->score>p->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;
}
}
}
相关问题
c语言编程:利用“选择排序算法“对结构体数组进行排序补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。 函数接口定义: void sortByChoose(struct Student *pData,int n);
好的,我会为你补充函数sortByChoose()的剩余部分。以下是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
int score;
};
void sortByChoose(struct Student *pData, int n) {
int i, j, max_index;
struct Student temp;
for (i = 0; i < n - 1; i++) {
max_index = i;
for (j = i + 1; j < n; j++) {
if (pData[j].score > pData[max_index].score) {
max_index = j;
}
}
if (max_index != i) {
temp = pData[i];
pData[i] = pData[max_index];
pData[max_index] = temp;
}
}
}
int main() {
struct Student stu[5] = {
{"Tom", 89},
{"Jerry", 76},
{"Mike", 92},
{"Mary", 85},
{"John", 78}
};
int i;
printf("Before sorting:\n");
for (i = 0; i < 5; i++) {
printf("%s: %d\n", stu[i].name, stu[i].score);
}
sortByChoose(stu, 5);
printf("\nAfter sorting:\n");
for (i = 0; i < 5; i++) {
printf("%s: %d\n", stu[i].name, stu[i].score);
}
return 0;
}
```
函数sortByChoose()使用选择排序算法,对结构体数组中的元素按照学生成绩(score)进行降序排序。在函数中,我们定义了三个变量:i、j和max_index。i和j用于循环遍历数组,max_index用于存储当前最大值的下标。我们首先将max_index初始化为i,然后在内层循环中查找最大值的下标,并将其存储在max_index中。如果max_index不等于i,说明第i个元素不是当前最大值,需要将其与最大值交换位置。最后,函数执行完毕后,结构体数组stu中的元素就已经按照学生成绩降序排列了。
我希望这个代码能够帮助到你,如果你有任何问题,请随时问我!
用c语言:本题:补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。 函数接口定义: void sortByChoose(struct Student *pData,int n); 裁判测试程序样例: #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
以下是 `sortByChoose()` 函数的代码实现:
```c
void sortByChoose(struct Student *pData, int n) {
struct Student *p1, *p2, temp;
for (p1 = pData; p1 < pData + n - 1; p1++) {
for (p2 = p1 + 1; p2 < pData + n; p2++) {
if (p2->score > p1->score) {
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
}
}
```
这个函数使用选择排序算法对学生成绩进行降序排序,每次找到最大的元素,并将其放到已排序部分的末尾。在这个函数中,我们使用了两个指针 `p1` 和 `p2`,其中 `p1` 指向当前未排序部分的第一个元素,`p2` 则用于遍历未排序部分。如果 `p2` 指向的元素比 `p1` 指向的元素大,那么就交换这两个元素。这样,每一次外层循环结束后,已排序部分的末尾就会出现一个最大的元素。最终,当外层循环结束时,整个数组就会被排序。
阅读全文