标题:编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到 ...
只看楼主
C00000001
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-5-8
结帖率:100%
 问题点数:0 回复次数:3 
编写一个程序,最多将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 错在哪了?

[此贴子已经被作者于2021-5-15 20:10编辑过]

搜索更多相关主题的帖子: double average SIZE int 输入 
2021-05-15 20:08
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
得分:0 
double* pd = new double[SIZE];// 数组未初始化为0, 存在垃圾值

for (int i = 0; i < SIZE; i++)    // 这里你将10个垃圾值相加
sum += pd[i];

你应该改为 while (i--)
2021-05-15 20:28
C00000001
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-5-8
得分:0 
回复 楼主 C00000001
double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
我通过new 分布内存,然后通过while来给数组赋值
2021-05-15 21:00
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
得分:0 
你这句没有错
double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
错在这里
for (int i = 0; i < SIZE; i++)    // 这里你将10个垃圾值相加
sum += pd[i];
2021-05-15 21:13



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




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

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