某班有不超过30人(具体人数有键盘输入)参加期末考试,最多不会超过6门(具体门数由键盘输入)。参考例12.7,定义数据类型,用结构体数组做函数参数,编程实现:录入每个学生的学号、姓名、和各科考试成绩,用c语言写程序
时间: 2024-11-22 20:47:21 浏览: 20
在C语言中,我们可以创建一个名为`Student`的结构体来表示学生的信息,并定义一个数组来存储所有学生的数据。首先,我们需要包含必要的头文件,并定义结构体:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体 Student
typedef struct {
int id; // 学号
char name[50]; // 姓名
int scores[6]; // 考试成绩数组,最多6门课
} Student;
// 函数声明,用于录入学生信息
void inputStudents(int num_students, Student students[]);
int main() {
int num_students, max_scores;
printf("请输入班级总人数(不超过30人):");
scanf("%d", &num_students);
printf("请输入每门课程的最大分值:");
scanf("%d", &max_scores);
// 确保数组大小足够
if (num_students > 30) {
num_students = 30;
printf("班级人数超过限制,已调整为30人。\n");
}
// 创建足够大的学生数组
Student* students = (Student*)malloc(num_students * sizeof(Student));
inputStudents(num_students, students); // 调用录入函数
// 其他处理代码...
free(students); // 使用完后记得释放内存
return 0;
}
// 函数实现,录入学生信息
void inputStudents(int num_students, Student students[]) {
for (int i = 0; i < num_students; i++) {
printf("请输入第%d位学生的学号:", i+1);
scanf("%d", &students[i].id);
printf("请输入第%d位学生姓名:", i+1);
fgets(students[i].name, sizeof(students[i].name), stdin); // 注意去掉换行符
students[i].name[strcspn(students[i].name, "\n")] = '\0';
for (int j = 0; j < 6; j++) { // 避免读取超出范围
printf("请输入第%d位学生第%d门课程的成绩:", i+1, j+1);
scanf("%d", &students[i].scores[j]);
}
}
}
```
这个程序会先询问用户班级人数和每门课程的最大分值,然后创建一个`Student`数组并调用`inputStudents`函数录入学生信息。注意,由于题目未明确是否需要检查分数的有效性(如非负整数),这里仅实现了基本的数据录入。
阅读全文