回答受付が終了しました

こんにちは。 c言語について質問があります。 c言語について以下のような問いが示されたのですが、長考し、実行を繰り返してもなかなかうまくできません。

C言語関連135閲覧

回答(4件)

0

#include <stdio.h> #include <stdlib.h> #include <math.h> //Compiler version gcc 6.3.0 typedef struct cell{ int n; struct cell *next; } cell; int main() { cell tail = {0,NULL},head = {0,&tail},*p,*last = &head; int c,count = 0; for (scanf("%d",&c);c >= 0;scanf("%d",&c)) { p = (cell *)malloc(sizeof(cell)); if (p == NULL) { printf("メモリ確保に失敗しました。\n"); return EOF; } last -> next = p; p -> n = c; p -> next = &tail; last = p; count++; } if (!count) { printf("データがありません。\n"); return 0; } int data[count]; int i; cell *prev = NULL; for (i = 0,p = head.next;p -> next != NULL;i++,p = p -> next) { free(prev); data[i] = p -> n; prev = p; } free(prev); int min = data[0],max = data[0],sum = 0,sum2 = 0; double sd,v,e; double sds[count]; printf("data = "); for (int i = 0;i < count;i++) { sum += data[i]; sum2 += data[i] * data[i]; min = min > data[i] ? data[i] : min; max = max < data[i] ? data[i] : max; printf("%d ",data[i]); } printf("\n"); e = (double)sum / count; v = (double)sum2 / count - e * e; sd = sqrt(v); printf("最小値 = %d,最大値 = %d,平均値 = %f,分散 = %f\n", min,max,e,v); printf("偏差値 = "); for (int i = 0;i < count;i++) { sds[i] = 10 * ((double)data[i] - e) / sd + 50; printf("%f ",sds[i]); } printf("\n"); return 0; } ------- 1 2 3 4 -1 data = 1 2 3 4 最小値 = 1,最大値 = 4,平均値 = 2.500000,分散 = 1.250000 偏差値 = 36.583592 45.527864 54.472136 63.416408 Process finished.

0

> ⑴の問題は完成したコードを読むと理解できると思う これを自力で書けなくて、何ならできるんですか? ただ数値を入力するだけも無理ってこと?

1

問題(1)は配列を使う必要も無いし、仮に365日24時間、入力されても問題は無い。 問題(2)は入力できる件数に制限がある。件数は動作環境で異なる場合がある。 次に数学的な知識が無いと標準偏差は求めることは無理でしょうね、、、 そもそも、最大・最小・平均などを求めるにしても、入力される数の上(下)限に決めていないので、プログラムは作れないとも言える。 プログラムは有限の問題しか解けない、、、、

1人がナイス!しています

2

勉強中とお見受けしますが、2つの点で誤解されてると思います。 一つは問題の答えを聞いたら理解出来ると思ってる点。 それは違います。 むしろ既にほぼ理解出来ているコードでの練習によって確実な理解が出来ます。 例えば配列がまだちゃんと理解出来ないんですよね。多分。 なら、配列の練習コードが有りますよね。それが動くのほ当たり前。それを色々アレンジする事で条件が変化したらどんなエラーが出るとか出ないとか、繰り返す事で体得しないと身につかないんです。 もう一つはエラーの解決方法、これは環境により異なるので、一言では言えませんけど、そのコンパイラでのデバッグ(エラー等の問題解決法)について検索して調べて、判っているコードをアレンジして予め練習しなければ上手く出来る様にはならないのです。 運転に例えれば、作ると言う事はいきなり路上運転するようなもの。練習コースである程度走ってからでないと難しいのです。 或いは数学などで新しい概念を習う時は必ず練習問題を繰り返しますよね。 だいたい同じのを10回くらいシチュエーションを変えて使わないと使いこなせる様にはならないもの。 説明で判るなら教科書や、ネットで十分な筈じゃないですか。 自分で使いこなせないとモノにならないことを理解して下さいね。

2人がナイス!しています

こんばんは。 ご返信ありがとうございます。 自分の甘い考えを突きつけられ、自分の勉強方は単なるコピーに過ぎないということがわかりました。 これからはもっと手を動かして学んでいきたいと思います。 またご縁があればご指導のほどよろしくお願いします。