2012年北理工计算机学院保研C++上机复试题(一)

输入:每个学生一行,先输入学号,接着是各科成绩(0~5),科目门次不定,中间用空格隔开。

输出:每个学生的平均分(一位小数)从大到小排列输出,挂科(分数<=2)2门以上的同学按门次从小到大输出。

样例:

Input:
1, 4, 5, 4, 5
2, 5
3, 2, 2, 1
4, 2, 1, 3

Output:
平均分:
2,  5
1, 4.5
4, 2
3, 1.7
挂科:
4, 2
3, 3

题目比较简单,用的方法也比较笨。

#include <string.h>
#include <stdio.h>

struct stu
{
    int num;
    double per;
    int fail;
};

int main()
{
    struct stu student[100];
    int i,j,n1,n2,tt;
    double fen,t;
    char nouse;
    for (i=0;i<100;i++){
        student[i].num = 0;
        student[i].per = 0;
        student[i].fail = 0;
    }
    for(i=0;;i++){
        // 一共有i个学生
        scanf("%c",&nouse);
        if (nouse == '\n'){
            break;
        }
        else{
            student[i].num = nouse-'0';
        }
        scanf("%c",&nouse);
        for(j=0;;j++){
            scanf("%lf%c",&fen,&nouse);
            student[i].per += fen;
            if (fen <= 2){
                student[i].fail ++;
            }
            if (nouse == '\n'){
                student[i].per = student[i].per/(j+1);
                break;
            }
        }
    }

    for(n1=0;n1<i;n1++){
        for(n2=0;n2<i-n1-1;n2++){
            if(student[n2].per<student[n2+1].per){
                t = student[n2+1].per;
                student[n2+1].per = student[n2].per;
                student[n2].per = t;

                tt = student[n2+1].num;
                student[n2+1].num = student[n2].num;
                student[n2].num = tt;

                tt = student[n2+1].fail;
                student[n2+1].fail = student[n2].fail;
                student[n2].fail = tt;
            }
        }
    }
    printf("平均分:\n");
    for(j=0;j<i;j++){
        printf("%d %.1f\n",student[j].num,student[j].per);
    }

    for(n1=0;n1<i;n1++){
        for(n2=0;n2<i-n1-1;n2++){
            if(student[n2].fail>student[n2+1].fail){
                t = student[n2+1].per;
                student[n2+1].per = student[n2].per;
                student[n2].per = t;

                tt = student[n2+1].num;
                student[n2+1].num = student[n2].num;
                student[n2].num = tt;

                tt = student[n2+1].fail;
                student[n2+1].fail = student[n2].fail;
                student[n2].fail = tt;
            }
        }
    }
    printf("挂科:\n");
    for(j=0;j<i;j++){
        if (student[j].fail != 0)
            printf("%d %d\n",student[j].num,student[j].fail);
    }

    return 0;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值