[英]Finding min max in C++
我的練習如下:給定一個包含 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;
我嘗試了一些示例,但兩種代碼產生的結果完全相同。 這是為什么? 還是我哪里錯了?
好:
沒有一條線本身是錯誤的。 更重要的是,它們只是最好以另一種方式完成。 IE:
int first =0
只是確保first == 0
開始。 int first;
可能會導致問題,因為它最初被分配給一個任意數字(無論發生在變量指向的內存地址處)
盡管++i
和i++
在 for 循環中的工作方式與迭代器相同,但它們在其他用法上有非常細微的差別。 在這里閱讀更多相關信息
first += x
本質上是first = first + x
,它更清楚地概述了你的代碼和它之間的區別。 這也很清楚為什么int first = 0
如此重要。 如果first
是某個隨機值,那么所有數字的總和(應該是first
)將被隨機分配為從一個數字開始,而不總是 0。
事實上,這最后一個是您唯一錯誤的地方。 mean
定義為所有數據的總和除以數據點的數量(與average
相同),其中median
被描述為數據的中點,或描述最大值和最小值之間中點的數字您的數據。 你在哪里計算你認為的mean
實際上是median
。 這樣做的復雜之處在於,有時,根據您的數據, mean = median
。 例如,如果您的數據是3,4,5
那么均值和中位數都等於4
我希望這能為你澄清事情:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.