C语言程序编写,假设有某班同学如下信息,学号,姓名,外语、专业课1、专业课z这三门课的成锁,总成绩以及挂科数。要求实现下列功能: 1.全班同学的信息录入。2.拔总成锁从高到低排名,输出的2名同学的学号和总分。3.技外语成绩排名,输出该课程成缋不及格的同学的姓名和课程分数。4.输出挂科最多的学生信息(学号、姓名、挂科数)。假如生科最多的同学有 M 名,如都挂了科,则应输出这 M 名同学的信息。
时间: 2024-03-25 08:40:58 浏览: 130
C语言——建立一个链表表示学生的信息(学号、姓名、分数)
4星 · 用户满意度95%
好的,以下是基于C语言的代码实现:
```
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 100 // 最大学生数目
#define NUM_COURSE 3 // 课程数目
struct Student {
char id[20]; // 学号
char name[20]; // 姓名
int score[NUM_COURSE]; // 三门课程成绩
int total; // 总成绩
int fail; // 挂科数
};
// 全班同学的信息录入
void input_students(struct Student students[], int num_students) {
for (int i = 0; i < num_students; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("外语成绩:");
scanf("%d", &students[i].score[0]);
printf("专业课1成绩:");
scanf("%d", &students[i].score[1]);
printf("专业课2成绩:");
scanf("%d", &students[i].score[2]);
students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2]; // 计算总成绩
students[i].fail = 0;
for (int j = 0; j < NUM_COURSE; j++) { // 计算挂科数
if (students[i].score[j] < 60) {
students[i].fail++;
}
}
}
}
// 拔总成锁从高到低排名,输出的2名同学的学号和总分
void rank_students(struct Student students[], int num_students) {
// 冒泡排序
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - i - 1; j++) {
if (students[j].total < students[j + 1].total) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// 输出前两名
printf("总成绩排名前两名的学生为:\n");
for (int i = 0; i < 2; i++) {
printf("学号:%s,总成绩:%d\n", students[i].id, students[i].total);
}
}
// 技外语成绩排名,输出该课程成缋不及格的同学的姓名和课程分数
void rank_course(struct Student students[], int num_students, int course) {
// 筛选出不及格的同学
struct Student fail_students[MAX_STUDENT];
int num_fail = 0;
for (int i = 0; i < num_students; i++) {
if (students[i].score[course] < 60) {
fail_students[num_fail] = students[i];
num_fail++;
}
}
// 冒泡排序
for (int i = 0; i < num_fail - 1; i++) {
for (int j = 0; j < num_fail - i - 1; j++) {
if (fail_students[j].score[course] < fail_students[j + 1].score[course]) {
struct Student temp = fail_students[j];
fail_students[j] = fail_students[j + 1];
fail_students[j + 1] = temp;
}
}
}
// 输出
printf("技外语成绩不及格的同学为:\n");
for (int i = 0; i < num_fail; i++) {
printf("姓名:%s,课程分数:%d\n", fail_students[i].name, fail_students[i].score[course]);
}
}
// 输出挂科最多的学生信息(学号、姓名、挂科数)
void max_fail(struct Student students[], int num_students) {
// 计算每个学生的挂科数
for (int i = 0; i < num_students; i++) {
students[i].fail = 0;
for (int j = 0; j < NUM_COURSE; j++) {
if (students[i].score[j] < 60) {
students[i].fail++;
}
}
}
// 找出挂科数最多的同学
int max_fail_num = 0; // 最多的挂科数
for (int i = 0; i < num_students; i++) {
if (students[i].fail > max_fail_num) {
max_fail_num = students[i].fail;
}
}
// 输出信息
printf("挂科最多的学生为:\n");
for (int i = 0; i < num_students; i++) {
if (students[i].fail == max_fail_num) {
printf("学号:%s,姓名:%s,挂科数:%d\n", students[i].id, students[i].name, students[i].fail);
}
}
}
int main() {
struct Student students[MAX_STUDENT];
int num_students;
printf("请输入学生人数:");
scanf("%d", &num_students);
input_students(students, num_students);
rank_students(students, num_students);
rank_course(students, num_students, 0);
max_fail(students, num_students);
return 0;
}
```
这个程序可以实现你所需要的四个功能,你可以根据自己的需要进行修改和完善。
阅读全文