• 締切済み

教えていただいたのですが…

以前ここで質問して教えていただいたのですが、私の持っている本とプログラムが違っていました。 で、本のとおりにプログラムを書いてもうまく実行できません。 私が書いたのを下に載せるので、間違っているところを教えてください。 プログラムは、『nとn個のデータを入力して平均を求める』というものです。 あと、これに合計と標準偏差を計算して出力するプログラムも加えて教えていただけるとうれしいです。 #include<stdio.h> #define NMAX 1000 main() { double x[NMAX],sum=0.0,average; int i,n; printf("Input the number of DATA"); scanf("%d",&n); for (i=0; i<n; i++) { printf("Input %d-th DATA;",i+1); scanf("%lf",&(x[i])); } for(i=0; i<n; i++); { sum+=x[i]; } average=sum/n; printf("Average=%lf\n",average); } 何度もすいません…

みんなの回答

noname#2009
noname#2009
回答No.3

QNo.300464 でも書きましたが・・・ そっからの修正だと、 -------------------------------------------- #include<stdio.h> #include <math.h> // sqrt( ), fabs( ) で必要  ※(2) #define NMAX 1000 main() { double sumsq = 0.0; // 平方和 ※(2) double hensa; // 標準偏差 ※(2) double x[NMAX],sum=0.0,average; int i,n; printf("Input the number of DATA"); scanf("%d",&n); for (i=0; i<n; i++) { printf("Input %d-th DATA;",i+1); scanf("%lf",&(x[i])); // printf("%lf\n", x[i]);h } //修正 for(i=0; i<n; i++); for(i=0; i<n; i++) { sum+=x[i]; sumsq = sumsq + x[i] * x[i]; // 平方和を求める ※(2) } average=sum/n; printf("Average=%lf\n",average); // 標準偏差を求めて表示 ※(2) hensa = sqrt(fabs(sumsq /n - average * average)); printf ("標準偏差 = %lf\n", hensa); // 合計を表示 ※(2) printf ("合計 = %d\n", sum); } -------------------------------------------- ・修正個所は「// 修正」の部分 ・(2)の課題分の追加は「※(2)」のある行です。 理由は「GOLDEN」さんと「wolv」さんがなさっている 適格な解説の通りです。本に違うことが書かれていても 助言者のアドバイスの方が生きた声ですので。。。 課題大変だね

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=300464
すると、全ての回答が全文表示されます。
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

変動S、分散V、標準偏差s は、それぞれ、 S = Σ (x[i] - average)^2 V = S/(n-1) s = √V なので、標準偏差を定義どおりに計算するなら、 float S=0.0,V,s; を宣言しておき、平均を計算したあとの部分で、 for(i=0;i<n;i++)S+=(x[i]-average)^2; V=S/(n-1); s=sqrt(V); として計算し、printfなどで結果を表示すればいいでしょう。 数学関数であるsqrtを使うためには、ソースの冒頭に#include<math.h>を付け加え、コンパイル時に -lm を追加する必要があったかもしれません。 例:  cc -o my_program my_program -lm

すると、全ての回答が全文表示されます。
  • GOLDEN
  • ベストアンサー率46% (283/607)
回答No.1

2回目のfor文の最後にセミコロン(;)が付いているため、forを抜けた時点でiがnに なってしまっているため、不定な値を参照し、それを平均しているので、データが おかしくなるんじゃないですか? 合計は、既に変数sumの中に求まっていますから、それを表示すればOKでしょう printf("Sum=%lf\n",sum); 標準偏差は、どうやって求めるのかが解らないので、答えられません

すると、全ての回答が全文表示されます。

関連するQ&A