用c语言解决有 n(n<=10) 个学生,学习 m(m<=10) 门课程,已知所有学生全部课程的成绩,要求输出每个学生的学号、最高成绩对应的课程代号和成绩。
时间: 2024-12-29 15:35:41 浏览: 5
在C语言中,你可以使用结构体来存储学生信息,包括学号和成绩。然后,对于每个学生,你需要遍历他们的所有成绩,找到每门课程的最高分及其对应课程代号。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h> // 为了使用malloc动态分配内存
// 定义一个结构体表示学生和课程信息
typedef struct {
int student_id; // 学生ID
char course_code[10]; // 课程代号
int score; // 成绩
} StudentCourse;
void print_max_scores(int n, int m, StudentCourse** courses) {
for (int i = 0; i < n; i++) {
StudentCourse max_score_course;
max_score_course.student_id = courses[i]->student_id;
max_score_course.score = courses[i]->score;
for (int j = 0; j < m; j++) {
if (courses[i]->score > max_score_course.score && courses[i]->course_code[j] != '\0') { // 比较当前课程分数是否更高
max_score_course.course_code = courses[i]->course_code;
max_score_course.score = courses[i]->score;
}
}
printf("学生 %d 的最高成绩课程为:%s, 成绩:%d\n", max_score_course.student_id, max_score_course.course_code, max_score_course.score);
}
}
int main() {
int n, m;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入课程数:");
scanf("%d", &m);
// 动态分配内存
StudentCourse** students = (StudentCourse**)malloc(sizeof(StudentCourse*) * n);
for (int i = 0; i < n; i++) {
students[i] = (StudentCourse*)malloc(sizeof(StudentCourse));
students[i]->student_id = i + 1; // 假设学号从1开始
printf("请输入学生%d的所有课程成绩,格式如:1 A 95 2 B 88 ...": i+1);
scanf("%d", &students[i]->score);
// 假设输入格式为 "课程代号 分数",并假设最多10门课程
char course_code[10];
for (int j = 0; j < m; j++) {
scanf("%s %d", course_code, &students[i]->score); // 读取并存储成绩
students[i]->course_code[j] = course_code[j];
}
}
// 打印结果
print_max_scores(n, m, students);
// 清理内存
for (int i = 0; i < n; i++) {
free(students[i]);
}
free(students);
return 0;
}
```
这个程序首先接收用户输入的学生数量和课程数量,然后创建一个二维数组`students`存储学生的课程信息。接着遍历每个学生,找出最高分及其对应的课程代号。
阅读全文