标题:编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到 ...
只看楼主
C00000001
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-5-8
结帖率:100%
 问题点数:0 回复次数:4 
编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到非数字输入时将结束输入,并报告这些数的平均值以及数组中有多少个数字大于平
编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到非数字输入时将结束输入,并报告这些数的平均值以及数组中有多少个数字大于平均值
代码1:#include<iostream>
#include<cctype>
const int SIZE = 10;
int main()
{
    using namespace std;
    double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
    if (i == 0)
        cout << "There is no data." << endl;
    else
    {
        double average, sum;
        int count = 0;
        sum = 0;
        for (int i = 0; i < SIZE; i++)
            sum += pd[i];
        average = sum / SIZE;
        cout << "Average: " << float(average) << endl;
        for (int i = 0; i < SIZE; i++)
        {
            if (average < pd[i])
                count++;
        }
        cout << "Number(beyond average): " << count << endl;
    }
    delete[] pd;
    return 0;
}
代码2:
#include<iostream>
#include<cctype>
const int SIZE = 10;
int main()
{
    using namespace std;
    double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        i++;
    }
    if (i == 0)
        cout << "There is no data." << endl;
    else
    {
        double average, sum;
        int count = 0;
        sum = 0;
        for (int i = 0; i < SIZE; i++)
            sum += pd[i];
        average = sum / SIZE;
        cout << "Average: " << float(average) << endl;
        for (int i = 0; i < SIZE; i++)
        {
            if (average < pd[i])
                count++;
        }
        cout << "Number(beyond average): " << count << endl;
    }
    delete[] pd;
    return 0;
}
若删除代码1中
if (!isdigit(pd[i]))
            break;
这个程序就可以正确运行;
但是我想通过
if (!isdigit(pd[i]))
            break;
来判断输入的是否为数字。
我代码1 错在哪了?
搜索更多相关主题的帖子: 输入 double int SIZE average 
2021-05-15 20:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
很多逻辑错误(而非语法错误),……,给你一个参考吧

程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    double buf[10];
    size_t n = 0;
    for( ; n!=size(buf) && cin>>buf[n]; ++n );

    if( n == 0 )
    {
        cout << "There is no data." << endl;
        return 0;
    }
    
    double average = 0;
    for( size_t i=0; i!=n; ++i )
        average += buf[i];
    average /= n;
    cout << "Average: " << average << endl;
    
    size_t count = 0;
    for( size_t i=0; i!=n; ++i )
        count += buf[i]>average;
    cout << "Number(beyond average): " << count << endl;
}


输入
    1 2 3 4 5 6 7 8 9 10
输出
    Average: 5.5
    Number(beyond average): 5

输入
    1 2 3 4 5 a
输出
    Average: 3
    Number(beyond average): 2

当然,正常的程序员不会去重复造轮子,所以工作中代码常常这么写
程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <numeric>
using namespace std;

int main( void )
{
    double buf[10];
    size_t n = 0;
    for( ; n!=size(buf) && cin>>buf[n]; ++n );

    if( n == 0 )
    {
        cout << "There is no data." << endl;
        return 0;
    }

    double average = accumulate( buf, buf+n, 0.0 ) / n;
    cout << "Average: " << average << endl;

    size_t count = count_if( buf, buf+n, [average](auto x){return x>average;} );
    cout << "Number(beyond average): " << count << endl;
}
2021-05-15 21:53
C00000001
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-5-8
得分:0 
回复 2楼 rjsp
感谢
2021-05-16 09:05
C00000001
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-5-8
得分:0 
回复 2楼 rjsp
cin对象是不是能根据变量的类型来判断输入类型是否正确,通过返回bool值来作为判断for的判断依据?
2021-05-16 09:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
cin 之类的“流”是有状态的,如果其读取失败,它就会更改自己的状态
https://zh.
2021-05-17 08:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505746-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.361079 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved