C语言:使用结构体计算三名学生每名学生的三科成绩的总成绩、平均成绩及名次

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

题目要求

假设有3名学生,每名学生的数据包括学号、姓名、3门课程的成绩。编写程序,计算每名学生的总成绩、平均成绩及名次。
要求使用结构体,结构体类型变量的初值在程序中给定(方便调试);采用p->成员名形式,按照原始输入顺序输出原始学生信息表(学号、姓名、3门成绩、总成绩、平均成绩及按总成绩排名次);经过计算总成绩、平均成绩和排名次后,要求采用p->成员名形式表示输出结果。

参考代码

#include<stdio.h>

int swap(int a[2][3]){
    int t, i, j;
    for(i=0; i<2; i++){
        for(j=0; j<2-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][3];
}

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

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

    stu[3] = {{"001", "Bob", 66, 88, 77, 0, 0, 0}, 
            {"002", "Sam", 98, 87, 76, 0, 0, 0}, 
            {"003", "Amy", 89, 78, 87, 0, 0, 0}}, *st;

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

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

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

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

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

运行结果

ID      Name    Sub1    Sub2    Sub3    SUM     AVG.    Rank
-------------------------------------------------------------
001     Bob     66      88      77      231     77.00   3
002     Sam     98      87      76      261     87.00   1
003     Amy     89      78      87      254     84.67   2
  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是使用结构体来输入和输出三名学生的学号、姓名、性别和成绩C语言代码示例: ```c #include <stdio.h> struct Student { int id; char name[50]; char gender[10]; float score; }; int main() { struct Student students[3]; // 创建一个包含三个学生结构体数组 // 输入学生信息 for (int i = 0; i < 3; i++) { printf("请输入第 %d 名学生的学号:", i + 1); scanf("%d", &students[i].id); printf("请输入第 %d 名学生的姓名:", i + 1); scanf("%s", students[i].name); printf("请输入第 %d 名学生的性别:", i + 1); scanf("%s", students[i].gender); printf("请输入第 %d 名学生成绩:", i + 1); scanf("%f", &students[i].score); } // 输出学生信息 printf("\n学生信息如下:\n"); for (int i = 0; i < 3; i++) { printf("学号:%d\n", students[i].id); printf("姓名:%s\n", students[i].name); printf("性别:%s\n", students[i].gender); printf("成绩:%.2f\n", students[i].score); printf("\n"); } return 0; } ``` 这段代码使用一个名为`Student`的结构体来表示学生信息,包括学号(`id`)、姓名(`name`)、性别(`gender`)和成绩(`score`)。首先,我们创建一个包含三个学生结构体数组`students`。然后,使用循环输入每个学生的信息。最后,再次使用循环输出每个学生的信息。 注意:这只是一个简单的示例,没有进行输入验证和错误处理。在实际的程序开发中,你可能需要添加更多的代码来确保输入的合法性和程序的健壮性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值