用指针结构输入输出三位学生学号,姓名
时间: 2023-11-23 09:32:15 浏览: 56
好的,可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int id;
char name[20];
};
int main() {
struct student stu[3];
struct student *p = stu;
// 输入学生信息
for (int i = 0; i < 3; i++) {
printf("请输入第 %d 位学生的学号和姓名:\n", i+1);
scanf("%d %s", &p->id, p->name);
p++;
}
// 输出学生信息
p = stu;
for (int i = 0; i < 3; i++) {
printf("第 %d 位学生的学号为 %d,姓名为 %s\n", i+1, p->id, p->name);
p++;
}
return 0;
}
```
在这段代码中,我们首先定义了一个名为 `student` 的结构体,其中包含学生的学号和姓名。接着,在 `main` 函数中,我们定义了一个包含三个学生信息的 `stu` 数组,并将指向该数组的指针 `p` 初始化为 `stu` 的地址。然后,我们通过循环依次输入每个学生的信息,并将指针 `p` 向后移动。最后,再通过循环输出每个学生的信息,同样需要将指针 `p` 向后移动。
相关问题
用指针循环结构输入输出三位学生学号,姓名
好的,可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int id;
char name[20];
};
int main() {
struct student stu[3];
struct student *p = stu;
// 输入学生信息
for (p = stu; p < stu + 3; p++) {
printf("请输入第 %d 位学生的学号和姓名:\n", p - stu + 1);
scanf("%d %s", &p->id, p->name);
}
// 输出学生信息
for (p = stu; p < stu + 3; p++) {
printf("第 %d 位学生的学号为 %d,姓名为 %s\n", p - stu + 1, p->id, p->name);
}
return 0;
}
```
在这段代码中,我们同样定义了一个名为 `student` 的结构体,其中包含学生的学号和姓名。接着,在 `main` 函数中,我们定义了一个包含三个学生信息的 `stu` 数组,并将指向该数组的指针 `p` 初始化为 `stu` 的地址。然后,我们通过循环依次输入每个学生的信息,循环条件为 `p < stu + 3`,也就是 `p` 指向的地址在 `stu` 和 `stu + 3` 之间。在循环体中,我们先输出提示信息,然后使用 `scanf` 函数输入学生信息。由于 `p` 是指针类型,所以我们可以使用箭头运算符 `->` 访问结构体成员。最后,再通过循环输出每个学生的信息,同样需要使用指针 `p`,并将循环条件和循环体中的内容稍作修改即可。
编写一串C语言代码定义结构体Student,然后从终端上输入以下五个学生的学号,姓名,成绩并输出
### 回答1:
int main() {
struct Student{
int id;
char name[20];
float score;
};
int i;
struct Student stu[5];
for(i=0;i<5;i++){
scanf("%d%s%f",&stu[i].id,stu[i].name,&stu[i].score);
}
for(i=0;i<5;i++){
printf("学号:%d\n姓名:%s\n成绩:%.2f\n",stu[i].id,stu[i].name,stu[i].score);
}
return 0;
}
### 回答2:
下面是一个用C语言编写的程序,定义了一个结构体Student,并从终端上输入五个学生的学号、姓名和成绩,并输出。
```c
#include <stdio.h>
// 定义结构体Student
struct Student {
int id;
char name[50];
float score;
};
int main() {
// 声明一个包含五个学生的数组
struct Student students[5];
// 从终端上输入每个学生的学号、姓名和成绩
for (int i = 0; i < 5; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &students[i].id);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", students[i].name);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%f", &students[i].score);
}
// 输出每个学生的学号、姓名和成绩
for (int i = 0; i < 5; i++) {
printf("第%d个学生的学号:%d\n", i + 1, students[i].id);
printf("第%d个学生的姓名:%s\n", i + 1, students[i].name);
printf("第%d个学生的成绩:%.2f\n\n", i + 1, students[i].score);
}
return 0;
}
```
以上代码中,我们首先定义了一个结构体Student,包含学号(id)、姓名(name)和成绩(score)三个成员变量。然后,在main函数中声明了一个包含五个学生的数组。接着,通过一个for循环,从终端上依次输入每个学生的学号、姓名和成绩,存储到数组中的相应位置。最后,再通过另一个for循环,依次输出每个学生的学号、姓名和成绩。
请注意,在输入学生的姓名时,我们使用%s来读取一个字符串,同时没有使用&操作符,因为name本身就是一个字符数组,而不是指针。另外,为了确保成绩的精度,我们使用了%.2f来控制输出的浮点数只保留两位小数。
希望以上代码能够满足你的需求。
### 回答3:
以下是一个用C语言编写的代码片段,实现了定义结构体Student,并从终端上输入五个学生的学号,姓名和成绩,并输出:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体Student
struct Student {
int id;
char name[20];
float score;
};
int main() {
struct Student students[5]; // 定义一个存放五个学生对象的数组
// 从终端上输入五个学生的学号,姓名和成绩
for (int i = 0; i < 5; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &students[i].id);
fflush(stdin); // 清空输入缓冲区
printf("请输入第%d个学生的姓名:", i + 1);
fgets(students[i].name, sizeof(students[i].name), stdin);
students[i].name[strcspn(students[i].name, "\n")] = 0; // 去掉姓名中的换行符
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%f", &students[i].score);
fflush(stdin); // 清空输入缓冲区
}
// 输出五个学生的学号,姓名和成绩
printf("\n五位学生的信息如下:\n");
for (int i = 0; i < 5; i++) {
printf("学号:%d\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("成绩:%.2f\n\n", students[i].score);
}
return 0;
}
```
这段代码首先定义了一个结构体Student,其中包含学号(id)、姓名(name)和成绩(score)三个成员。接着在main函数中,定义了一个大小为5的Student类型的数组students,用于存放五个学生的信息。
然后通过for循环从终端上输入每个学生的学号、姓名和成绩,并保存到对应的students数组元素中。在输入姓名时,使用fgets和strcspn函数来处理输入带有换行符的字符串。
最后,通过另一个for循环,输出五个学生的学号、姓名和成绩。输出时使用printf函数来格式化输出。
编译并运行这段代码后,你可以在终端上依次输入五个学生的学号、姓名和成绩。然后程序会将这些信息存储在students数组中,并输出出来。