本文最后更新于 715 天前,其中的信息可能已经有所发展或是发生改变。
先看题
在一行上输入若干整数,每个整数以一个空格分开,求这些整数的平均值。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个字符串(仅包含数字字符和空格)。
输出格式:
对于每组测试,输出以空格分隔的所有整数的平均值,结果保留两位小数。
输入样例:1
1 2 3 4 5 6 7 8 9 10
输出样例:5.50
刚开始给我搞懵了,没有输入的个数,咋接收每个数和终止输入。后面搜了一下,发现了一个好办法
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
int T,num;//T--测试数据组数 num--本组数据有几个数
double temp,total=0;//temp--输入值临时存储
cin>>T;//确定测试数据组数
for(int i = 1 ; i<=T ; i++) {//T组测试数据,循环T次
total=0;//每组数据开始前先归零
num=0;
do{//一直循环,直到停止。do-while也可以
cin>>temp;//输入一个数
total+=temp;//加到总和
num++;//个数加一
}while(getchar()!='\n') //输入一个空格或者换行,如果是空格就跳走继续while循环,如果是换行就跳出while
cout<<fixed<<setprecision(2)<<total/(double)num;//num是int型,转换成小数再除
if(i!=T) cout<<endl;//最后一行不输出换行
}
return 0;
}
每个数后面都跟一个空格,cin从缓冲区里读入一个数之后,后面的空格还留在缓冲区,所以处理完这个数之后用getchar()取一个字符看看是空格还是换行,刚好把缓冲区数后面剩下的的空格读走(不读走也行,cin遇到空格会跳过),判断一下这个字符是换行还是空格,是换行就跳出do-while,输出计算结果。