本关任务:使用结构体储存学生信息(包括学号,姓名,3
门课程成绩,总分),要求实现对学生信息修改和删除操作,最多50
名学生。
参考结构体第1关相关知识。
根据提示,在右侧编辑器 Begin-End 处补充代码,使用结构体储存学生信息,实现对学生信息修改和删除操作。
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 3
1 Siyu 90 90 90
2 Amy 60 70 94
3 Jack 60 60 98
4 Jack 77 90 60
5 Banana 60 60 40
6 White 60 60 60
7 Pinkman 60 60 60
8 Fring 60 60 70
9 Ehrmantraut 80 63 61
10 Schrader 99 66 100
1 Jack
2 1 100 100 100
3 10
测试输入数据说明: 输入一个 n
,q
,标书下面 n
行则是 n
个学生的信息,再下 q
行则是对应的操作。
1 name //为根据名字查询操作
2 sno num1 num2 num2 //为修改分数操作,修改学号为sno的3门成绩
3 sno //为删除操作
预期输出:
3 Jack 60 60 98 218
4 Jack 77 90 60 227
1 Siyu 100 100 100 300
2 Amy 60 70 94 224
3 Jack 60 60 98 218
4 Jack 77 90 60 227
5 Banana 60 60 40 160
6 White 60 60 60 180
7 Pinkman 60 60 60 180
8 Fring 60 60 70 190
9 Ehrmantraut 80 63 61 204
10 Schrader 99 66 100 265
1 Siyu 100 100 100 300
2 Amy 60 70 94 224
3 Jack 60 60 98 218
4 Jack 77 90 60 227
5 Banana 60 60 40 160
6 White 60 60 60 180
7 Pinkman 60 60 60 180
8 Fring 60 60 70 190
9 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;
}