结构体数组管理学生简单信息

题目:

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值