问题 B: 结构体:计算学生平均分

时间限制 : 1.000 sec  内存限制 : 64 MB

题目描述

定义一个学生结构体,含学号(字符型)、姓名、2门课程的成绩。从键盘输入3个学生的信息,计算并输出每个学生的平均成绩。

输入

按学号、姓名、成绩1、成绩2的顺序输入学生信息

输出

输出每个学生的平均分

样例输入 Copy
101
Xue
87
90
102
Lin
98
92
103
Liu
89
83
样例输出 Copy
ave[0]=88.5
ave[1]=95.0
ave[2]=86.0
#include <stdio.h>
struct Student {
    char id[10];
    char name[20];
    float score1;
    float score2;
};

int main() {
    struct Student students[3];
    float averages[3];
    for (int i = 0; i < 3; i++) {
        scanf("%s %s %f %f", students[i].id, students[i].name, &students[i].score1, &students[i].score2);
    }
    for (int i = 0; i < 3; i++) {
        averages[i] = (students[i].score1 + students[i].score2) / 2;
    }
    for (int i = 0; i < 3; i++) {
        printf("ave[%d]=%.1f\n", i, averages[i]);
    }
    return 0;
}

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,请看下面的代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生信息结构体 struct student { char name[20]; // 学生姓名 char id[10]; // 学生学号 float score[3]; // 学生三科成绩 float total_score; // 学生总分 float avg_score; // 学生平均分 }; // 比较函数,用于快速排序 int cmp(const void *a, const void *b) { struct student *s1 = (struct student *)a; struct student *s2 = (struct student *)b; return (int)(s2->total_score - s1->total_score); } int main() { int i, j; struct student stu[30]; // 定义结构体类型的数组,存储学生信息 // 输入学生信息 for (i = 0; i < 30; i++) { printf("请输入第%d个学生姓名:", i + 1); scanf("%s", stu[i].name); printf("请输入第%d个学生的学号:", i + 1); scanf("%s", stu[i].id); printf("请输入第%d个学生的三科成绩:", i + 1); scanf("%f%f%f", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); // 计算学生的总分和平均分 stu[i].total_score = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].avg_score = stu[i].total_score / 3.0; } // 按照学生的总分从高到低排序 qsort(stu, 30, sizeof(struct student), cmp); // 输出学生信息 printf("按总分排序如下:\n"); printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t总分\t平均分\n"); for (i = 0; i < 30; i++) { printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].name, stu[i].id, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].total_score, stu[i].avg_score); } return 0; } ``` 这段代码中,我们首先定义了一个名为 `student` 的结构体类型,包含了学生姓名、学号、三科成绩以及总分和平均分等属性。然后,我们定义了一个长度为 30 的 `student` 类型的数组,用于存储 30 个学生的信息。 接下来,我们利用循环语句逐个输入每个学生的信息,并且计算每个学生的总分和平均分。最后,我们利用 `qsort` 函数对学生信息数组按照总分从高到低进行排序,并且输出每个学生姓名、学号、三科成绩以及总分和平均分等信息。 需要注意的是,在 `qsort` 函数中,我们使用了一个自定义的比较函数 `cmp`,用于比较两个学生的总分大小。该函数中,我们首先将输入的两个参数强制转换为 `student` 类型的指针,然后比较它们的总分大小即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值