-1

読み取った 15 個の数値の分散と標準偏差を計算する必要があります。理由はわかりませんが、関数が実行されず、コンソールが点滅するだけです。誰かが問題が何であるかを説明してくれませんか、ありがとう。

 #include <iostream>
 using namespace std;

void stats(int array[], double& var, double& sd);

int main ()
{
int array[15];
double var = 0, sd = 0;
cout << "Please enter 15 numbers to calculate var and SD\n";
for(int i = 0; i < 15; i++)
{
    cout << "Enter number: ";
    cin >> array[i];
}

stats(array,var,sd);

cout << "Numbers entered are: ";
for(int i = 0; i < 15; i++)
{
    cout << array[i] << " ";
}

cout << "Variance is: " << var << endl;
cout << "Standard deviation is: " << sd << endl;
}

関数定義

void stats(int array[],double& var, double& sd)
{
int sum = 0;
double sum2 = 0;
double mean = 0;

for(int i = 0; i < 15; i++)
{sum = sum + array[i];
}

mean = sum/15;

for(int i = 0; i < 15;)
{sum2 = pow((array[i]-mean),2) + sum2;
}

var = sum2/15;
sd = pow(var,0.5);}
4

2 に答える 2

6
for(int i = 0; i < 15;)
{sum2 = pow((array[i]-mean),2) + sum2;
}

そのループはインクリメントされないiため、永久に実行されます。そこを見逃したi++ので、次のように開始する必要があります

for(int i = 0; i < 15; i++)
于 2013-11-05T15:52:53.590 に答える
1

あなたのスタイルを改善するのに役立つかもしれないいくつかの発言:

  • ハードコードされた 15 を取り除きたい場合は、配列の代わりにベクトルを使用しpush_backcin
  • int の場合は違いはありませんが、 (イテレータの場合はパフォーマンスの点で違いが生じる可能性があります)++iよりも優れています。i++
  • を使用して、ベクトルのすべての要素を合計できますstd::accumulate
  • pow何かを 2 乗するのは少し効率が悪いので、数値自体を乗算するだけでよい
  • main0 を返す必要があります
于 2013-11-05T16:20:18.620 に答える