我的练习如下:给定N个整数的列表,找到它的平均值(作为双精度),最大值,最小值和范围。您的程序将首先询问N,即列表中的整数,用户将输入该整数。然后用户将输入N个更多数字。
这是我的代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Input n: ";
cin >> n;
int first; //**LINE NUMBER 1**
cout << "No 1 is: ";
cin >> first;
int max = first;
int min = first;
for (int i=1; i<n;i++) //**LINE NUMBER 2**
{
int x;
cout << "No " << i+1 << " is: ";
cin >> x;
first = x; //**LINE NUMBER 3**
if (max < x)
{
max = x;
}
if (min > x)
{
min = x;
}
}
cout << "max is: " << max << endl;
cout << "min is: " << min << endl;
cout << "mean is: " << (double) (max+min)/2 << endl; //**LINE NUMBER 4**
cout << "range is: " << max - min << endl;
return 0;
}
然而,解决方案有点不同:
对于第1行,它是int first=0;
而不是int first;
对于第2行,它是for (int i=1; i<n;++i)
而不是for (int i=1; i<n;i++)
对于第3行,它是first += x;
而不是first = x;
对于第4行,它是cout << "mean is: " << (double) first/n<< endl;
而不是cout << "mean is: " << (double) (max+min)/2 << endl;
我尝试了一些例子,但两个代码产生了完全相同的结果。这是为什么?或者我在某处错了?
答案 0 :(得分:3)
好:
这些线本身都不是错误的。更重要的是,他们最好以另一种方式完成。即:
int first =0
只是确保first == 0
开头。 int first;
可能会导致问题,因为它被分配,最初分配给任意数字(无论发生在变量指向的内存地址处)
虽然++i
和i++
在for循环中的工作方式与迭代器的工作方式相同,但在其他用法方面却略有不同。详细了解here
first += x
基本上是first = first + x
,它更清楚地概述了您的代码与它之间的区别。这也很清楚为什么int first = 0
如此重要。如果first
是一个随机值,那么所有数字的总和(这是first
应该是什么)将被随机分配为从一个数字开始,而不是始终为0。
这最后一个是你唯一的一个,实际上是错的。 mean
被定义为所有数据的总和除以数据点的数量(与average
相同),其中median
被描述为数据的中间点,或者描述数据最大值和最小值之间中间点的数字。在计算您认为的内容时,mean
实际上是median
。这种情况的复杂性有时取决于您的数据mean = median
。例如,如果您的数据为3,4,5
,则均值和中位数均等于4
我希望这能为你澄清一些事情:)