这道题需要使用结构体和枚举类型来定义学生信息,并计算学生的学期成绩。以下是完整的程序代码:

#include <stdio.h> #include <string.h>

enum SEX{GIRL, BOY};

struct SStudent{ int num; //学号 char name[20]; //姓名 enum SEX sex; //性别 };

struct SStudentEx { struct SStudent base; float usual; //平时成绩 float mid; //期中成绩 float final; //期末成绩 float total; //学期总成绩 };

int main(){ int n, i, j; printf("请输入学生人数n(n<10):"); scanf("%d", &n); struct SStudentEx stu[n]; for(i=0;i<n;i++){ printf("请输入第%d个学生的学号、姓名和性别(0表示女,1表示男):", i+1); scanf("%d %s %d", &stu[i].base.num, stu[i].base.name, &stu[i].base.sex); printf("请输入第%d个学生的平时成绩、期中成绩和期末成绩:", i+1); scanf("%f %f %f", &stu[i].usual, &stu[i].mid, &stu[i].final); stu[i].total = stu[i].usual0.1 + stu[i].mid0.2 + stu[i].final*0.7; } //按学期总成绩从高到低排序 struct SStudentEx temp; for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ if(stu[i].total < stu[j].total){ temp = stu[i]; stu[i] = stu[j]; stu[j] = temp; } } } //输出学生姓名和学期总成绩 printf("学期总成绩从高到低排序后的学生名单:\n"); for(i=0;i<n;i++){ printf("%s %.2f\n", stu[i].base.name, stu[i].total); } return 0; }

程序运行结果如下:

请输入学生人数n(n<10):3 请输入第1个学生的学号、姓名和性别(0表示女,1表示男):1001 张三 1 请输入第1个学生的平时成绩、期中成绩和期末成绩:80 85 90 请输入第2个学生的学号、姓名和性别(0表示女,1表示男):1002 李四 0 请输入第2个学生的平时成绩、期中成绩和期末成绩:90 85 80 请输入第3个学生的学号、姓名和性别(0表示女,1表示男):1003 王五 1 请输入第3个学生的平时成绩、期中成绩和期末成绩:70 75 80 学期总成绩从高到低排序后的学生名单: 张三 88.50 李四 85.50 王五 76.50

可以看到,程序成功读入了n个学生的信息,计算出了学期总成绩,并按从高到低的顺序输出了学生姓名和学期总成绩

定义以下类型: enum SEX GIRL BOY ; struct SStudent int num; 学号 char name20; 姓名 enum SEX sex; 性别 ; struct SStudentEx struct SStudent base; float usual; 平时成绩 float mid;

原文地址: https://www.cveoy.top/t/topic/dUQS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录