- ベストアンサー
C言語プログラムの練習問題と回答
- C言語プログラムの練習問題と回答です。数値を繰り返して入力し、0が入力されたら入力を止め、平均値を表示するプログラムを作成します。
- プログラムの要点は、値の合計と値の個数を数えるための変数を用意し、入力された値が0でない限り、値を合計し、個数をカウントすることです。
- 8行目の「sum += value;」で値の合計を計算し、9行目の「count++;」で値の個数をカウントします。このようにして、値の合計と値の個数が関連づいています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
■ 納得の仕方その1 > いきなり、count++; とありますが? それを言ったら、 > 5) scanf( "%d", &value ); ↑の value がいきなり ↓でいきなり使われているし、 > 6) if( value == 0 ) さらにいきなりこんな↓ところでも、使われちゃってる > 8) sum += value; もちろん↓なんてされてないよ。 > プログラム同士を関連づけさせるお膳立て 『count++;』だけ目の敵にすることはないでしょ? ■ 納得の仕方その2 すべての変数は、もともと互いに関連が無いから、 関連は式で作る。 sum と value の関連は value を sum に加えるという関係。 > 8) sum += value; sum と count の関連は sum を count で割るという関係。 > printf( "平均は%d", sum / count ); ■ 納得の仕方その3 この 2つ↓は、 > 8) sum += value; > 9) count++; 『8) を実行したら、次に 9) を実行するという順番(シーケンス)の関係』 と 『8) を実行したら、9) を必ず実行するという、分割できない処理単位(トランザクション)という関係』 を持っている。
その他の回答 (5)
- mesoneer
- ベストアンサー率20% (2/10)
質問者さまが「素人」と書かれているので、 プログラムを始めた頃に陥りそうな間違いを少し考えてみました。 1.プログラムの実行順 上記のプログラムは、以下の順で実行されます。 1) → 2) → 3) → 4) → 5) → 6) → 8) → 9) → 10) → 4) → 5) → → 6) → 8) → 9) → 10) → 4) →・・・→ 4) → 5) → 6) → 7) → printf 4)や10)をループに入れるかどうかは議論の余地がありますが、この流れはOKでしょうか? 2.変数名 sum,value,countはただの変数です。 意味ありげな名前なので、関数やプロパティだと勘違いしてしまってはいないでしょうか? プログラムは思い込みでどツボにはまってしまいますので、 そんな時は一旦頭の中をリセットして見直してみるとよいかと思います。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
プログラムの各行の命令が、それぞれ独立して同時に実行されると思ってませんか? 世の中にはそんな動作をするプログラム言語も存在しますが 通常、FORTRAN,COBOL,C,JAVA,BASICなどの言語では特別な場合を除いて ソースコードの上から順番に実行されます。 従って、(9) は (8) の終了後にのみ実行されます。
- TT414
- ベストアンサー率18% (72/384)
>プログラム同士を関連づけさせるお膳立て(プロセス)が何か必要だと、素人の私にとりましてそう思えます?流れ的に見て理解できますが、なぜ8)と9)が関連づくのでしょうか 今回の場合8)と9)の間に同一回数の実行が保証されます、8)の合計の計算後9)のカウントアッピュする、それ以外の関連はありません。
- 山田 太郎(@testman199)
- ベストアンサー率17% (438/2463)
平均値ってどのようにして求めるか知ってる?
- uruz
- ベストアンサー率49% (417/840)
sumもcountも独立したただの変数です。 プログラムの構造的に関連付けられてなどいません。 sumは入力の積算値、countは入力の回数というようにプログラムの考え方(構成)として関連付いているにすぎません。
お礼
皆様ご回答誠にありがとうございました。 済みませんでした。初歩的なおおきな見落としをしていました。 最初に int count = 0;変数指定があり、なので、いきなりcount++; ではなかったです。 失礼しました。