C语言:利用指向结构体的指针变量处理5名学生的信息,并分别使用三种方式输出

版权声明:根据《中华人民共和国著作权法》,如需转载请标明来源并联系作者进行授权。本文作者保留依法追究未经授权转载等侵犯作者著作权等的违法行为之权利。 https://blog.csdn.net/qq_41933331/article/details/80463745

题目来源:大工慕课 链接
作者:Caleb Sung

题目要求

利用指向结构体的指针变量处理5名学生的信息。(提示:定义一个学生信息的结构体,包括学号、姓名、一门课程的成绩;定义一个结构体数组并赋初值)
要求分别使用三种方式输出5名学生的信息,即每名学生的信息都输出3次,输出方式分别为:
a. 结构体变量.成员变量
b. (*结构体指针变量).成员变量
c. 结构体指针变量 -> 成员变量

参考代码

#include "stdio.h"

int swap(int a[2][5]){
    int t, i, j;
    for(i=0; i<4; i++){
        for(j=0; j<4-i; j++){
            if(a[0][j] < a[0][j+1]){
                t = a[0][j];
                a[0][j] = a[0][j+1];
                a[0][j+1] = t;

                t = a[1][j];
                a[1][j] = a[1][j+1];
                a[1][j+1] = t;
            }
        }
    }
    return a[2][5];
}

void main(){
    int i, j, tmp[2][5], t;

    struct Student{
    char id[10], name[10];
    int subject[2], sum, rank;
    double average;
    }

    stu[5]={{"001", "Bob", 88, 79, 0, 0, 0},
            {"002", "Sam", 66, 88, 0, 0, 0},
            {"003", "Tom", 59, 59, 0, 0, 0},
            {"004", "Jerry", 86, 78, 0, 0, 0},
            {"005", "Amy", 98, 96, 0, 0, 0}}, *st;

    for(i=0; i<5; i++){
        for(j=0; j<2; j++)
            stu[i].sum += stu[i].subject[j];
        stu[i].average = (double)(stu[i].sum) / 2.0;
    }

    for(i=0; i<5; i++){
        tmp[0][i] = stu[i].sum;
        tmp[1][i] = i;
    }

    tmp[2][5] = swap(tmp);

    for(i=0; i<5; i++)
        stu[tmp[1][i]].rank = i+1;

    printf("ID\tName\tSub1\tSub2\tSUM\tAvg.\tRank\n");
    printf("-----------------------------------------------------\n");
    for(i=0; i<5; i++)
        printf("%s\t%s\t%d\t%d\t%d\t%.2f\t%d\n",
                stu[i].id,
                stu[i].name,
                stu[i].subject[0],
                stu[i].subject[1],
                stu[i].sum,
                stu[i].average,
                stu[i].rank);
    printf("\n\n");

    printf("ID\tName\tSub1\tSub2\tSUM\tAvg.\tRank\n");
    printf("-----------------------------------------------------\n");
    st = &stu[0];
    for(i=0; i<5; i++){
        printf("%s\t%s\t%d\t%d\t%d\t%.2f\t%d\n",
                stu[i].id,
                stu[i].name,
                stu[i].subject[0],
                stu[i].subject[1],
                stu[i].sum,
                stu[i].average,
                stu[i].rank);
        st++;
    }
    printf("\n\n");

    printf("ID\tName\tSub1\tSub2\tSUM\tAvg.\tRank\n");
    printf("-----------------------------------------------------\n");
    st = &stu[0];
    for(i=0; i<5; i++){
        printf("%s\t%s\t%d\t%d\t%d\t%.2f\t%d\n",
                st -> id,
                st -> name,
                st -> subject[0],
                st -> subject[1],
                st -> sum,
                st -> average,
                st -> rank);
        st++;
    }
}

运行效果

ID      Name    Sub1    Sub2    SUM     Avg.    Rank
-----------------------------------------------------
001     Bob     88      79      167     83.50   2
002     Sam     66      88      154     77.00   4
003     Tom     59      59      118     59.00   5
004     Jerry   86      78      164     82.00   3
005     Amy     98      96      194     97.00   1


ID      Name    Sub1    Sub2    SUM     Avg.    Rank
-----------------------------------------------------
001     Bob     88      79      167     83.50   2
002     Sam     66      88      154     77.00   4
003     Tom     59      59      118     59.00   5
004     Jerry   86      78      164     82.00   3
005     Amy     98      96      194     97.00   1


ID      Name    Sub1    Sub2    SUM     Avg.    Rank
-----------------------------------------------------
001     Bob     88      79      167     83.50   2
002     Sam     66      88      154     77.00   4
003     Tom     59      59      118     59.00   5
004     Jerry   86      78      164     82.00   3
005     Amy     98      96      194     97.00   1

猜你喜欢

转载自blog.csdn.net/qq_41933331/article/details/80463745