• 締切済み

Cプログラミング

#include <stdio.h> main(){ int i; int n; double data[100]; double total; double average; printf ("# of data ="); scanf ("%d" , &n); for (i = 0; i < n; i++){ printf("data[%d] = ", i+1); scanf("%lf" , &data[i]); } total = 0; for (i = 0; i < n; i++){ total = total +data[i]; } average = total / n; printf("total = %g\n", average); for (i = 0; i < n; i++){ printf("data[%d] : %6.1f %%\n" , i+1, (data[i] - average) / average * 100.0); } } 上のプログラムに対し、増加率の代わりに標準偏差を計算し出力するように改造せよ。という課題が出たのですが、標準偏差の計算の仕方が分かりません。教えてください。 よろしくお願いします。

みんなの回答

  • dra2jp
  • ベストアンサー率25% (18/72)
回答No.3

標準偏差の出し方は何もプログラミングの話ではないので (数学Cとかの分野) 数学の教科書を出してきて学べば良いと思います。

  • kamejiro
  • ベストアンサー率28% (136/479)
回答No.2

>標準偏差の計算の仕方が分かりません。 標準偏差の計算は、 1.平均値を求める 2.各々の数と平均値の差を算出する 3.2で出た数を一つずつ2乗する 4.3で出た数の平均を算出する 5.4の数にルートを掛ける 標準偏差については、ウィキペディアフリー百科にも掲載しています。 あとは、C言語の文法に従って頑張って、プログラミングをしてみて下さい。

参考URL:
http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE
  • salf
  • ベストアンサー率42% (27/64)
回答No.1

計算方法 つhttp://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE 平均値とかも出してるから、上からそのままやっていけばできるんじゃ?

関連するQ&A

  • プログラムについて(C言語)

    #include<stdio.h> int main() { int i,n,total; for(;;){ /* 無限ループ*/ printf("整数n?"); /* nの値の表示 */ scanf("%d",&n); /* ifとbreakを使った終了判定 */ if(n<0)break; total=1; for(i=1;i<=n;i++){ printf("i=%d ",i); total*=i; /* total←total*i(階乗の計算) */ } printf("total=%d\n",total); /* totalの値(結果)の表示 */ } printf("Thanks\n"); /* 終了メッセージの表示 */ return(0); } これは階乗を求めるプログラムなのですが、i++ではなくi--をつかって求める場合 どのように変更すればよいでしょうか? for(i=1;i<=n;i++){ あたりをいろいろ弄ってみたのですが、求めてる結果は得られませんでした

  • 標準偏差・分散

    標準偏差と分散を求めるプログラムで #include <stdio.h> #include <math.h> int main(void){ int i; double data[10]; double heikin, total = 0.0, variance = 0.0, deviation = 0.0; for ( i = 0; i < 10; i++ ){ printf("%d番目の値を入力:",i + 1); scanf( "%lf",&data[i] ); total += data[i]; } heikin = total / 10.0; for(i = 0; i < 10; i++ ){ variance += ((data[i]-heikin)*(data[i] - heikin))/10.0; } deviation += sqrt(variance); printf("平均値は%f\n" , heikin ); printf("分散は%fです。\n",variance); printf("標準偏差は%fです\n",deviation); getchar(); getchar(); return(0); } という感じでいいのでしょうか? 分散と標準偏差の式はこれであっているとおもうのですが・・・・。

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

    以前ここで質問して教えていただいたのですが、私の持っている本とプログラムが違っていました。 で、本のとおりにプログラムを書いてもうまく実行できません。 私が書いたのを下に載せるので、間違っているところを教えてください。 プログラムは、『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); } 何度もすいません…

  • C言語について

    #include <stdlib.h > #include <stdio.h> double sum ( double data[] , int number) { double result; int a ; result = 0; for (a = 0; a < number; a+1){ result += data[a]; } return (result); } double average ( double data[] , int number) { double result; result = sum(data,number)/number; return (result); } int main ( void ) { double heikin; double data[9]; double average; int number,i; printf("数値の数を入力(1~10) = "); scanf("%d",&number); printf("データを入力 "); for( i=0;i<number;i++ ) { printf("%d個目 = ",i+1); scanf("%d",&data[i]); } heikin = average(data,number); printf("平均は%lfです\n",heikin);//文を使って平均値(heikin)を出力 return(EXIT_SUCCESS); } というプログラムがありエラーで 「35行目」で記述エラーを発見しました。 「function pointer」を付け忘れています。 と出てきます。ほかのサイト様で写真とかありえないといわれましたのでテキストで再度質問させていただきました。 よろしくお願いします。 前投稿から編集もしているので少しプログラムが違います。

  • C言語のポインタのプログラムについての質問です。

    C言語のポインタについて質問です。 nこの配列データaを受け取り、それらの値をもとに、2つのデータを引数で受け取って交換する関数void swap(double *a,*b)を用いることにより最終的に降順に並べ替えて出力したのち、それらを平均(average)と標準偏差(standard deviation)を引数で受け渡す関数 void calc_ave_stddev(int n,double a[],double *ave,double*stddev)を利用して出力されるプログラムを教えてほしいです。 main関数内での書式は printf("enter n:"); scanf("%d,&n"); for(i=0;i<n;i++){ printf("enter a[%d]:",i); scanf("%lf"&a[i]); } main関数での結果の出力は、 for(i=0;i<n;i++){ printf("a[%d]=%lf\n",a[i]); } printf("ave=%lf stddev=%lf\n",ave,stddev); です。

  • c++について

    以下のプログラムをコンパイルしてみたのですが、うまく作動しません。 どこかに欠陥があるのでしょうか? 分かる方、よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <math.h> #pragma warning(disable : 4996) #define N 3 typedef struct Shop { char name[10]; int sale; } Shop; void pp(Shop*a) { int i; printf("\n"); for(i=0; i<N; i++,a++) printf("Name , Sale = %s ,\t%d\n",a->name,a->sale); printf("\n"); } int main(void) { double sum; //売上高合計 double ave; //売上高平均 double hensa1; /* double hensa2; */ /* double sd; //標準偏差 */ Shop*data,*t; int i,j; data=t=malloc(sizeof(Shop)*N); for(i=0; i<N; i++,t++) { printf("店舗名を入力してください\n"); scanf("%s", &t->name); printf("売上高を入力してください。\n"); scanf("%d", &t->sale); sum += t->sale; } ave = sum/N; for(i=0; i<N; i++,t++) hensa1 += (pow(ave-t->sale, 2)); t=malloc(sizeof(Shop)); for(i=0; i<N-1; i++) { for(j=i+1; j<N; j++) { if(data[i].sale > data[j].sale) { t[0]=data[i]; data[i]=data[j]; data[j]=t[0]; } } } printf("\n"); printf("%g\t:Sum\n%g\t:Average\n%g\t:Standard deviation\n", sum,ave,sqrt(hensa1)/N); pp(data); return 0; }

  • C言語 n!のプログラミング

    C言語で、入力されたnについてのn!を求めるプログラムを書きました。 #include<stdio.h> int main() { int total=1,i,n; scanf("%d",&n); for(i=1;i<=n;i++){ total*=i; } printf("%d",total); } しかし、このままだとn=13くらいからオーバーフローしてしまって、n=100やn=10000といった大きな数の場合のn!が求められませんよね? 万進法という方法を使って、10000未満の数を配列の要素に割り当てる(説明が正しいかわかりませんが…)と、うまくいくと聞きました。 万進法とはどのようなものでしょうか?やり方を教えてください。 また、C言語での、このプログラムの一例もできれば教えてください。 ですが、今一番知りたいのはどういう手順でプログラムを書けばいいのかということですので、そちらの方を詳しく教えてください。

  • 配列の和を求めるプログラム

    キーから入力したデータを配列に入力した後、その和を求めるプログラムを作成したいのですが、プログラミング初心者の私にはさっぱりわかりません。 和を求めたいのに平均値が出てきてしまいます。 どこが間違っているのか教えてください。 #include <stdio.h> float data[5]; float total(int max); void main(void) { int cnt = 0; float d; printf("please input a data: "); scanf("%f", &d); while((cnt < 5) && (d > 0.0)) { data[cnt] = d; cnt++; printf("please input a data: "); scanf("%f", &d); } printf("total data: %5.2f\n", total(cnt)); } float total(int max) { int i; float total = 0.0; for(i = 0; i < max; i++) { total += data[i]; } return total / max; }

  • c言語 

    答えを0にするこまち算のプログラムを組んでみたのですが、ここからどうしても進まなくなってしまいました。 自分ではいけるかなと思ったのですが、9-8-7+65-4321=9など答えがありえない数になってしまいます。 どこがいけないか教えてください。むしろ最初から組み直した方がよいのでしょうか… #include <stdio.h> int cul(); int num[9] ={9,8,7,6,5,4,3,2,1}; int total;/**/ int kigou[8]={0,0,0,0,0,0,0,0}; int main(){ for(kigou[0]=0;kigou[0]<3;kigou[0]++){ for(kigou[1]=0;kigou[1]<3;kigou[1]++){ for(kigou[2]=0;kigou[2]<3;kigou[2]++){ for(kigou[3]=0;kigou[3]<3;kigou[3]++){ for(kigou[4]=0;kigou[4]<3;kigou[4]++){ for(kigou[5]=0;kigou[5]<3;kigou[5]++){ for(kigou[6]=0;kigou[6]<3;kigou[6]++){ for(kigou[7]=0;kigou[7]<3;kigou[7]++){ keisan(); } } } } } } } } return 0; } int keisan(){ int n =0; int flag = 0; int t = 0; int i = 0; total = num[0]; /* for (n=0;n<9;n++) printf("kigou[%d] == %d",n,kigou[n]);確かめ*/ for(;n<8;n++){ if(kigou[n] == 0 && n == 0){ total = total * 10 + num[n+1]; for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ total = total * 10 + num[n+flag+1]; } n = n + flag; } flag=0; if(kigou[n]!= 0){ for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ t = num[n+1] * 10 + num[n+flag+1]; } n = n+ flag; total = total + t; } } /*0になる計算式の表示*/ kigou[8]=2;/*表示しないために空白を入れる*/ if(total==0){ for(i=0;i<9;i++){ printf("%d",num[i]); if(kigou[i]==0) printf("+"); if(kigou[i]==1) printf("-"); if(kigou[i]==2) printf(""); } printf("=%d\n",total); } return 0; }

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

専門家に質問してみよう