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

(1)由键盘输入每个学生的学好和四门课程的成绩。(2)计算每个学生的平均分和总分。(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学好、各科成绩、平均分和总... (1)由键盘输入每个学生的学好和四门课程的成绩。
(2)计算每个学生的平均分和总分。
(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学好、各科成绩、平均分和总分。
具体要求如下:
(1)每个功能为一独立的函数
(2)所有的数日之前都要有提示
(3)在所有函数外部定义描述学生的结构体类型(成员名为id、math、english、chinese、computer).
(4)在所有函数外部定义描述一个整形数组order,长度为35,在这个数组中按名次存放学生的学号。
(5)在所有函数外部定义一个实型数组addsum,长度为35,用于存放每个学生的总成绩。
(6)在所有函数外部定义一个实型数组addaver,长度为35,用于存放每个学生的平均成绩。
展开
 我来答
sunnyhouyq
2014-05-19 · TA获得超过648个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:517万
展开全部
#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();
}
无上阳光2
2014-05-19 · TA获得超过257个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:166万
展开全部
一小时了楼上还没有给结果。。。那我也写写好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
堵寄灵kO
2014-05-19 · TA获得超过2370个赞
知道小有建树答主
回答量:588
采纳率:100%
帮助的人:468万
展开全部
这么多,不可能复制在这里了,做好给你发附件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式