结构体存储学生信息
2023-12-28 04:25:16
本关任务:使用结构体储存学生信息(包括学号,姓名,3 门课程成绩,总分),要求实现对学生信息修改和删除操作,最多50名学生。
相关知识
参考结构体第1关相关知识。
编程要求
根据提示,在右侧编辑器 Begin-End 处补充代码,使用结构体储存学生信息,实现对学生信息修改和删除操作。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 31 Siyu 90 90 902 Amy 60 70 943 Jack 60 60 984 Jack 77 90 605 Banana 60 60 406 White 60 60 607 Pinkman 60 60 608 Fring 60 60 709 Ehrmantraut 80 63 6110 Schrader 99 66 1001 Jack2 1 100 100 1003 10
测试输入数据说明: 输入一个 n,q,标书下面 n 行则是 n 个学生的信息,再下 q 行则是对应的操作。
1 name //为根据名字查询操作2 sno num1 num2 num2 //为修改分数操作,修改学号为sno的3门成绩3 sno //为删除操作
预期输出:
3 Jack 60 60 98 2184 Jack 77 90 60 2271 Siyu 100 100 100 3002 Amy 60 70 94 2243 Jack 60 60 98 2184 Jack 77 90 60 2275 Banana 60 60 40 1606 White 60 60 60 1807 Pinkman 60 60 60 1808 Fring 60 60 70 1909 Ehrmantraut 80 63 61 20410 Schrader 99 66 100 2651 Siyu 100 100 100 3002 Amy 60 70 94 2243 Jack 60 60 98 2184 Jack 77 90 60 2275 Banana 60 60 40 1606 White 60 60 60 1807 Pinkman 60 60 60 1808 Fring 60 60 70 1909 Ehrmantraut 80 63 61 204
预期输出数据说明: 每次修改操作则输出全部的学生信息,查询操作则输出查询的学生的信息。
第一阶段:准备工作
- 定义全局变量: 定义了一个全局整数变量
n,表示学生的数量。 - 定义结构体: 定义了一个名为
student的结构体,用于存储学生的信息,包括学号、姓名、语文成绩、数学成绩、英语成绩和总分。
第二阶段:函数定义
- 查找学生信息:?
void chaxun(struct student stu[], char name_1[])函数用于查找具有特定姓名的学生并打印其信息。它通过循环遍历所有学生,并使用strcmp函数比较姓名来实现。 - 更新学生信息:?
void update(struct student stu[], int neo, int a, int b, int c)函数用于更新特定学生的信息。它通过循环遍历所有学生,并检查学号是否匹配来实现。如果匹配,则更新语文、数学和英语成绩,并重新计算总分。 - 删除学生信息:?
void delet(struct student stu[], int neo)函数用于删除具有特定学号的学生。它通过循环遍历所有学生,并检查学号是否匹配来实现。如果匹配,则将该学生的信息覆盖为下一个学生的信息,从而实现删除效果。
第三阶段:主函数?main()
- 输入学生数量和操作数量: 从标准输入读取学生的数量
n和操作数量q。 - 输入学生信息: 根据学生数量
n循环读取每个学生的信息并存储在stu数组中。每个学生的信息包括学号、姓名、语文成绩、数学成绩和英语成绩。 - 执行操作: 根据操作数量
q循环执行一系列操作。每个操作由一个数字fack标识。根据不同的操作执行相应的功能,如查找学生信息、更新学生信息或删除学生信息。
注意事项
- 在函数
chaxun中,for循环的条件是i < n-1,这意味着它只检查到倒数第二个学生。这可能是为了防止数组越界,但可能会导致最后一个学生的信息不被处理。 - 在函数
delet中,删除特定学生后,循环并没有减少,因此可能会导致未删除的学生的信息被多次处理。此外,由于数组的大小没有改变,所以最后一个学生的信息可能不会被正确处理。 - 该程序没有对输入进行错误检查(例如检查学号或姓名的有效性)。在实际应用中,这是很重要的。
#include<stdio.h>
#include<string.h>
int n;
struct student
{
int num;
char name[20];
int chinese;
int math;
int english;
int sum;
};
void chaxun(struct student stu[], char name_1[])
{
for (int i = 0; i < n-1; i++)
{
if (strcmp(stu[i].name, name_1) == 0)
printf("%d %s %d %d %d %d\n", stu[i].num, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english,stu[i].sum);
}
}
void update(struct student stu[],int neo,int a,int b,int c)
{
for (int i = 0; i < n; i++)
{
if (stu[i].num == neo)
{
stu[i].chinese=a;
stu[i].math=b;
stu[i].english=c;
stu[i].sum = stu[i].math + stu[i].english + stu[i].chinese;
}
}
}
void delet(struct student stu[],int neo)
{
for(int i=0;i<n;i++)
{
if(stu[i].num>=neo)
stu[i]=stu[i+1];
}
}
int main()
{
int q;
struct student stu[50];
scanf("%d %d", &n, &q);
for (int i = 0; i < n; i++)
{
scanf("%d %s %d %d %d", &stu[i].num, stu[i].name, &stu[i].chinese, &stu[i].math, &stu[i].english);
stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
}
while (q--)
{
int fack;
char name_1[20];
scanf("%d",&fack);
if (fack == 1)
{
scanf("%s", name_1);
chaxun(stu, name_1);
}
else if (fack == 2)
{ int neo,a,b,c;
scanf("%d %d %d %d",&neo,&a,&b,&c);
update(stu,neo,a,b,c);
for(int i=0;i<n;i++)
printf("%d %s %d %d %d %d\n", stu[i].num, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english,stu[i].sum);
}
else if (fack == 3)
{
int neo;
scanf("%d",&neo);
delet(stu,neo);
for(int i=0;i<n-1;i++)
printf("%d %s %d %d %d %d\n", stu[i].num, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english,stu[i].sum);
}
}
return 0;
}
文章来源:https://blog.csdn.net/ggbzwz/article/details/135258436
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!