问题:学生信息包含学号、姓名、性别、年龄、电话信息,要求设一个结构体用于存储n个学生信息,实现学生信息的输入和指定某个学生信息的输出,按照学号顺序来排列
时间: 2023-12-22 11:13:45 浏览: 82
好的,这是一个关于结构体的问题。为了实现存储n个学生信息,我们可以定义一个结构体来存储每个学生的信息,然后定义一个数组来存储所有学生的信息。
以下是一个示例结构体和数组的定义:
```c
struct student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char phone[12]; // 电话号码
};
struct student stu_arr[100]; // 定义一个数组,最多存储100个学生信息
```
接下来,我们可以编写函数来实现学生信息的输入和指定某个学生信息的输出。具体实现可以参考下面的代码:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体
struct student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char phone[12]; // 电话号码
};
// 定义数组
struct student stu_arr[100];
// 定义函数,用于输入学生信息
void input_student_info(int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &stu_arr[i].id);
printf("姓名:");
scanf("%s", stu_arr[i].name);
printf("性别:");
scanf(" %c", &stu_arr[i].gender);
printf("年龄:");
scanf("%d", &stu_arr[i].age);
printf("电话号码:");
scanf("%s", stu_arr[i].phone);
}
}
// 定义函数,用于按照学号顺序排列学生信息
void sort_student_info(int n) {
struct student temp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (stu_arr[i].id > stu_arr[j].id) {
temp = stu_arr[i];
stu_arr[i] = stu_arr[j];
stu_arr[j] = temp;
}
}
}
}
// 定义函数,用于输出指定学生的信息
void output_student_info(int id, int n) {
int flag = 0;
for (int i = 0; i < n; i++) {
if (stu_arr[i].id == id) {
printf("学号:%d\n", stu_arr[i].id);
printf("姓名:%s\n", stu_arr[i].name);
printf("性别:%c\n", stu_arr[i].gender);
printf("年龄:%d\n", stu_arr[i].age);
printf("电话号码:%s\n", stu_arr[i].phone);
flag = 1;
break;
}
}
if (flag == 0) {
printf("没有找到该学生的信息!\n");
}
}
int main() {
int n;
printf("请输入学生的个数:");
scanf("%d", &n);
input_student_info(n); // 输入学生信息
sort_student_info(n); // 排序学生信息
int id;
printf("请输入要查询的学生的学号:");
scanf("%d", &id);
output_student_info(id, n); // 输出指定学生的信息
return 0;
}
```
注意,在输入字符串时,可以使用scanf函数的%s格式说明符,但要注意输入的字符串长度,不要超出数组的范围。另外,在输入字符时,可以使用scanf函数的%c格式说明符,并在前面加一个空格,以消除输入缓冲区中的回车符。
阅读全文