题目:
3、写一个程序,定义一个学生结构体,至少要含4个数据项,其中有一项用来保存学生成绩。用此结构体存储班级上的所有学生信息(真实)。要求写一个程序,至少含有四个函数,分别实现:(40分)
(1)输入学生信息
(2)输出学生信息
(3)求出班上最高分、最低分和平均分
(4)显示最高分、最低分同学和成绩大于平均分的所有学生信息。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[10];
char xuehao[12];
char phone[12];
int score;
}StuDent;
void input(StuDent *T,int n)//输入函数
{
int i;
printf("输入:姓名,学号,电话和成绩(用空格隔开)\n");
for(i=0;i<n;i++)
scanf("%s%s%s%d",T[i].name,T[i].xuehao,T[i].phone,&T[i].score);
}
void output(StuDent *T,int n)//输出函数
{
int i;
for(i=0;i<n;i++)
{
printf("%s\t%s\t%s\t%d\n",T[i].name,T[i].xuehao,T[i].phone,T[i].score);
}
}
float func(StuDent *T,int n,int *max1,int *min1)//找出最大最小值和求出平均值并返回的函数
{
int max=-999,min=999,sum=0;
int i,j;
float average;
for(j=0;j<n;j++)//循环比较找出最大值
{
if(T[j].score>max)//如果比max大就将值赋给max
{
max=T[j].score;
(*max1=j);//记录下每次执行下来的值的下标,最终保留的就是最大值的下标
}
}
for(j=0;j<n;j++)//循环比较找出最小值
{
if(T[j].score<min)//如果比max大就将值赋给min
{
min=T[j].score;//如果比min小就将值赋给min
(*min1=j);//记录下每次执行下来的值的下标,最终保留的就是最小值的下标
}
}
for(i=0;i<n;i++)
{
sum+=T[i].score;
}
average=(float)(sum/n);//求和算出平均值
return average;
}
void Show(StuDent *T,int n,int average,int max1,int min1)//显示最高分最低分和高于平均分的函数 Show();
{
int i;
printf("最高分为:%d\n",T[max1].score);
printf("最低分为:%d\n",T[min1].score);
printf("高于平均分的学生信息为:\n");
for(i=0;i<n;i++)
{
if(T[i].score>average)
printf("%s\t%s\t%s\t%d\n",T[i].name,T[i].xuehao,T[i].phone,T[i].score);
}
}
int main()
{
StuDent *T;//定义一个结构体类型指针T;
int n,max1,min1;//用来记录最大和最小分数,的数组下标;
float average;//浮点型变量记录平均分;
printf("录入学生人数:\n");
scanf("%d",&n);
T=(StuDent *)malloc(sizeof(StuDent)*n);
input(T,n);//调用输入函数
printf("\n");
printf("输出信息:\n");
output(T,n);//调用输出函数
printf("\n");
average=func(T,n,&max1,&min1);//接收返回的平均分;&max1,和&min1,直接传地址就不需要返回值;
Show(T,n,average,max1,min1);
}