SWUST67:学生成绩管理

题目描述

有N个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。从键盘输入N 个
学生数据,要求打印出每个学生三门课的平均成绩,以及平均分最高分学生数据(包括学号、
班级、姓名、三门课成绩,平均分)。

题目描述

1、 定义学生结构体。
2、 用一个函数实现N 个学生数据的输入,用另一个函数负责求每个学生三门课程的平
均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。要求平均分和平均分最
高的学生数据都在主函数中输出。

输入

第一行:N,表示N 个学生。

下面N 行:每行数据包括学号、班级、姓名、三门课成绩。

输出

输出每个学生三门课的平均成绩,以及平均分最高分学生数据(包括学号、班级、姓名、
三门课成绩,平均分)。
格式见下。(四舍五入保留一位小数)

样例输入
4
20070008 software1 wangjun 87 84 76
20070001 science1 lanxin 90 84 83
20070007 software2 wuke 94 87 86
20070003 science4 xuede 90 86 87
样例输出
wangjun 82.3
lanxin 85.7
wuke 89.0
xuede 87.7
20070007 software2 wuke 94.0 87.0 86.0 89.0
完整代码
#include<stdio.h>

#define N 10010

struct stu
{
	char xh[10];
	char cl[10];
	char na[10];
	float cj[3];
	float avg;
}w[N];

void my_cin(int n)
{
	for(int i = 0; i < n; i++)
	{
		scanf("%s %s %s",w[i].xh,w[i].cl,w[i].na);
		for(int j = 0; j < 3; j++)
		{
			scanf("%f",&w[i].cj[j]);
            w[i].avg += w[i].cj[j];
		}
		w[i].avg /= 3;
	}
}

void calc_AvgMAX(int n)
{
	float max_avg = 0;
	int k = 0;
	for(int i = 0; i < n; i++)
	{
		if(w[i].avg > max_avg)
		{
			max_avg = w[i].avg;
			k = i;
		}
	}
	printf("%s %s %s ",w[k].xh,w[k].cl,w[k].na);
	for(int i = 0; i < 3; i++)
	{
		printf("%.1f ",w[k].cj[i]);
	}
	printf("%.1f\n",w[k].avg);
}


int main()
{
	int n;
	scanf("%d",&n);
	my_cin(n);
	for(int i = 0; i < n; i++)
	{
		printf("%s %.1f\n",w[i].na,w[i].avg);
	}
	calc_AvgMAX(n);
	return 0;
}

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1、已知一个链表中存储了若干名学生的信息,每名学生的信息包括:学号、英语成绩、数学成绩、计算机成绩。 现编写一个函数search(),要求对输入的无序学号进行排序,然后采用折半查找方法查找输入学生学号,并输出该学生各科成绩。 2、设计一个学生类(CStudent),它具有私有数据成员是:学号、姓名、数学、外语和计算机课程的成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息 (类声明和成员函数定义分离)。设计一个友元函数,按照成绩从高到低的顺序输出姓名、学号和成绩信息。 3、实现雇员管理,类Employee需存储雇员的姓名。这种信息对于所有雇员(包括Employee的派生类的雇员)是很普遍的。现在假设从雇员类Employee派生出了小时工类HourlyWorker、计件工类PieceWorker、老板类Boss和销售员类CommissionWorker。小时工每周工作40小时,超过40小时部分的报酬是平时的1.5倍;计件工是按生产的工作件数计算报酬的,每件的报酬是固定的,假设他只生成一种类型的工件,因而类PieceWorker的private数据成员是生产的工件数量和每件的报酬;老板每周有固定的薪水;销售员每周有小部分固定的基本工资加上其每周销售额的固定百分比。设计和规划该类体系,并分别产生每个基类及派生类对象,并显示该员工的工资。 4、约瑟夫生死者游戏 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将是被扔下大海的位置。 5、求二叉树上结点的路径 要求在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根节点到给定结点之间的路径。 6、图的操作 (1)写出将一个无向图的邻接矩阵转换成邻接表的算法 (2)设计一个算法,判断无向图G是否连通。若连通则返回1; 返回0。 7、内部排序算法的性能分析 要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动); (3)输出各种算法的排序结果和比较结果。 8.2、通讯录管理系统 编程实现通讯录管理系统,要求该系统能够完成通讯信息的建立、查询、插入、删除等基本功能。程序运行后至少给出下面7个菜单项的选择并分别实现其功能: 0、 通讯录的建立 1、通讯录信息输出 2、 通讯者结点信息的删除 3、通讯者结点信息的查询 4、 通讯者结点信息的插入 5、通讯录信息更改 6、 退出通讯录管理系统 设计的任务要求,通讯录中每个学生的基本信息应包括姓名、地址、电话等基本信息,采用链表存储结构。(复习c语言结构体和链表知识)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值