4 按照总成绩排序并输出学生信息

文章提供了一个C语言程序,用于处理学生成绩,包括读取学号和各科成绩,计算总成绩,然后使用冒泡排序按照总成绩从大到小输出。程序中使用了结构体来存储学生的信息,并提到了struct的定义和使用,以及冒泡排序算法的应用。
摘要由CSDN通过智能技术生成

一、题目

输入格式要求同实验3,不必检查学号的重复和成绩的合理性。

输出格式(各项以英文逗号','隔开):

学号1,总成绩1

学号2,总成绩2

学号3,总成绩3

要求:总成绩保留1位小数,并且按总成绩从大到小依次输出。

示例:

输入:

20010,90,89.5,100

20011,88.5,78,92.5

20012,99,89.5,90

输出:

20010,279.5

20012,278.5

20011,259.0

二、代码

#include <stdio.h>    

int main(){
    struct score{
        int xuehao;
        float gaoshu,wuli,yingyu;
        float sum;
    }stu1,stu2,stu3;
    struct score stu[3] =  {stu1,stu2,stu3};
    int i=0,j=0,k=0;
    for(i=0;i<3;i++){
        scanf("%d,%f,%f,%f",&stu[i].xuehao,&stu[i].gaoshu,&stu[i].wuli,&stu[i].yingyu);
        stu[i].sum=stu[i].gaoshu+stu[i].wuli+stu[i].yingyu;
    }
    for(j=0;j<3;j++){
        for(k=0;k<2;k++){
            if(stu[k].sum<stu[k+1].sum){
            struct score temp=stu[k];
            stu[k]=stu[k+1];
            stu[k+1]=temp;
            }
        }
    }
    for(i=0;i<3;i++){
        printf("%d,%.1f\n",stu[i].xuehao,stu[i].sum);
    }
    return 0;
}

三、tips

  1. 本来想用数组的方式搞定,但是发现不行,于是看了雨落俊泉的代码决定学习使用struct结构体

struct结构体

struct即结构体,亦被直接称为“结构”。实际编程时,经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别、成绩以及家庭住址等不同类型的数据。但是,用相关的不同类型的数据来描述一个数据对象会使编程极为不便。因此,C语言提供了一种称为结构体(struct)的数据类型,以描述需要不同类型数据的数据对象。


定义:

1.只有结构体定义

struct stuff{
        char job[20];
        int age;
        float height;
};

2.附加该结构体类型的“结构体变量”的初始化的结构体定义

//直接带变量名wendao
struct stuff{
        char job[20];
        int age;
        float height;
}wendao;  //注意,}后面没有;

对于结构体内部变量的访问,我们可以根据

stu[i].age

注意补上初始化

    struct score stu[3] =  {stu1,stu2,stu3};
2.double类型

要经常使用double而不是float,今天第一次尝试但是忘记在前面改成%d,就苦恼了好一会

3.冒泡排序
    for(j=0;j<3;j++){
        for(k=0;k<2;k++){                        //len-1
            if(stu[k].sum<stu[k+1].sum){
            struct score temp=stu[k];            //第三种定义struct的方法
            stu[k]=stu[k+1];
            stu[k+1]=temp;
            }
        }
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以使用结构体来存储每个学生的信息,包括姓名和三科成绩。然后,你可以计算每个学生总成绩,并将学生按照总成绩从高到低排名输出。 下面是一个示例代码: ```c #include <stdio.h> #include <string.h> #define NUM_STUDENTS 3 #define NUM_SUBJECTS 3 struct student { char name[20]; int scores[NUM_SUBJECTS]; int total_score; }; void calc_total_score(struct student *s) { int i, sum = 0; for (i = 0; i < NUM_SUBJECTS; i++) { sum += s->scores[i]; } s->total_score = sum; } void print_students(struct student *students, int num_students) { int i, j; // 冒泡排序,按总成绩从高到低排名 for (i = 0; i < num_students - 1; i++) { for (j = 0; j < num_students - i - 1; j++) { if (students[j].total_score < students[j + 1].total_score) { struct student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } // 输出排名 for (i = 0; i < num_students; i++) { printf("%s: %d\n", students[i].name, students[i].total_score); } } int main() { struct student students[NUM_STUDENTS]; int i, j; // 输入学生信息和成绩 for (i = 0; i < NUM_STUDENTS; i++) { printf("请输入第%d名学生的姓名:", i + 1); scanf("%s", students[i].name); for (j = 0; j < NUM_SUBJECTS; j++) { printf("请输入%s的第%d科成绩:", students[i].name, j + 1); scanf("%d", &students[i].scores[j]); } calc_total_score(&students[i]); } // 输出排名 print_students(students, NUM_STUDENTS); return 0; } ``` 这个示例代码首先定义了一个 `student` 结构体,包括学生的姓名、三科成绩和总成绩。然后,它定义了两个函数,`calc_total_score` 函数用来计算学生总成绩,`print_students` 函数用来按照总成绩排名输出学生信息。 在 `main` 函数中,它首先使用循环输入每个学生的信息和成绩,并计算每个学生总成绩。然后,它调用 `print_students` 函数输出排名。 希望这个示例代码可以帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值