具体要求如下:
(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;
}