- 締切済み
簡単なプログラムなんですが…
C言語の簡単なプログラムなんですが、私のような初心者には良く分かりません… 出来るだけ詳しく教えていただけるとうれしいです。 下の2つのプログラムの作り方が理解できません。 (1)データ数nとn個のデータを入力して、その平均を求めるプログラム。 (2)(1)のプログラムに合計と標準偏差を計算して出力する機能を追加したプログラム。 C言語に詳しい方お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
#include <stdio.h> // printf( ), scanf( ) で必要 #include <math.h> // sqrt( ), fabs( ) で必要 #include <malloc.h> // malloc( ), free( ) で必要 int main() { int* val; // scanf( ) で取り込んだ整数をしまう int i, n; int sum = 0; // 和 double sumsq = 0.0; // 平方和 ※(2) double mean; // 平均 double hensa; // 標準偏差 ※(2) // データ数nの入力 printf("データ数(1以上)?"); scanf("%d", &n); if(n < 1) return -1; // n個のデータ領域確保 val = (int*)malloc(sizeof(int) * n); // データの入力ループ for (i = 0; i <n; i++) { printf("%d個目のデータ?", i+1); scanf("%d", &val[i]); sum = sum + val[i]; // 合計を求める sumsq = sumsq + val[i] * val[i]; // 平方和を求める ※(2) } // 平均を計算して表示 mean = (double)sum / n; printf("平均 %lf\n", mean); // 標準偏差を求めて表示 ※(2) hensa = sqrt(fabs(sumsq /n - mean * mean)); printf ("標準偏差 = %lf\n", hensa); // 合計を表示 ※(2) printf ("合計 = %d\n", sum); // n個のデータ領域の解放 free(val); return 0; } ================================================ ※(2)…(2)番のプログラムで追加する部分 参考URLから変形したものです。 標準偏差の求め方が数学の問題なので、丸っきりパクって あります。入力値は整数にしてあります。 詳しく説明すると… どの程度詳しければ良いか思いつかないので、気の向く ままに書きます。 int … 整数型 double …浮動少数点数型(要するに少数) printf() …標準出力(表示) scanf() …標準入力 "%d" …整数書式(int 用) "%lf" …長浮動小数点数書式(double 用) malloc() …可変配列用領域確保 free() …領域解放(malloc とペア) sqrt() …平方根計算 fabs() …絶対値計算 とりあえず、そんな具合です。
すみません、一部修正です。 printf("%d個目のデータは?",cnt+1); scanf("%d",&d[cnt])
こんな感じで... main() { int cnt,num,d[100],kei,avg; /* データ数入力 */ printf("データの数は?"); scanf("%d",&num); /* データ入力 */ for(cnt=0;cnt<num;cnt++) { printf("%d個目のデータは?",num+1); scanf("%d",&d[num]) kei=<<合計計算>> } /* 平均 */ avg=<<平均計算>> printf("平均:%d\n",avg); /* 標準偏差 */ <<標準偏差計算>> <<出力>> } 全部書くと勉強にならないので”<<xxx>>”は自分で考えてみてください。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 プログラムは構文や命令文を覚えるより、処理の流れを考えるのがキモです。 まず平均値を求める公式は分かりますね。値を全部足して、値の数で割ればOKです。 5個の値の平均値を求めるには、 1.1個目のデータを入力する 2.2個目のデータを入力する 3.3個目の~ 中略 6.入力された5個を全て足す 7.その合計を5でわる 8.割った値を表示 9.終了 となります。 とりあえずこれをヒントに頑張ってみてください。 それぞれの処理に使用する命令文や構文を考えてみると分かりやすいかも知れません。 もし詰まったらまた質問してください。 参考になれば幸いです(..