注册 登录
编程论坛 C++教室

只用for语句求平均值的单行输出问题

terry64no 发布于 2010-09-30 21:57, 1351 次点击
大家好,初学C++,现在遇到一道用for语句求平均值的问题
题目:使用一条for语句求若干整数的平均值并打印结果。假定最后读入的值是标记值9999。
     一次运行的示范输入序列如下:
   10 8 11 7 9 9999
  表明程序应计算9999之前的所有值的平均值。

我的语句如下:
#include<iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int total = 0;
    int counter;
    double average;
    int a;      //a代表输入值
   
    cout << "Enter(9999 to quit):";
    cin >> a;      //此行为输入一个值,进行判断
   
    for ( counter = 1; a != 9999; counter++ )
    {
        
        cout << a << endl;      
        total += a;
        
        cin >> a;
        //average = static_cast< double >( total )/counter;
    }
      
    cout << " The average is:" << average << endl;
   
    system("pause");
    return 0;
}  

问题来了,程序可以运行,但显示的只是一行一个输入值,就是以下效果
1
2
3
4

怎样才能显示 1 2 3 4 这样的效果?

PS,附带另外一个问题,希望大家可以解答!
如果程序中有一句“cout << fixed <<setprecosion(2);”这样的语句,是表示在这语句之后的所有输出语句,都会显示两位小数吗?
11 回复
#2
terry64no2010-10-01 07:09
求帮助.....
#3
terry64no2010-10-02 07:31
继续求解答...
#4
cnfarer2010-10-02 07:44
输入时,数之间用空格,输入9999时回车!
#5
聋眼睛瞎耳朵2010-10-02 17:09
你的程序出现一行输出一个输出值的原因是:你写输出函数(cout<<a<<endl;)时,用endl了,endl会让你的每一次输出都换行。
你把输出函数改为:cout<<a<<" ";就可达到你想要的效果了
#6
terry64no2010-10-04 16:40
好,我先试一试!
#7
sunmingchun2010-10-04 21:17
楼主你的程序输出平均值了吗?
我改了一下 你看看
#include<iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int total = 0;
    int counter;
    double average;
    int a;      //a代表输入值
   
    cout << "Enter(9999 to quit):";
    cin >> a;      //此行为输入一个值,进行判断
   
    for ( counter = 1; a != 9999; counter++ )
    {
        
        cout <<"  "<<a;      
        total += a;
        
        cin >> a;
        average=1.0*total/counter;

        //average = static_cast< double >( total )/counter;
    }
      
    cout << " The average is:" << average << endl;
   
    system("pause");
    return 0;
}  


[ 本帖最后由 sunmingchun 于 2010-10-4 21:18 编辑 ]
#8
zaq20082010-10-05 14:56
这样子修改应该符合LZ要求了
程序代码:
#include<iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int total = 0;
    int counter;
    double average;
    int a; //a代表输入值

    cout << "Enter(9999 to quit):";
    cin >> a; //此行为输入一个值,进行判断

    for ( counter = 1; a != 9999; counter++ )
    {

        counter-1? cout  << " "<< a:cout << a;
        total += a;

        cin >> a;
    average = static_cast< double >( total )/counter;
    }
    cout << "\n" << " The average is:" << average << endl;
    return 0;
}


[ 本帖最后由 zaq2008 于 2010-10-5 14:58 编辑 ]
#9
zaq20082010-10-05 15:11
回复 楼主 terry64no
应该是setprecision  是控制小数点后面位数的 要包含 iomanip 头文件
用法 在输出浮点数前先输出setprecision(n)
用完以后改回原来的 需输出setprecision(6)
#10
tansuo2010-10-07 21:56
语句这有“cout<<a<<endl”当然会换行了。把“endl”去了改成空格键就行了。是的,后面的都是按2位,小数输出,不要忘了iomanip的头文件。只有setw的设置才对其后的一个输出项有效。
#11
保保2010-10-09 00:23
#include<iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int total = 0;
    int counter;
    double average;
    int a=0;      //a代表输入值
   
    cout << "Enter(9999 to quit):"<<endl;
     //此行为输入一个值,进行判断
    cin >> a;
    for ( counter = 1; a != 9999; ++counter )
    {
        
               
        total += a;
      
        cin >> a;
        //average = static_cast< double >( total )/counter;
    }
      average = static_cast< double >( total )/(counter-1);
    cout << " The average is:" << average << endl;
   
    system("pause");
    return 0;
}  
#12
terry64no2010-10-09 13:41
以下是引用zaq2008在2010-10-5 15:11:01的发言:

应该是setprecision  是控制小数点后面位数的 要包含 iomanip 头文件
用法 在输出浮点数前先输出setprecision(n)
用完以后改回原来的 需输出setprecision(6)
了解!
1