统计学生成绩:编写一个C语言程序,统计一个班(最多有35人)的学生成绩

(1)由键盘输入每个学生的学好和四门课程的成绩。
(2)计算每个学生的平均分和总分。
(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学好、各科成绩、平均分和总分。
具体要求如下:
(1)每个功能为一独立的函数
(2)所有的数日之前都要有提示
(3)在所有函数外部定义描述学生的结构体类型(成员名为id、math、english、chinese、computer).
(4)在所有函数外部定义描述一个整形数组order,长度为35,在这个数组中按名次存放学生的学号。
(5)在所有函数外部定义一个实型数组addsum,长度为35,用于存放每个学生的总成绩。
(6)在所有函数外部定义一个实型数组addaver,长度为35,用于存放每个学生的平均成绩。

#include <stdio.h>

typedef struct student
{
    int id;
    double math;
    double english;
    double chinese;
    double computer;
} student;

int order[35];
double addsum[35];
double addaver[35];
student stu[35];
int stu_cnt = 0;
void input()
{
    stu_cnt = 0;
    while( stu_cnt < 35 )
    {
        printf( "输入学号(输入0退出输入):" );
        scanf( "%d", &stu[stu_cnt].id );
        fflush( stdin );
        if ( stu[stu_cnt].id <= 0 )
            break;
        printf( "输入4门成绩(数学 英语 语文 计算机):" );
        scanf( "%lf %lf %lf %lf", &stu[stu_cnt].math, &stu[stu_cnt].english, 
                &stu[stu_cnt].chinese, &stu[stu_cnt].computer );
        fflush( stdin );
        addsum[stu_cnt] = stu[stu_cnt].math + stu[stu_cnt].english +
                    stu[stu_cnt].chinese, stu[stu_cnt].computer;
        addaver[stu_cnt] = addsum[stu_cnt] / 4.0;
        order[stu_cnt] = stu[stu_cnt].id;
        stu_cnt++;
    }
}

int query( int id )
{
    int i = 0;
    for( i=0; i<stu_cnt; i++ )
    {
        if ( stu[i].id == id )
            return i;
    }
    return -1;
}

void gen_order()
{
    int i,j;
    for( i=0; i<stu_cnt; i++ )
    {
        for( j=i+1; j<stu_cnt; j++ )
        {
            if ( addsum[i] - addsum[j] < 0.001 )
            {
                int temp_id = order[i];
                order[i] = order[j];
                order[j] = temp_id;
            }
        }
    }
}

void output()
{
    int i;
    printf( "名次 学号  数学  英语  语文  计算机  总分  平均\n" );
    for( i=0; i<stu_cnt; i++ )
    {
        int j = query( order[i] );
        if ( j<0 )
        {
            printf( "order[%d]= %d error\n", i+1, order[i] );
            continue;
        }
        printf( "%02d %5d %4.2f %4.2f %4.2f %6.2f %4.2f %4.2f\n",
                i+1, stu[j].id, stu[j].math, stu[j].english, stu[j].chinese, stu[j].computer,
                addsum[j], addaver[j] );
    }
}

int main()
{
    input();
    gen_order();
    output();
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-19
一小时了楼上还没有给结果。。。那我也写写好了
第2个回答  2014-05-19
这么多,不可能复制在这里了,做好给你发附件。
相似回答