【问题标题】:Extracting the minimum value from a file using a while loop c++使用while循环c ++从文件中提取最小值
【发布时间】:2021-03-20 10:57:51
【问题描述】:

我需要在我的声明中将最小值 (minValue) 设置为 -1。我该如何使用 || (或条件)在我的while循环中,考虑到负值结束程序,从一组正数中提取最小值?此外,双平均变量(平均值)并未计算预期值。例如,如果该值应为 35.7789,则返回 35.0000。我还打算在不必要时返回不带小数点的平均值。例如,如果用户首先输入负值,则平均值应为 0 而不是 0.0000。我如何操纵平均变量来做到这一点?

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int intVal;
    int sum = 0;
    int maxValue = -1;
    int minValue = -1;
    double average = static_cast<double>(0);
    int count = 0;
    int evenCount = 0;
    int oddCount = 0;
    cout << endl << "Enter an integer (negative value to Quit):  ";
    cin  >> intVal;
    cout << endl;
   
    
    while(intVal >= 0)
    {
      if(intVal > maxValue)
          maxValue = intVal;
      if(intVal < minValue)
          minValue = intVal;
        count ++;
        sum += intVal;
        
        if(intVal > 0)
            average = sum / count;
        
        if(intVal % 2 == 0)
            evenCount ++;
        else
            oddCount ++;
        
        cout << "Enter an integer (negative value to Quit):  ";
        cin  >> intVal;
        cout << endl;
    }
    
        cout << fixed << setprecision(4);
        cout << "Values entered:" << setw(8) << right << count << endl;
        cout << "Sum of numbers:" << setw(8) << right << sum << endl;
        cout << " Average value:" << setw(8) << right << average << endl;
        cout << " Maximum value:" << setw(8) << right << maxValue << endl;
        cout << " Minimum value:" << setw(8) << right << minValue << endl;
        cout << "  Even numbers:" << setw(8) << right << evenCount << endl;
        cout << "   Odd numbers:" << setw(8) << right << oddCount << endl;
        cout << endl;
        
}

【问题讨论】:

  • average = sum / count; 右侧是两个整数的除法,其结果是一个整数,然后将其转换为双精度并分配给average。顺便说一句,double average = static_cast&lt;double&gt;(0); 是写double average = 0.; 的一种复杂方式。
  • 我需要将 count 和 sum 声明为整数。除以两个整数时,我有什么办法可以返回精确到小数点后四位的值?
  • 强制除法以浮点数进行,例如average = (double)sum / count;average = static_cast&lt;double&gt;(sum) / count;.
  • 这行得通,我现在只是在寻找最低限度的答案。
  • 你已经接受that answer ;-)

标签: c++ file min


【解决方案1】:

我需要在我的声明中将最小值 (minValue) 设置为 -1。

初始化为-1,所有正数都将大于minValue

您可以使用最大值或第一个输入值设置/初始化它,或者在循环中处理特殊情况:

if (minValue == -1 || intVal < minValue)
    minValue = intVal;

另外,双平均变量(平均值)没有计算预期值。

你的平均值是整数运算,你必须在计算过程中使用浮点数:

average = static_cast<double>(sum) / count;

平均值应为 0 而不是 0.0000

删除对std::setprecision(4);的调用

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2017-10-12
    • 2021-04-05
    • 2018-04-17
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2023-02-07
    相关资源
    最近更新 更多