学生成绩管理。有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;
}

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
分和总分,并按照平均分从高到低排序,输出每个学生学号和平均分。 以下是实现该功能的C语言代码: ```c #include <stdio.h> #define STUDENT_NUM 5 #define COURSE_NUM 3 // 学生结构体 typedef struct { int id; // 学号 float scores[COURSE_NUM]; // 成绩 float total_score; // 总分 float avg_score; // 平均分 } Student; // 计算学生的总分和平均分 void calculate_scores(Student *student) { float total = 0.0; for (int i = 0; i < COURSE_NUM; i++) { total += student->scores[i]; } student->total_score = total; student->avg_score = total / COURSE_NUM; } // 交换两个学生的位置 void swap(Student *a, Student *b) { Student temp = *a; *a = *b; *b = temp; } int main() { Student students[STUDENT_NUM]; // 从键盘输入学生数据 for (int i = 0; i < STUDENT_NUM; i++) { printf("请输入第%d个学生学号三门成绩:\n", i + 1); scanf("%d", &students[i].id); for (int j = 0; j < COURSE_NUM; j++) { scanf("%f", &students[i].scores[j]); } calculate_scores(&students[i]); } // 按照平均分从高到低排序 for (int i = 0; i < STUDENT_NUM - 1; i++) { for (int j = 0; j < STUDENT_NUM - i - 1; j++) { if (students[j].avg_score < students[j + 1].avg_score) { swap(&students[j], &students[j + 1]); } } } // 输出每个学生学号和平均分 printf("按照平均分从高到低排序后,每个学生学号和平均分如下:\n"); for (int i = 0; i < STUDENT_NUM; i++) { printf("学号:%d,平均分:%.2f\n", students[i].id, students[i].avg_score); } return 0; } ``` 运行程序后,可以依次输入每个学生学号三门成绩,然后输出按照平均分从高到低排序后每个学生学号和平均分。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王观天

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值