班级课程成绩计算(SWUSTOJ617)

题目描述:

这里拓展一个小知识点:

打印输出:
%g    根据数值不同自动选择%f或%e,
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。

举几个例子来理解一下:

printf("%g\n", 0.00001234);
printf("%g\n", 0.0001234);
printf("%.2g\n", 123.45);
printf("%.2g\n", 23.45);
上面四句输出结果为:
1.234e-05
0.0001234
1.2e+02
23

 

运行结果

 源代码:

#include<stdio.h>

int n = 0;//这里的n定义全局变量的好处是在每个函数中都可以直接使用
float English[100], math[100], cplus[100], music[100], art[100] = {0};//这里使用数组的形式主要是为了在循环中储存对应的每个人的各科成绩
float kemu_average[5] = { 0 };//定义出五个科目的平均分
//定义这个平均分时,之所以用数组的形式主要是为了在求每科平均分时便于直接储存起来每组数据方便计算并且方便后期的直接打印
struct student
{
    long int ID;
    float English_score;
    float math_score;
    float cplus_score;
    float music_score;
    float art_score;
    float average1;//这里直接把学生各科平均分定义在这个结构体中
};//这里我们考虑使用结构体来对学生这些基本信息说明
void Average1(struct student stu[])
{
    for (int i = 0; i < n; i++)
    {
        stu[i].average1 = (stu[i].English_score + stu[i].math_score + stu[i].cplus_score + stu[i].music_score + stu[i].art_score) / 5;
    }
}
void Kemu_average(float *kemu_average)
{
    for (int i = 0; i < n; i++)
    {
        kemu_average[0] = kemu_average[0] + English[i];
        kemu_average[1] = kemu_average[1] + math[i];
        kemu_average[2] = kemu_average[2] + cplus[i];
        kemu_average[3] = kemu_average[3] + music[i];
        kemu_average[4] = kemu_average[4] + art[i];
    }
    kemu_average[0] = kemu_average[0] / n;
    kemu_average[1] = kemu_average[1] / n;
    kemu_average[2] = kemu_average[2] / n;
    kemu_average[3] = kemu_average[3] / n;
    kemu_average[4] = kemu_average[4] / n;
}//在计算每科成绩的平均分时我们就可以发现前面储存每科成绩的好处了
int main()
{
    struct student stu[100] = { 0 };
    scanf("%d", &n);//输入学生人数
    for (int i = 0; i < n; i++)
    {
        scanf("%ld %f %f %f %f %f", &stu[i].ID, &stu[i].English_score, &stu[i].math_score, &stu[i].cplus_score, &stu[i].music_score, &stu[i].art_score);//这里依次输入每个学生的各科成绩
        //输入完每个学生的成绩过后,由于这是一个循环体,下一次循环就会是另一个学生的成绩,所以我们要把这个学生的每科成绩储存起来,便于后面算每科成绩的平均分
        English[i] = stu[i].English_score;
        math[i] = stu[i].math_score;
        cplus[i] = stu[i].cplus_score;
        music[i] = stu[i].music_score;
        art[i] = stu[i].art_score;
    }//循环结束过后我们就完成了每位学生的成绩输入,并且将每位学生的各科成绩都成功地储存了下来
    //接下来我们就要写一个函数算出每个学生的平均分,并且要用数组名传参
    Average1(stu);
    Kemu_average(kemu_average);
    //计算完成过后我们就需要打印了
    for (int i = 0; i < n;i++)
    {
        printf("%ld %g %g %g %g %g %.1f\n", stu[i].ID, stu[i].English_score, stu[i].math_score, stu[i].cplus_score, stu[i].music_score, stu[i].art_score,stu[i].average1);
    }//注意题目在这里输出时输出的是整数,所以我们需要用%g来输出
    printf("%.1f %.1f %.1f %.1f %.1f\n", kemu_average[0], kemu_average[1], kemu_average[2], kemu_average[3], kemu_average[4]);//这个代码是笔者在后面修改的,下面这个代码始终不能通过也是不理解
    /*for (int i = 0; i < n; i++)
    {
        printf("%.1f ", kemu_average[i]);
    }*/

    return 0;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~|Bernard|

你的鼓励是我写下去最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值