学生成绩管理。有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩

 具体要求如下:

(1)    从键盘输入5个学生数据,用结构体数组实现;

(2)打印出每个学生三门课的平均成绩,用函数和指针实现;

(3)打印出每门课程平均分,用函数和指针实现;

(4)打印出最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分),用函数和指针实现。

上代码,打字太累了,会秃头的;

#define _CRT_SECURE_NO_WARNINGS
//Author-王散
#include<stdio.h>
struct Student{
	int studentid;
	char studentclass[20];
	char name[50];
	struct Stuperf{
		int mathperf;
		int chineseperf;
		int englishperf;
	};
}studentdata[100], * pointstudent;

double printstuaver(struct Student *pointstudent)//打印出每个学生三门课的平均成绩,用函数和指针实现;
{
	int sum = 0;
	double adv = 0;
	sum = (*pointstudent).mathperf + (*pointstudent).chineseperf + (*pointstudent).englishperf;
	adv = sum / 3;
	return adv;
}

void stuaverage(struct Student* pointstudent,int n) //打印出每门课程平均分,用函数和指针实现;
{
	int i = 0,math=0,chinese=0,eng=0;
	for (i = 0; i < n; i++)
	{
		math= math+(*(pointstudent+i)).mathperf;
		chinese = chinese + (*(pointstudent + i)).chineseperf;
		eng = eng + (*(pointstudent + i)).englishperf;
	}
	printf("\n数学的总平均成绩为:%d\n", math/n);
	printf("\n语文的总平均成绩为:%d\n", chinese/n);
	printf("\n英语的总平均成绩为:%d\n", eng/n);

}

void maxstudentdata(struct Student* pointstudent,int n)
{
	int s=0,j=0,mixstu=0;
	double istuaver = 0, jstuaver = 0, max = 0,temp=0;
	max=printstuaver(pointstudent+0);
	for (s = 1; s < n; s++)
	{
		 jstuaver = printstuaver(pointstudent + s);
          if (max < jstuaver)
			{
				max = jstuaver;
				mixstu = s;
			}
	}
    printf("\n最高分学生的姓名是:%s\n", (*(pointstudent + mixstu)).name);
	printf("\n%s的学号是:%d\n", (*(pointstudent + mixstu)).name,(*(pointstudent + mixstu)).studentid);
	printf("\n%s的班级是:%s\n", (*(pointstudent + mixstu)).name,(*(pointstudent + mixstu)).studentclass);
	printf("\n该学生数学成绩是:%d\n该学生语文成绩是:%d\n", (*(pointstudent + mixstu)).mathperf, (*(pointstudent + mixstu)).chineseperf);
	printf("\n该学生英语成绩是:%d\n", (*(pointstudent + mixstu)).englishperf);
	printf("\n%s的平均分是:%.3lf\n", (*(pointstudent + mixstu)).name,max);
}

int main()
{
	int i = 0, n = 0;
		double adv=0;
	printf("您要输入几个学生的数据=>>");
	scanf("%d", &n);
	
	for (i = 0; i <n; i++)//从键盘输入5个学生数据,用结构体数组实现;
	{
		printf("请您输入第%d个学生数据:\n",i+1);

		printf("\n学号:");
		scanf("%d", &studentdata[i].studentid);

		printf("\n班级:");
		scanf("%s", &studentdata[i].studentclass);
		getchar();

		printf("\n姓名:");
		scanf("%s", &studentdata[i].name);
		getchar();

		printf("\n数学成绩:");
		scanf("%d", &studentdata[i].mathperf);

		printf("\n语文成绩:");
		scanf("%d", &studentdata[i].chineseperf);

		printf("\n英语成绩:");
		scanf("%d", &studentdata[i].englishperf);
	}//二维数组会出现向自定义函数传址不过去的问题
	
	for (i = 0; i < n; i++)
	{
		adv=printstuaver(&studentdata[i]);//调用实现计算平均成绩的功能,且用数组和函数,结构体实现
		printf("\n%s的平均成绩为:%.3lf\n", studentdata[i].name, adv);//printf("\n");//二维数组的话会出现向自定义函数传址不过去的问题//真服了,二维数组怎么就会出错,无语!!!!!
	}
	stuaverage(&studentdata,n);//调用实现计算并且打印平均成绩的功能,且用数组和函数,结构体实现
	printf("\n");

	maxstudentdata(&studentdata,n);
	return 0;
}

  • 8
    点赞
  • 19
    收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王观天

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值