从键盘输入n个学生的学号、英语期中成绩和期末成绩,计算并输出这n个学生的 成绩表,包括学生的学号、英语期中成绩和期末成绩及平均成绩(要求利用指向结构体类型 的指针实现)。
时间: 2024-09-24 13:07:40 浏览: 66
为了实现这个功能,首先我们需要定义一个结构体来存储学生的信息,比如`Student`,包含学号(`ID`)、期中成绩(`midterm`)和期末成绩(`final`). 然后我们创建一个动态数组,通过指向结构体类型的指针来存储这些学生数据。下面是一个简单的步骤说明:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct {
int ID;
float midterm;
float final;
} Student;
void input_students(Student* students, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d位学生的学号、期中成绩和期末成绩:\n", i + 1);
scanf("%d%f%f", &students[i].ID, &students[i].midterm, &students[i].final);
}
}
void calculate_average(Student* students, int n) {
if (n == 0) {
printf("没有学生数据。\n");
return;
}
float total_avg = 0;
for (int i = 0; i < n; i++) {
total_avg += students[i].midterm + students[i].final;
}
float avg = total_avg / (float)n;
printf("学生信息表:\n");
for (int i = 0; i < n; i++) {
printf("学号: %d, 期中成绩: %.2f, 期末成绩: %.2f, 平均成绩: %.2f\n",
students[i].ID, students[i].midterm, students[i].final, avg);
}
}
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
// 动态分配内存
Student* student_data = malloc(n * sizeof(Student));
if (!student_data) {
printf("内存分配失败!\n");
return 1;
}
input_students(student_data, n);
calculate_average(student_data, n);
// 释放内存
free(student_data);
return 0;
}
```
阅读全文