用c语言的指向结构体指针 ,从键盘输入3\n\n名学生信息,包含学号、姓名、三门课程成绩
时间: 2023-05-31 15:19:20 浏览: 203
### 回答1:
好的,以下是用C语言的指向结构体指针,从键盘输入3名学生信息,包含学号、姓名、三门课程成绩的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 3
struct student {
int id;
char name[20];
float score[3];
};
int main() {
struct student *ptr;
int i;
ptr = (struct student*) malloc(MAX_STUDENTS * sizeof(struct student));
for (i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &(ptr+i)->id);
printf("姓名:");
scanf("%s", (ptr+i)->name);
printf("三门课程成绩:");
scanf("%f %f %f", &(ptr+i)->score[0], &(ptr+i)->score[1], &(ptr+i)->score[2]);
}
printf("\n学生信息如下:\n");
for (i = 0; i < MAX_STUDENTS; i++) {
printf("学号:%d\n", (ptr+i)->id);
printf("姓名:%s\n", (ptr+i)->name);
printf("三门课程成绩:%.2f %.2f %.2f\n", (ptr+i)->score[0], (ptr+i)->score[1], (ptr+i)->score[2]);
}
free(ptr);
return 0;
}
```
这段代码中,我们定义了一个结构体 `student`,包含学号、姓名和三门课程成绩。然后我们使用指向结构体的指针 `ptr`,动态分配了一个大小为 `MAX_STUDENTS` 的结构体数组。
接着,我们使用 `for` 循环,从键盘输入每个学生的信息,包括学号、姓名和三门课程成绩。注意,我们使用了指向结构体的指针 `ptr` 来访问每个学生的信息。
最后,我们使用 `for` 循环,输出每个学生的信息,包括学号、姓名和三门课程成绩。
最后,我们使用 `free` 函数释放了动态分配的内存。
希望这个示例能够帮助你理解如何使用指向结构体的指针从键盘输入学生信息。
### 回答2:
首先,我们需要定义一个学生信息的结构体,包含学号、姓名以及三门课程的成绩:
```c
struct student {
int id;
char name[20];
float score[3];
};
```
接下来,我们需要从键盘读入三个学生的信息,并以指向结构体的指针的形式保存:
```c
struct student stu[3];
struct student *p = stu;
int i, j;
for (i = 0; i < 3; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &(p + i)->id);
printf("姓名:");
scanf("%s", (p + i)->name);
printf("三门课程成绩:");
for (j = 0; j < 3; j++) {
scanf("%f", &(p + i)->score[j]);
}
}
```
这里我们使用了指针运算符来访问结构体成员,其中`p`指向`stu`数组的首元素,因此`(p + i)->id`即为第`i+1`个学生的学号。
最后,我们可以输出每个学生的信息:
```c
for (i = 0; i < 3; i++) {
printf("学生%d的信息:\n", i + 1);
printf("学号:%d\n", (p + i)->id);
printf("姓名:%s\n", (p + i)->name);
printf("三门课程成绩:");
for (j = 0; j < 3; j++) {
printf("%.2f ", (p + i)->score[j]);
}
printf("\n");
}
```
上述代码的输出结果如下:
```
请输入第1个学生的信息:
学号:1001
姓名:张三
三门课程成绩:90 88 92
请输入第2个学生的信息:
学号:1002
姓名:李四
三门课程成绩:80 90 85
请输入第3个学生的信息:
学号:1003
姓名:王五
三门课程成绩:78 85 90
学生1的信息:
学号:1001
姓名:张三
三门课程成绩:90.00 88.00 92.00
学生2的信息:
学号:1002
姓名:李四
三门课程成绩:80.00 90.00 85.00
学生3的信息:
学号:1003
姓名:王五
三门课程成绩:78.00 85.00 90.00
```
### 回答3:
指向结构体指针在C语言中是非常常用的数据类型,它可以描述复杂的数据结构,并且方便地对其进行操作和管理。本题的要求是从键盘上输入3名学生的信息,包含学号、姓名、三门课程成绩,可以用指向结构体指针的方式来实现。
首先,需要定义一个结构体类型来描述学生信息,例如:
```c
typedef struct student {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 三门课程成绩
} Student;
```
然后,可以定义一个指向结构体的指针数组,用来存储三名学生的信息,例如:
```c
Student students[3];
Student *p = students;
```
此时,p指向了数组的第一个元素,也就是第一名学生的信息结构体。接下来,可以用循环逐个输入每个学生的信息:
```c
for (int i = 0; i < 3; i++) {
printf("请输入第%d个学生的信息(学号、姓名、三门课程成绩):\n", i+1);
scanf("%d %s %f %f %f", &(p+i)->id, (p+i)->name, &(p+i)->score[0], &(p+i)->score[1], &(p+i)->score[2]);
}
```
在每次循环中,先输出提示信息,接着使用scanf函数输入学生的学号、姓名和三门课程的成绩,注意用&p->id和&(p+i)->score[0]等形式来获取结构体中各个成员的地址,这里的i相当于数组下标,用i来偏移数组指针来获得每个学生的信息结构体。最后,循环结束后,三名学生的信息已经存储在了指针数组中。
如果需要打印输出这三名学生的信息,也可以使用循环遍历整个指针数组,并且使用指向结构体的指针来访问每个结构体的成员,例如:
```c
for (int i = 0; i < 3; i++) {
printf("第%d个学生: 学号=%d, 姓名=%s, 课程1=%f, 课程2=%f, 课程3=%f\n",
i+1, (p+i)->id, (p+i)->name, (p+i)->score[0], (p+i)->score[1], (p+i)->score[2]);
}
```
这样就能够输出每个学生的信息。需要注意的是,在输入和输出时,对于指针变量的运算和成员访问,需要使用->运算符,而不是.运算符。另外,在开发过程中需要谨慎处理指针的内存分配、释放等问题,避免出现内存泄漏或野指针等问题。
阅读全文