#include <stdio.h> #include <stdlib.h> // 定义学生信息结构体 struct Student { int id; // 学号 char name[20]; // 姓名 float english; // 英语成绩 float network; // 网络成绩 float c_language; // C语言成绩 float database; // 数据库成绩 float culture_score; // 文化积分 float moral_score; // 德育积分 float comprehensive_score; // 综合积分 }; int main() { int n; // 学生人数 printf("请输入学生人数:"); scanf("%d", &n); // 动态分配内存 struct Student *students = (struct Student*)malloc(n * sizeof(struct Student)); // 输入学生信息 for (int i = 0; i < n; i++) { printf("请输入第%d个学生的信息:\n", i + 1); printf("学号:"); scanf("%d", &students[i].id); printf("姓名:"); scanf("%s", students[i].name); printf("英语成绩:"); scanf("%f", &students[i].english); printf("网络成绩:"); scanf("%f", &students[i].network); printf("C语言成绩:"); scanf("%f", &students[i].c_language); printf("数据库成绩:"); scanf("%f", &students[i].database); printf("德育积分:"); scanf("%f", &students[i].moral_score); // 计算文化积分 students[i].culture_score = (students[i].english + students[i].network + students[i].c_language + students[i].database) / 4; // 计算综合积分 students[i].comprehensive_score = students[i].culture_score * 0.7 + students[i].moral_score * 0.3; } // 冒泡排序,按照综合积分从高到低排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (students[j].comprehensive_score < students[j + 1].comprehensive_score) { struct Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } // 计算获奖学生人数 int first_prize_num = n * 0.02; int second_prize_num = n * 0.08; int third_prize_num = n * 0.15; // 输出获奖学生名单 printf("一等奖学金获得者:\n"); for (int i = 0; i < first_prize_num; i++) { printf("%s\n", students[i].name); } printf("二等奖学金获得者:\n"); for (int i = first_prize_num; i < first_prize_num + second_prize_num; i++) { printf("%s\n", students[i].name); } printf("三等奖学金获得者:\n"); for (int i = first_prize_num + second_prize_num; i < first_prize_num + second_prize_num + third_prize_num; i++) { printf("%s\n", students[i].name); } // 释放内存 free(students); return 0; }对数据结构和变量进一步解释或说明,增加可读性
时间: 2024-04-28 13:19:14 浏览: 81
#include <stdio.h>
4星 · 用户满意度95%
这段代码定义了一个结构体`Student`,用于存储学生的各种信息,包括学号、姓名、成绩等等。通过动态分配内存,程序可以根据用户输入的学生人数创建一个`Student`类型的数组,用于存储所有学生的信息。
在输入学生信息时,程序通过循环逐个输入每一个学生的信息,包括学号、姓名、各科成绩等等。然后程序通过计算文化积分和综合积分来评估每一个学生的综合表现。接下来,程序使用冒泡排序算法按照综合积分从高到低对所有学生进行排序。最后,程序计算出获奖学生的人数,并输出获奖学生的名单。
在代码中,变量`n`表示输入的学生人数,变量`first_prize_num`、`second_prize_num`和`third_prize_num`分别表示一等奖、二等奖和三等奖的获奖人数。而结构体`Student`中的各个变量则分别表示学生的各种信息,例如`id`表示学号,`name`表示姓名,`english`、`network`、`c_language`和`database`分别表示英语、网络、C语言和数据库的成绩,`culture_score`表示文化积分,`moral_score`表示德育积分,`comprehensive_score`表示综合积分。
通过对代码中变量和数据结构的解释,我们可以更加清晰地理解程序的功能和实现过程。
阅读全文