用c语言定义一维结构体数组,用于存放N个学生的信息(信息包括:学号、姓名、三门课的考试成绩和总分),输入学生的学号、姓名和三门课的考试成绩。
时间: 2024-12-17 21:55:07 浏览: 13
在C语言中,你可以通过定义一个结构体来表示一个学生的信息,然后定义一个结构体数组来存储多个学生的数据。首先,我们需要定义一个名为`Student`的结构体,包含学号(`id`)、姓名(`name`)以及三门课程的成绩(`scores[]`)和总分(`total_score`):
```c
#include <stdio.h>
// 定义结构体
typedef struct {
int id;
char name[50];
float scores[3]; // 通常假设每门课程分数不超过100
float total_score; // 总分默认为0
} Student;
// 动态分配结构体数组
void input_students(int N) {
Student students[N]; // 定义一个大小为N的一维结构体数组
for (int i = 0; i < N; i++) {
printf("请输入第%d位学生的学号:", i+1);
scanf("%d", &students[i].id);
printf("请输入第%d位学生姓名:", i+1);
fgets(students[i].name, sizeof(students[i].name), stdin); // 使用fgets避免换行符
printf("请输入第%d位学生三门课程的成绩(逗号隔开):", i+1);
scanf("%f,%f,%f", &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算总分
students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];
// 检查输入并处理浮点数溢出问题(这里仅作示例)
if (students[i].total_score < 0 || students[i].total_score > 300) {
printf("总分异常,请检查!\n");
}
}
// 打印学生信息
for (int i = 0; i < N; i++) {
printf("学生 %d: 学号:%d, 姓名:%s, 成绩:%f, 总分:%f\n",
i+1, students[i].id, students[i].name, students[i].scores[0], students[i].total_score);
}
}
int main() {
int N;
printf("请输入学生人数:");
scanf("%d", &N);
input_students(N);
return 0;
}
```
在这个程序中,用户会被提示输入每个学生的相关信息,并将数据存入`students`数组。注意,为了防止从`scanf`读取到多余的输入,如换行符,我们使用了`fgets`函数。
阅读全文