C语言定义并创建一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息并以顺序结构存储; (2)逐个显示学生表中所有学生的相关信息; (3)根据姓名进行查找,返回此学生的学号和成绩; (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩)(5)给定一个学生信息,插入到表中指定的位置; (6)删除指定位置的学生记录; (7)统计表中学生个数
时间: 2023-06-02 11:02:06 浏览: 101
定义一个包含学生信息(学号,姓名,成绩)的顺序表
#include <stdio.h>
#include <string.h>
#define MAXLEN 20
#define MAXSIZE 100
typedef struct student {
int id; // 学号
char name[MAXLEN]; // 姓名
float score; // 成绩
} Student;
typedef struct table {
Student data[MAXSIZE]; // 存储学生信息的数组
int length; // 学生信息数组的长度
} Table;
// 根据指定学生个数,逐个输入学生信息并以顺序结构存储
void create_table(Table *t) {
printf("请输入学生个数:");
scanf("%d", &(t->length));
printf("请输入学生信息(学号 姓名 成绩):\n");
for (int i = 0; i < t->length; i++) {
scanf("%d %s %f", &(t->data[i].id), t->data[i].name, &(t->data[i].score));
}
}
// 逐个显示学生表中所有学生的相关信息
void display_table(Table t) {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < t.length; i++) {
printf("%d\t%s\t%.1f\n", t.data[i].id, t.data[i].name, t.data[i].score);
}
}
// 根据姓名进行查找,返回此学生的学号和成绩
void search_table(Table t, char *name, int *id, float *score) {
for (int i = 0; i < t.length; i++) {
if (strcmp(t.data[i].name, name) == 0) {
*id = t.data[i].id;
*score = t.data[i].score;
return;
}
}
printf("没有找到该学生\n");
}
// 根据指定的位置可返回相应的学生信息
void get_table(Table t, int pos, int *id, char *name, float *score) {
if (pos < 0 || pos >= t.length) {
printf("位置无效\n");
return;
}
*id = t.data[pos].id;
strcpy(name, t.data[pos].name);
*score = t.data[pos].score;
}
// 给定一个学生信息,插入到表中指定的位置
void insert_table(Table *t, int pos, int id, char *name, float score) {
if (pos < 0 || pos > t->length) {
printf("位置无效\n");
return;
}
if (t->length == MAXSIZE) {
printf("表已满\n");
return;
}
for (int i = t->length - 1; i >= pos; i--) {
t->data[i+1] = t->data[i];
}
t->data[pos].id = id;
strcpy(t->data[pos].name, name);
t->data[pos].score = score;
t->length++;
}
// 删除指定位置的学生记录
void delete_table(Table *t, int pos) {
if (pos < 0 || pos >= t->length) {
printf("位置无效\n");
return;
}
for (int i = pos; i < t->length - 1; i++) {
t->data[i] = t->data[i+1];
}
t->length--;
}
// 统计表中学生个数
void count_table(Table t) {
printf("学生个数:%d\n", t.length);
}
int main() {
Table t;
create_table(&t);
display_table(t);
int id;
float score;
char name[MAXLEN];
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search_table(t, name, &id, &score);
printf("%s的学号为%d,成绩为%.1f\n", name, id, score);
int pos;
printf("请输入要获取信息的学生位置:");
scanf("%d", &pos);
get_table(t, pos, &id, name, &score);
printf("%d位置的学生信息为:%d %s %.1f\n", pos, id, name, score);
int new_id;
float new_score;
printf("请输入要插入的学生信息(学号 姓名 成绩):");
scanf("%d %s %f", &new_id, name, &new_score);
printf("请输入要插入的位置:");
scanf("%d", &pos);
insert_table(&t, pos, new_id, name, new_score);
display_table(t);
printf("请输入要删除的学生位置:");
scanf("%d", &pos);
delete_table(&t, pos);
display_table(t);
count_table(t);
return 0;
}
阅读全文