結構體數組管理學生簡單信息

題目:

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);
}

發佈了35 篇原創文章 · 獲贊 72 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章