用结构体写一个学生信息录入系统

 要实现的功能:录入学生的姓名,年龄,分数。并对学生的分数由低到高进行排序,最后输出。

        

        那我们一步一步来,先写一个录入。

        从这里就可以看出我们结构体的优点(面对一个复杂的集合,有时只需要一个变量来存储,不需要多个变量

声明:这里为了讲解方便,写成伪代码的形式,完整代码我会放在最后

struct student             //定义一个类型
{
	char name[100];        //注意:一定要定义为数组
	int age;				
	double score;
};
    //输入学生信息
    int num;
	printf("学生人数:");
	scanf("%d", &num);
	struct student* p = (struct student*)malloc(num*sizeof(struct student));    //确定数组
    int i;
	for (i = 0; i < num; i++)
	{
		printf("输入第%d个学生信息\n", i + 1);
		printf("name=");
		scanf("%s", p[i].name);      //这里不用加取地址符,因为由第六行可知,name是数组名,是数组的首个元素的地址
		printf("age=");
		scanf("%d", &p[i].age);
		printf("score=");
		scanf("%lf",&p[i].score);
	}

        接下来开始第二个阶段--------排序

        这里我们就用最简单方便的冒泡排序

//排序(冒泡排序,降序,score)
	int j;
	for (i = 0; i < num-1; i++)
	{
		for (j = 0; j < num - 1 - i; j++)
		{
			struct student t;          //注意:这里的类型一定要一致
			if (p[j].score < p[j + 1].score)
			{
				t = p[j];              //注意:这里交换的是结构体而不是结构体内的成员,否则就张冠李戴了
				p[j] = p[j + 1];
				p[j + 1] = t;
			}
		}
	}

这里有一个注意点,交换时是整个结构体进行交换,而不是结构体成员交换。这里我在注释里也写明了。

最后第三阶段-----输出

//输出学生信息
	for (i = 0; i < num; i++)
	{
		printf("第%d个学生信息是:\n", i + 1);
		printf("name=%s\n", p[i].name);
		printf("age=%d\n", p[i].age);
		printf("score=%.2lf\n", p[i].score);
		printf("\n");
	}

如果一开始上来就写代码,可能会写出很多不必要的bug和错误的思路。但是如果我们把问题拆成几段,就会容易许多,步步为营。

把大象装进冰箱分三步:第一步,打开冰箱;第二步,把大象装进去;第三步,把冰箱门关上。

最后我把完整的代码放在下面,给大家参考

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>
struct student             //定义一个类型
{
	char name[100];        //注意:一定要定义为数组
	int age;				
	double score;
};
int main()
{
	int num;
	printf("学生人数:");
	scanf("%d", &num);
	struct student* p = (struct student*)malloc(num*sizeof(struct student));    //确定数组
	
	//输入学生信息
	int i;
	for (i = 0; i < num; i++)
	{
		printf("输入第%d个学生信息\n", i + 1);
		printf("name=");
		scanf("%s", p[i].name);      //这里不用加取地址符,因为由第六行可知,name是数组名,是数组的首个元素的地址
		printf("age=");
		scanf("%d", &p[i].age);
		printf("score=");
		scanf("%lf",&p[i].score);
	}

	//排序(冒泡排序,降序,score)
	int j;
	for (i = 0; i < num-1; i++)
	{
		for (j = 0; j < num - 1 - i; j++)
		{
			struct student t;          //注意:这里的类型一定要一致
			if (p[j].score < p[j + 1].score)
			{
				t = p[j];              //注意:这里交换的是结构体而不是结构体内的成员,否则就张冠李戴了
				p[j] = p[j + 1];
				p[j + 1] = t;
			}
		}
	}

	//输出学生信息
	for (i = 0; i < num; i++)
	{
		printf("第%d个学生信息是:\n", i + 1);
		printf("name=%s\n", p[i].name);
		printf("age=%d\n", p[i].age);
		printf("score=%.2lf\n", p[i].score);
		printf("\n");
	}
	return 0;
}

  • 6
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值