c语言之奖学金

//这是一道结构体的题除了繁就简单
//可能有学号该如何同步搞定的问题>>>在结构体里定义学号(number)然后根据循环赋值就OK。>>>结构体内定义不一定都要用
//这道题还是可以的***
//来源于NOIP普及组 NOIP2007 理论上C++会方便很多但是这道题在C语言的课上也是会拿来练习的毕竟真的很简单

#include <stdio.h>
struct student{
    int chinese;
    int math;
    int english;
    int number;
    int sum;
}s[1000];
int main(int argc, const char * argv[]) {
    struct student temp,ex,t;
    int n;
    scanf("%d",&n);
    /*读入数据*/
    for (int i=0; i<n; i++) {
        scanf("%d%d%d",&s[i].chinese,&s[i].math,&s[i].english);
        s[i].sum=s[i].chinese+s[i].math+s[i].english;
        s[i].number=i+1;
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {
            if (s[i].sum<s[i+1].sum) {//sum
                temp=s[i];s[i]=s[i+1]; s[i+1]=temp;
            }
        }
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {
            if (s[i].sum==s[i+1].sum) {//Chinese
               if (s[i].chinese<s[i+1].chinese) {
                ex=s[i];s[i]=s[i+1]; s[i+1]=ex;
               }
            }
        }
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {//number
             if ((s[i].sum==s[i+1].sum)&& (s[i].chinese==s[i+1].chinese)) {
                if (s[i].number>s[i].number) {
                    t=s[i];s[i]=s[i+1]; s[i+1]=t;
                }
             }
        }
    }
    for (int i=0; i<5; i++) {
        printf("%d %d\n",s[i].number,s[i].sum);
    }
    return 0;
}

发布了6 篇原创文章 · 获赞 5 · 访问量 136

猜你喜欢

转载自blog.csdn.net/weixin_46198136/article/details/103996218