试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并输出成绩表。
时间: 2023-05-31 08:17:53 浏览: 307
### 回答1:
可以定义一个结构体,包含学号、数学期中成绩和数学期末成绩三个成员变量。然后定义一个指向该结构体的指针数组,长度为3,用于存储三个学生的信息。程序流程如下:
1. 定义结构体
```
struct student {
int id; // 学号
float midterm_score; // 数学期中成绩
float final_score; // 数学期末成绩
};
```
2. 定义指针数组
```
struct student *students[3];
```
3. 输入学生信息
```
for (int i = 0; i < 3; i++) {
students[i] = (struct student *)malloc(sizeof(struct student)); // 动态分配内存
printf("请输入第%d个学生的学号、数学期中成绩和数学期末成绩:", i+1);
scanf("%d%f%f", &(students[i]->id), &(students[i]->midterm_score), &(students[i]->final_score));
}
```
4. 计算平均成绩并输出成绩表
```
printf("学号\t数学期中成绩\t数学期末成绩\t平均成绩\n");
for (int i = 0; i < 3; i++) {
float avg_score = (students[i]->midterm_score + students[i]->final_score) / 2;
printf("%d\t%.1f\t\t%.1f\t\t%.1f\n", students[i]->id, students[i]->midterm_score, students[i]->final_score, avg_score);
}
```
完整代码如下:
```
#include <stdio.h>
#include <stdlib.h>
struct student {
int id; // 学号
float midterm_score; // 数学期中成绩
float final_score; // 数学期末成绩
};
int main() {
struct student *students[3];
for (int i = 0; i < 3; i++) {
students[i] = (struct student *)malloc(sizeof(struct student)); // 动态分配内存
printf("请输入第%d个学生的学号、数学期中成绩和数学期末成绩:", i+1);
scanf("%d%f%f", &(students[i]->id), &(students[i]->midterm_score), &(students[i]->final_score));
}
printf("学号\t数学期中成绩\t数学期末成绩\t平均成绩\n");
for (int i = 0; i < 3; i++) {
float avg_score = (students[i]->midterm_score + students[i]->final_score) / 2;
printf("%d\t%.1f\t\t%.1f\t\t%.1f\n", students[i]->id, students[i]->midterm_score, students[i]->final_score, avg_score);
}
return 0;
}
```
### 回答2:
题目要求我们利用指向结构体的指针编写一个程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并输出成绩表。那么首先我们需要定义一个学生结构体,包含学号、数学期中成绩和数学期末成绩。定义如下:
```
struct Student {
int id; // 学号
float midScore; // 期中成绩
float finalScore; // 期末成绩
};
```
然后,我们需要定义一个包含三个学生结构体的数组,用来存储三个学生的信息。定义如下:
```
struct Student students[3];
```
接着,我们可以利用指向结构体的指针来输入学生信息,具体步骤如下:
```
struct Student *p;
for (int i = 0; i < 3; i++) {
p = &students[i];
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &p->id);
printf("请输入第%d个学生的数学期中成绩:", i + 1);
scanf("%f", &p->midScore);
printf("请输入第%d个学生的数学期末成绩:", i + 1);
scanf("%f", &p->finalScore);
}
```
接下来,我们可以利用指向结构体的指针来计算每个学生的平均成绩,并将结果输出成绩表。具体步骤如下:
```
printf("学号\t期中成绩\t期末成绩\t平均成绩\n");
for (int i = 0; i < 3; i++) {
p = &students[i];
float avgScore = (p->midScore + p->finalScore) / 2;
printf("%d\t%.2f\t\t%.2f\t\t%.2f\n", p->id, p->midScore, p->finalScore, avgScore);
}
```
最后,完整的程序如下:
```
#include <stdio.h>
struct Student {
int id; // 学号
float midScore; // 期中成绩
float finalScore; // 期末成绩
};
int main() {
struct Student students[3];
struct Student *p;
for (int i = 0; i < 3; i++) {
p = &students[i];
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &p->id);
printf("请输入第%d个学生的数学期中成绩:", i + 1);
scanf("%f", &p->midScore);
printf("请输入第%d个学生的数学期末成绩:", i + 1);
scanf("%f", &p->finalScore);
}
printf("学号\t期中成绩\t期末成绩\t平均成绩\n");
for (int i = 0; i < 3; i++) {
p = &students[i];
float avgScore = (p->midScore + p->finalScore) / 2;
printf("%d\t%.2f\t\t%.2f\t\t%.2f\n", p->id, p->midScore, p->finalScore, avgScore);
}
return 0;
}
```
这样就完成了题目要求的程序。
### 回答3:
本题要求用指向结构体的指针实现输入三个学生的学号、数学期中和期末成绩,并计算平均成绩,并输出成绩表。首先,我们需要定义一个学生结构体:
struct Student{
char id[10]; //学号
int math_mid; //数学期中成绩
int math_final; //数学期末成绩
double math_avg; //数学平均成绩
};
接下来,我们需要定义三个学生的指针变量,并分别从键盘输入他们的学号、数学期中成绩和数学期末成绩,再计算他们的平均成绩:
int main(){
struct Student *pstu[3]; //定义三个学生指针
int i;
//从键盘输入学生信息
for(i = 0; i < 3; i++){
pstu[i] = (struct Student*)malloc(sizeof(struct Student)); //动态分配内存
printf("请依次输入第%d个学生的学号、数学期中成绩和数学期末成绩:", i+1);
scanf("%s %d %d", pstu[i]->id, &(pstu[i]->math_mid), &(pstu[i]->math_final));
pstu[i]->math_avg = (pstu[i]->math_mid + pstu[i]->math_final) / 2.0; //计算平均成绩
}
//输出成绩表
printf("学号\t数学期中成绩\t数学期末成绩\t数学平均成绩\n");
for(i = 0; i < 3; i++){
printf("%s\t%d\t%d\t%.2f\n", pstu[i]->id, pstu[i]->math_mid, pstu[i]->math_final, pstu[i]->math_avg);
}
//释放动态分配的内存
for(i = 0; i < 3; i++){
free(pstu[i]);
}
return 0;
}
上述程序中,我们首先定义了三个学生指针变量pstu[3],然后利用动态内存分配函数malloc为每个学生结构体分配内存。接着,通过scanf函数从键盘输入每个学生的学号、数学期中成绩和数学期末成绩,并通过计算求出其平均成绩。最后利用printf函数输出成绩表,并通过for循环释放动态分配的内存。