30. 完成sort函数,实现:按照成绩从高到低的顺序输出各学生的信息。

  1. 完成sort函数,实现:按照成绩从高到低的顺序输出各学生的信息。
#include<stdio.h>
#define N 5
struct student
{
    int num;
    char name[20];
    float score;
};
void sort(struct student stu[])
{
    int i,j;
    struct student t;
    for(i=0;i<N-1;i++)
    {
        for(j=i+1;j<N;j++)
        {
            if(stu[i].score<stu[j].score)
            {
                t=stu[i];
                stu[i]=stu[j];
                stu[j]=t;
            }
        }
    }
}
int main()
{
    struct student stu[N];  
    int i;
    printf("请输入所有学生的信息:学号、姓名、成绩:\n");
    for(i=0;i<N;i++)
    {
        scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
    }
    printf("The order is :\n"); 
    sort(stu);
    for(i=0;i<N;i++)
        printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score);
    return 0;
}
下面是用指针和函数实现成绩排序的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT 100 typedef struct { char id[10]; char name[20]; float score; } Student; void sort(Student *students[], int n) { int i, j; Student *temp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (students[i]->score < students[j]->score) { temp = students[i]; students[i] = students[j]; students[j] = temp; } } } } int main() { Student students[MAX_STUDENT]; Student *student_ptrs[MAX_STUDENT]; int i, n; printf("请输入学生数目:"); scanf("%d", &n); for (i = 0; i < n; i++) { printf("请输入第%d个学生的学号、姓名和成绩:", i + 1); scanf("%s %s %f", students[i].id, students[i].name, &students[i].score); student_ptrs[i] = &students[i]; } sort(student_ptrs, n); printf("按成绩高到排序的各学生信息如下:\n"); for (i = 0; i < n; i++) { printf("%s\t%s\t%.1f\n", student_ptrs[i]->id, student_ptrs[i]->name, student_ptrs[i]->score); } return 0; } ``` 代码解释: - 定义一个结构体 `Student`,表示学生信息,包括学号、姓名、成绩。 - 定义一个数组 `students`,用于存储所有学生信息。 - 定义一个指针数组 `student_ptrs`,用于存储所有学生的地址。 - 定义函数 `sort`,用于按成绩高到排序学生信息。该函数接收一个指向指针数组的指针和数组长度。函数内部使用冒泡排序算法实现排序。 - 在 `main` 函数中,首先输入学生数目,然后循环输入每个学生信息,并将学生地址存储到 `student_ptrs` 数组中。 - 调用 `sort` 函数学生信息进行排序。 - 输出排序后的学生信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值