结构体存储学生信息

本关任务:使用结构体储存学生信息(包括学号,姓名,3 门课程成绩,总分),要求实现对学生信息修改和删除操作,最多50名学生。

相关知识

参考结构体第1关相关知识。

编程要求

根据提示,在右侧编辑器 Begin-End 处补充代码,使用结构体储存学生信息,实现对学生信息修改和删除操作。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:

 
  1. 10 3
  2. 1 Siyu 90 90 90
  3. 2 Amy 60 70 94
  4. 3 Jack 60 60 98
  5. 4 Jack 77 90 60
  6. 5 Banana 60 60 40
  7. 6 White 60 60 60
  8. 7 Pinkman 60 60 60
  9. 8 Fring 60 60 70
  10. 9 Ehrmantraut 80 63 61
  11. 10 Schrader 99 66 100
  12. 1 Jack
  13. 2 1 100 100 100
  14. 3 10

测试输入数据说明: 输入一个 nq,标书下面 n 行则是 n 个学生的信息,再下 q 行则是对应的操作。

 
  1. 1 name //为根据名字查询操作
  2. 2 sno num1 num2 num2 //为修改分数操作,修改学号为sno的3门成绩
  3. 3 sno //为删除操作

预期输出:

 
  1. 3 Jack 60 60 98 218
  2. 4 Jack 77 90 60 227
  3. 1 Siyu 100 100 100 300
  4. 2 Amy 60 70 94 224
  5. 3 Jack 60 60 98 218
  6. 4 Jack 77 90 60 227
  7. 5 Banana 60 60 40 160
  8. 6 White 60 60 60 180
  9. 7 Pinkman 60 60 60 180
  10. 8 Fring 60 60 70 190
  11. 9 Ehrmantraut 80 63 61 204
  12. 10 Schrader 99 66 100 265
  13. 1 Siyu 100 100 100 300
  14. 2 Amy 60 70 94 224
  15. 3 Jack 60 60 98 218
  16. 4 Jack 77 90 60 227
  17. 5 Banana 60 60 40 160
  18. 6 White 60 60 60 180
  19. 7 Pinkman 60 60 60 180
  20. 8 Fring 60 60 70 190
  21. 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;
}

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我了解您的请求,您想了解有关于结构存储学生信息的相关知识。 在C语言中,结构是一种用户自定义的数据类型,它可以包含多个不同类型的成员变量。结构可以用来存储和组织相关的数据,如学生信息、员工信息等。 以下是一个示例代码,演示了如何使用结构存储学生信息: ``` #include <stdio.h> // 定义一个结构,用于存储学生信息 struct Student { char name[20]; int age; char gender; float score; }; int main() { // 定义一个学生结构变量 struct Student stu; // 存储学生信息 printf("请输入学生姓名:"); scanf("%s", stu.name); printf("请输入学生年龄:"); scanf("%d", &stu.age); printf("请输入学生性别(M/F):"); scanf(" %c", &stu.gender); printf("请输入学生分数:"); scanf("%f", &stu.score); // 输出学生信息 printf("\n学生信息如下:\n"); printf("姓名:%s\n", stu.name); printf("年龄:%d\n", stu.age); printf("性别:%c\n", stu.gender); printf("分数:%.2f\n", stu.score); return 0; } ``` 在上述代码中,我们定义了一个名为`Student`的结构,它包含四个成员变量:姓名(`name`)、年龄(`age`)、性别(`gender`)和分数(`score`)。然后,我们在主函数中定义了一个`stu`变量,它的类型是`Student`结构,用于存储一个学生信息。接下来,我们使用`scanf`函数获取用户输入的学生信息,并使用`printf`函数输出学生信息。 注意,结构变量的存储大小取决于其成员变量的大小和对齐方式。因此,不同的编译器可能会对结构存储大小进行不同的优化和对齐处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值