结构体数组应用——学生信息表

#include<stdio.h>
#define N 10000
struct student
{
    char id[10];      //准考证号
    char name[9];     //姓名
    float score[4];   //大小为4的数组,分别存储4门课程分数
    float total;      //总分
};
typedef struct student stuStru;

/*
    @函数名称:input 入口参数 : stuStru s[]
    @函数功能:学生信息录入,函数返回信息输入成功的学生人数
*/
int input (stuStru s[])
{
    int n=-1,i;
    printf("请按下列格式输入学生信息(首行输入q结束输入):\n");
    printf("-----------------------------------------------------------\n");
    printf("准考证号\t姓名\t语文\t英语\t综合\n");
    do
    {
        n++;
        scanf("%s",s[n].id);
        if(s[n].id[0]=='q' || s[n].id[0]=='Q')
            break;
        scanf("%s",s[n].name);
        for(i=0;i<4;i++)
            scanf("%f",&s[n].score[i]);
    }while(1);
    return n;
}
/*
    @函数名称:sum 入口参数 :stuStru *s,int n
    @函数功能:求学生高考总分
*/
void sum(stuStru *s,int n)
{
    int j;
    stuStru *p=s;
    while(p<s+n)
    {
        p->total=0;
        for(j=0;j<4;j++)
            p->total+=p->score[j];
        p++;
    }
}
/*
    @函数名称:selectSort 入口参数:stuStru s[],int n
    @函数功能:采用选择排序法对学生信息按总分由高到低排序
*/
void selectSort (stuStru s[],int n)
{
    int i,j,maxIndex;
    stuStru temp;
    for (i=0;i<n-1;i++)
    {
        maxIndex=i;
        for(j=i+1;j<n;j++)
        {
            if(s[j].total>s[maxIndex].total)
                maxIndex=j;
        }
        if(i!=maxIndex)
        {
            temp=s[i];
            s[i]=s[maxIndex];
            s[maxIndex]=temp;
        }

    }
}
/*
    @函数名称:print 入口参数:stuStru s[],int n
    @函数功能:输出学生信息
*/
void print (stuStru *s,int n)
{
    int i,j;
    if(n>0)
    {
        printf("%-12s%-12s","准考证号","姓名"); //输出表头
        printf("%-8s%-8s%-8s%-8s%-8s\n","语文","数学","英语","综合","总分");
        printf("---------------------------------------------\n");
        for(i=0;i<n;i++,s++)
        {
            printf("%-12s",s->id);       //输出准考证号
            printf("%-12s",s->name);     //输出名字
            for(j=0;j<4;j++)
            {
                printf("%-8.2f",s->score[j]);//输出成绩
            }
            printf("%-8.2f\n",s->total);     //输出总分
        }

    }
}
int main()
{
    stuStru s[N];
    int n;           //输入
    n=input(s);      //求和
    selectSort(s,n); //按总分由高到低排序
    print(s,n);      //输出
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋樱漫漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值