注册 登录
编程论坛 C语言论坛

求助如何编写这个C语言代码,谢谢各位了。

Pluto鲸落 发布于 2019-11-14 20:30, 2083 次点击
要求如下:
可以输出10个以上学生的成绩、学号、姓名
对应五门科目(可输入任意科目名)
以二维表格的形式呈现出来他们的成绩,并在二维表格的行尾统计总分,列尾统计平均分
以此来形成一个成绩单

实在有点不会,拜托大神帮助!!!

[此贴子已经被作者于2019-11-19 08:04编辑过]

9 回复
#2
纯蓝之刃2019-11-14 21:22
程序代码:
#include <stdio.h>
#include <string.h>

struct chengji
{
    char name[20];
    float math;
    float chinese;
    float english;
    float chemistry;
    float physics;
    float sum;
    int id;
};


int main()
{
    struct chengji list[1000]={0};

    int n,i;

    printf("请输入学生总数:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个学生姓名及成绩:",i);
        scanf("%s%d%f%f%f%f%f",list[i].name,&list[i].id,&list[i].math,&list[i].chinese,&list[i].english,&list[i].chemistry,&list[i].physics);
        list[i].sum=list[i].math+list[i].chinese+list[i].english+list[i].chemistry+list[i].physics;
        list[0].math+=list[i].math;
        list[0].chinese+=list[i].chinese;
        list[0].english+=list[i].english;
        list[0].chemistry+=list[i].chemistry;
        list[0].physics+=list[i].physics;
    }

    printf("\t姓名\t学号\t数学\t语文\t英语\t化学\t物理\t总分\n");
    for (i=1;i<=n;i++)
    {
        printf("\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",list[i].name,list[i].id,list[i].math,list[i].chinese,list[i].english,list[i].chemistry,list[i].physics,list[i].sum);
    }

    printf("平均分:\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",list[0].math,list[0].chinese,list[0].english,list[0].chemistry,list[0].physics);

    return 0;
}
#3
Pluto鲸落2019-11-18 19:55
回复 2楼 纯蓝之刃
哇,太谢谢了大神了!感激不尽啊!
#4
Pluto鲸落2019-11-20 22:43
回复 2楼 纯蓝之刃
这个我自己调了多次发现平均数没求出来,求出来的是和,我自己试着改了改基本成功了,不过这最后一行怎么才能再添加一个总分的一个列平均值的输出呢?就是对应二维表格的每行学生的成绩再求个平均值。
还有这个如何还能添加个求最大值的一行添加到这个二维数组最后?
感激不尽啊!叨唠了!

[此贴子已经被作者于2019-11-20 22:51编辑过]

#5
纯蓝之刃2019-11-20 22:48
回复 4楼 Pluto鲸落
printf("平均分:\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",list[0].math/n,list[0].chinese/n,list[0].english/n,list[0].chemistry/n,list[0].physics/n);
#6
Pluto鲸落2019-11-20 22:52
回复 5楼 纯蓝之刃

#include <string.h>

struct chengji
{
    char name[20];
    float math;
    float chinese;
    float english;
    float chemistry;
    float physics;
    float sum;
    float average;
    int id;
};


int main()
{
    struct chengji list[1000]={0};

    int n,i;

    printf("请输入学生总数:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个学生姓名、学号及成绩:(先回车后每输一个成绩换行)",i);
        scanf("%s%d%f%f%f%f%f",list[i].name,&list[i].id,&list[i].math,&list[i].chinese,&list[i].english,&list[i].chemistry,&list[i].physics);
        list[i].sum=list[i].math+list[i].chinese+list[i].english+list[i].chemistry+list[i].physics;
        list[0].math+=list[i].math;
        list[0].chinese+=list[i].chinese;
        list[0].english+=list[i].english;
        list[0].chemistry+=list[i].chemistry;
        list[0].physics+=list[i].physics;
        list[i].average=list[i].sum/5;
    }

    printf("\t姓名\t学号\t数学\t语文\t英语\t化学\t物理\t总分\n");
    for (i=1;i<=n;i++)
    {
        printf("\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",list[i].name,list[i].id,list[i].math,list[i].chinese,list[i].english,list[i].chemistry,list[i].physics,list[i].sum/5);
    }
   
 
    printf("平均分:\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",list[0].math/i,list[0].chinese/i,list[0].english/i,list[0].chemistry/i,list[0].physics/i);
   
    return 0;
}
#7
Pluto鲸落2019-11-20 22:52
回复 5楼 纯蓝之刃
我改成了这样,您看一下
#8
纯蓝之刃2019-11-20 23:02
不行,你这样i比n会大1的
#9
Pluto鲸落2019-11-20 23:07
回复 8楼 纯蓝之刃
奥,确实,之前那个算的不对,谢谢啊。
我又试着加了一列求每个人总分的平均分,但是输出有问题,可否帮忙看看?

程序代码:
#include <stdio.h>
#include <string.h>

struct chengji
{
    char name[20];
    float math;
    float chinese;
    float english;
    float chemistry;
    float physics;
    float sum;
    float average;
    int id;
};


int main()
{
    struct chengji list[1000]={0};

    int n,i;

    printf("请输入学生总数:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个学生姓名、学号及成绩:(先回车后每输一个成绩换行)",i);
        scanf("%s%d%f%f%f%f%f",list[i].name,&list[i].id,&list[i].math,&list[i].chinese,&list[i].english,&list[i].chemistry,&list[i].physics);
        list[i].sum=list[i].math+list[i].chinese+list[i].english+list[i].chemistry+list[i].physics;
        list[0].math+=list[i].math;
        list[0].chinese+=list[i].chinese;
        list[0].english+=list[i].english;
        list[0].chemistry+=list[i].chemistry;
        list[0].physics+=list[i].physics;
        list[i].average=list[i].sum/5;
    }

    printf("\t姓名\t学号\t数学\t语文\t英语\t化学\t物理\t总分\t平均分\n");
    for (i=1;i<=n;i++)
    {
        printf("\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\%1f\n",list[i].name,list[i].id,list[i].math,list[i].chinese,list[i].english,list[i].chemistry,list[i].physics,list[i].sum/5, list[i].average);
    }
   

 
    printf("平均分:\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",list[0].math/n,list[0].chinese/n,list[0].english/n,list[0].chemistry/n,list[0].physics/n);
   
    return 0;
}
#10
Pluto鲸落2019-12-01 17:02
回复 8楼 纯蓝之刃
大佬,如果我想求出这个成绩单的综合平均分最高的学生的成绩,在这个代码的原基础上怎么改呢?
1