在肯德基吃麻辣烫

在肯德基吃麻辣烫



1. 用结构体存放所有数据。

2.使用函数实现不同功能

2.1输入学生信息
2.2函数:计算学生的总分
2.3按总成绩从高到低进行排序
2.4对排好名次后的每个学生赋予名次
2.5将所有数据输出

1.创建结构体,对象为学生,结构体信息有学号,分数,总分,排名

    typedef struct{
    int ID;
    float score[3];
    float total ;
    int rank;
	}STU;

2.使用函数实现不同的功能

2.1.输入学生的信息:

void input_data(STU s[])
{

    int i = 0;
    for (i = 0; i < 10; i++)//这里假设有十个学生
    {
        scanf("%d", &s[i].ID);//输入每个学生的ID
        for (int j = 0; j < 3; j++)
        {
             scanf("%f", &s[i].score[j]); //输入每个学生的语文,数学,英语三门科目的分数
        }
    }

}

2.2.函数:计算学生的总分


void calculate(STU s[])
{

    for(int i=0;i<10;i++)
    {
        s[i].total =0; //在这里将总成绩初始化为0,也可以在创建结构体时
        将总成绩初始化为0
    }
    
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<3;j++)
        {
            s[i].total += s[i].score[j];//求和
        }
    }


}

将学生的各科成绩求和 如上:

2.3. 按总成绩从高到低进行排序

使用冒泡排序

void sort_total(STU s[])
{

    STU tmp;//结构体变量,需要什么类型的临时存储值,就创建什么类型的临时变量
    int i=0;
    int j=0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10-i-1;j++)
        {
            if(s[j].total<s[j+1].total)
            {
                tmp =s[j];
                s[j] = s[j+1];
                s[j+1] = tmp;
            }
        }
    }

}

2.4.对排好名次后的每个学生赋予名次

void add_rank(STU s[])
{
    for(int i=0;i<10;i++)
    {
        s[i].rank =i+1; //i+1 是由于数组从0开始,而常见的排名是从第一名到第n名
    }
}

2.5 将所有数据输出

void print_data(STU s[])
{
	/********** Begin **********/
    int i=0;
    int j =0;
    printf("学号:         语文:         数学:         英语:         总分:         名次:\n");
    for(i=0;i<10;i++)
    {
        printf("%-15d",s[i].xuehao);
        for(j=0;j<3;j++)
        {
            printf("%-15.1f",s[i].score[j]);
        }
        printf("%-15.1f%d",s[i].total,s[i].rank);
        printf("\n");
    }

主函数如下:

int main()
{
    STU s[10];
    input_data(s);
    calculate(s);
    sort_total(s);
    add_rank(s);
    print_data(s);
    return 0;
}
12-09 16:05