題目:
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);
}