【每日一题】——班级成绩输入输出

一.题目(牛客:BC101)

描述:

输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。

输入描述:

五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。

输出描述:

五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。

示例1:

输入:

98.5 96.0 100 99 88

60.5 77 88.5 99 60

80 80.5 89 91 92

93 94 95.5 96 97.5

100 98 88.5 88 78.5

输出:

98.5 96.0 100.0 99.0 88.0 481.5
60.5 77.0 88.5 99.0 60.0 385.0
80.0 80.5 89.0 91.0 92.0 432.5
93.0 94.0 95.5 96.0 97.5 476.0
100.0 98.0 88.5 88.0 78.5 453.0

二.分析

1.首先审题干:①5个学生②5科成绩③总分;
2.其次构思:①我们应先产生学生这一对象,然后再产生成绩,最后输出
3.最后构造框架:
方法一:使用循环语句来产生学生这一对象,在学生这个大循环中再加入一个循环来产生成绩,通过循环变量来实现5次的输入输出(产生5个学生,输入5次成绩,输出5个学生的5个成绩及总分)
方法二:通过构建结构体来产生5个学生,再用暴力枚举的方法输入成绩

三.例析

上面的分析看了之后可能会仍然大脑一片空白(怪我表达不好),但问题不大,下面通过具体的代码进行逐步讲解。

方法一:

#include<stdio.h>
int main()
{
	int i = 0;
	double score[5] = { 0.0 };
	for (i = 0; i < 5; i++)//输出5个人
	{
		int j = 0;
		double sum = 0.0;
		for (j = 0; j < 5; j++)//输出每个人的5个成绩
		{
			scanf("%lf", &score[j]);//每个成绩都存放到j中,即0,1,2,3,4中,scanf后面不能使用保留小数位数的符号,即不能使用%.1lf
			sum += score[j];//求总成绩
		}
		j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%.1lf ", score[j]);//输出一个人的5个成绩
		}
		printf("%.1lf\n", sum);
	}
	return 0;
}

剖析:

1.int i = 0;
//这里首先定义一个循环变量i,目的是在下面构建一个大循环,用来产生五个学生;
2.double score[5] = { 0.0 };
//定义一个双精度数组,[5]代表数组内存放5个数,{0.0}是初始化数组,相当于告诉大家这个里面的数是保留一位小数;
3.for (i = 0; i < 5; i++)
{
……
}
return 0;

//这个循环是用来产生5个学生,i从0开始,执行到5时停止,即循环了5次,i=0时可以看成是第一个学生,在这个循环内部通过其他代码来产生5个成绩,这一个循环下来一个学生的5个成绩就产生了,只需要再循环几次就可以产生5个学生了;
4.for (j = 0; j < 5; j++)
{
scanf(“%lf”, &score[j]);
sum += score[j];
}

//这个循环就是用来产生5个成绩的,通过j循环5次来产生5次成绩,并且将5次成绩存放在score中(即一开始定义时的[5]就是用来存放5次成绩的),即当j=0时我们输入一个数,这个数就被存放到数组下标为0的位置,循环往复就可以将5次成绩放入score当中。其中sum+=score[j]; 是将每一次输入的成绩相加起来,等价于sum=sum+score[j]; 这是较为常见的循环累加法,例如第一次循环j=0,输入的成绩为98.5,输入之后再往下执行就会将98.5加到sum中,第二次循环中j=1,输入另一个成绩,再将这个成绩加上sum(此时的sum是上次加上98.5的sum),因此就可以实现求和的功能。
5.j = 0;
for (j = 0; j < 5; j++)
{
printf("%.1lf ", score[j]);
}

//上面的循环仅仅是输入了5个成绩,还需要输出这5个成绩。首先先将j初始化,因为5次的成绩分别存储在j=0,j=1,j=2,j=3,j=4中,需要从j=0开始来打印出5次成绩,这里的循环用法和第四点的循环用法大同小异,j=0时输出当时j=0时输入的数,j=1时也是如此,这里可以理解为数组是一个存放数据的载体,每个数据都有对应的编号,需要用到时根据编号再输出。
6.printf(“%.1lf\n”, sum);
//这串代码是用来输出总分数的。%.1lf 这个是为了输出时保留一位小数,想保留几位就在%后面加上.再加上想要保留的位数,例如保留两位小数,并且是单精度:%.2f。

方法二:

#include <stdio.h>
float add(float x, float y, float z, float m, float n) //自定义一个add函数,用来算总成绩
{
    float h;
    h = x + y + z + m + n;
    return h;
}
struct student //创建结构体
{
//定义每一门科目
    float a;
    float b;
    float c;
    float d;
    float e;    
} student1, student2, student3, student4, student5;//包含的学生名
int main() 
{
    float a1;
    float a2; 
    float a3;
    float a4;
    float a5;
    scanf("%f %f %f %f %f", &student1.a, &student1.b, &student1.c, &student1.d,
        &student1.e);
    scanf("%f %f %f %f %f", &student2.a, &student2.b, &student2.c, &student2.d,
        &student2.e);
    scanf("%f %f %f %f %f", &student3.a, &student3.b, &student3.c, &student3.d,
        &student3.e);
    scanf("%f %f %f %f %f", &student4.a, &student4.b, &student4.c, &student4.d,
        &student4.e);
    scanf("%f %f %f %f %f", &student5.a, &student5.b, &student5.c, &student5.d,
        &student5.e);
    a1 = add(student1.a, student1.b, student1.c, student1.d, student1.e);
    a2 = add(student2.a, student2.b, student2.c, student2.d, student2.e);
    a3 = add(student3.a, student3.b, student3.c, student3.d, student3.e);
    a4 = add(student4.a, student4.b, student4.c, student4.d, student4.e);
    a5 = add(student5.a, student5.b, student5.c, student5.d, student5.e);
    printf("%.1f %.1f %.1f %.1f %.1f %.1f\n", student1.a, student1.b, student1.c, student1.d, student1.e, a1);
    printf("%.1f %.1f %.1f %.1f %.1f %.1f\n", student2.a, student2.b, student2.c, student2.d, student2.e, a2);
    printf("%.1f %.1f %.1f %.1f %.1f %.1f\n", student3.a, student3.b, student3.c, student3.d, student3.e, a3);
    printf("%.1f %.1f %.1f %.1f %.1f %.1f\n", student4.a, student4.b, student4.c, student4.d, student4.e, a4);
    printf("%.1f %.1f %.1f %.1f %.1f %.1f\n", student5.a, student5.b, student5.c, student5.d, student5.e, a5);
    return 0;
}

通过对比可以很清晰看出第一种方法代码上更加简便,但逻辑上更加复杂,而第二种则逻辑上较为简单,但是代码十分复杂繁琐。如果结构体这部分不理解的可以看我之前写的关于结构体的博客。http://t.csdn.cn/tLQd2

最后:

距离上一篇博客已经过去很久了,之后我会渐渐找回状态稳定更新,非常感谢你们的支持和陪伴!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PH_modest

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值