有n个学生,每个学生的数据包括学号(num)、姓名(name[20])、性别(sex)、年龄(age), 以及三门课程的成绩(score[3])。要求:在main()函数中输入这些学生的这些数据, 然

本文介绍了一个学生信息管理系统的设计与实现,该系统使用C语言编写,能够输入并管理学生的个人信息及成绩,计算总分与平均分,并找出成绩最优和最差的学生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

有n个学生,每个学生的数据包括学号(num)、姓名(name[20])、性别(sex)、年龄(age),
以及三门课程的成绩(score[3])。要求:在main()函数中输入这些学生的这些数据,
然后设计一个函数count()来计算每个学生的总分和平均分,
最后,打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)

如果假定成绩最好和最差的人的个数不一定唯一,
程序应该如何修改才能完成求出所有最好和最差者,
以及输出它们。

思路:

首先这里需要输入的学生的数据类型这么多,可以考虑使用结构体struct,然后再主函数里面

利用结构体,输入学生的基本信息。再创建一个count 函数,通过传地址和传值两种方式将我们的结构体内的数据通过count进行处理,

然后再对结构体数组的数据,通过averag值的大小,把结构体数组内的数据经进行从小打大进行排列处理,所以

最大的数,必然是最后一个,那么只要和最后一个average平均数相等的,都是最大值,

同样的道理,那么排列后的结构体数组,第一个必然时最小值,那么此时只要,结构体数组里面有一个数与最小值相等,

则可以求出最小值与最大值的方法(当然你也可以用其他的方法),然后再输出最大值与最小值的同学信息即可!

实现代码:

#include<stdio.h>
#include<string.h>
#define N 100
struct student
{
	int sno;
	char name[20];
	char sex[4];
	int age;
	int score[3];
	int sum;
	float average;
};
void count(struct student *,int  );
void count(struct student *st,int num )
{
	int i,j;
	struct student temp; 
	float max=0,min=0;
	for(i=0;i<num;i++)
	{
		st[i].sum=st[i].score[0]+st[i].score[1]+st[i].score[2];
		st[i].average=st[i].sum/3.0;
	}
	printf("\n\t学号\t   姓名  \t性别\t语文\t英语\t高数\t总分\t平均分\n");
	for(i=0;i<num;i++)
	{
		printf("\t%d %s        %s\t%d\t%d\t%d\t%d\t%f\n",st[i].sno,st[i].name,st[i].sex,st[i].score[0],st[i].score[1],st[i].score[2],st[i].sum,st[i].average);
	 }
	 for(i=0;i<num-1;i++)
	 {
	 	for(j=i+1;j<num;j++)
	 	{
	 		if(st[i].average>st[j].average)
	 		{
	 			temp=st[i];
	 			st[i]=st[j];
	 			st[j]=temp;
			 }
		 }
	 }
	printf("\n\t学号\t   姓名  \t性别\t语文\t英语\t高数\t总分\t平均分\n");
	for(i=0;i<num;i++)
	{
		printf("\t%d %s        %s\t%d\t%d\t%d\t%d\t%f\n",st[i].sno,st[i].name,st[i].sex,st[i].score[0],st[i].score[1],st[i].score[2],st[i].sum,st[i].average);
	 }
	int max_size=0; 
	int min_size=0;
	for(i=0;i<num;i++)
	{
		if(st[num-1].average==st[i].average)
		{
			++max_size;
		}
		if(st[0].average==st[i].average)
		{
			++min_size; 
		}
	}
	printf("Max_size=%d\n",max_size);
	printf("Min_size=%d\n",min_size);
	for(i=0;i<num;i++)
	{
		if(st[i].average==st[num-1].average)
		{
			printf("\n\t学号\t   姓名  \t性别\t语文\t英语\t高数\t总分\t平均分\n");
			printf("\t%d %s        %s\t%d\t%d\t%d\t%d\t%f\n",st[i].sno,st[i].name,st[i].sex,st[i].score[0],st[i].score[1],st[i].score[2],st[i].sum,st[i].average);
		}
		if(st[i].average==st[0].average)
		{
			printf("\n\t学号\t   姓名  \t性别\t语文\t英语\t高数\t总分\t平均分\n");
			printf("\t%d %s        %s\t%d\t%d\t%d\t%d\t%f\n",st[i].sno,st[i].name,st[i].sex,st[i].score[0],st[i].score[1],st[i].score[2],st[i].sum,st[i].average);
		}
	}
	getch();
	return;
}
int main()
{
	int i;
	struct student st[N];
	int num1;//需要输入的学生人数
	printf("请输入录入人数:\n");
	scanf("%d",&num1);
	if(N<num1)
	{
		num1=N;
		printf("最大人数为N=100!\n");
	 }
	for(i=0;i<num1;i++)
	{
		printf("姓名:");scanf("%s",st[i].name);
		printf("学号:");scanf("%d",&st[i].sno);getchar();
		printf("性别:");scanf("%s",&st[i].sex);
		printf("语文成绩:");scanf("%3d",&st[i].score[0]);
		printf("英语四级成绩:");scanf("%3d",&st[i].score[1]);
		printf("高数成绩:");scanf("%3d",&st[i].score[2]);
	}
	count(st,num1);
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值