前言
今天刚刚学习了二维数组,做了道题和大家分享一下~
一、班级输入输出
题目来源:
描述
输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。
输入描述:
五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。
输出描述:
五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。
二、解决问题
1.错误示范
代码如下(示例):
#include<stdio.h> int main(){ float a=0,b=0; float arr[5][6]={0}; //五行六列,定义数组 for(int i=0;i<5;i++){ //行 for(int j=0;j<5;j++){ //列 scanf("%.1f ",&arr[i][j]); //输入 if(j==4){ //因为最后一列是前面数字的总和 for(int k=0;k<5;k++){ b=b+arr[i][k]; //用循环加起来 } arr[i][5]=b; } } } for(int w=0;w<5;w++){ //用循环输出数组 for(int l=0;l<6;l++){ printf("%.1f",arr[w][l]); } } return 0; }
错误的地方:
1、
很多朋友写代码的时候,常常会遇到这样的一个问题:
scanf("%.1f");
我们都知道,在printf时,可以设置输出的精度,但是scanf是不能设置精度的,也就是不能出现任何 .xf 这样的格式
但是却可以写成scanf("%2f");这是设置域宽,是正确的格式。
很多朋友在这里都把域宽和精度两个概念混淆了,导致输出结果有问题,却又很难发现错误,因为对于精度这是的问题,一般编译器不报错的。
2、
b一定要重置!!!,不然你的b会一直加下去。
2.正确代码
代码如下(示例):
#include<stdio.h> int main(){ float b=0; float arr[5][6]={0}; for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ scanf("%f ",&arr[i][j]); if(j==4){ for(int k=0;k<5;k++){ b=b+arr[i][k]; } arr[i][5]=b; b=0; } } } for(int w=0;w<5;w++){ for(int l=0;l<6;l++){ printf("%.1f\n",arr[w][l]); } } return 0; }
总结
以上就是今天要讲的内容,本文仅仅简单介绍了二维数组的一个应用,希望对大家有帮助~