プロが教えるわが家の防犯対策術!

有るサイトにあるC言語プログラムの練習問題と回答です。
問題→「数値を繰り返して入力し、0が入力されたら入力を止め、平均値を表示するプログラムを作成しなさい。」
以下回答
1) int sum = 0;
2) int count = 0;
3) int value;

4) for( ; ; ){
5)  scanf( "%d", &value );

6)  if( value == 0 )
7)  break;

8)  sum += value;
9)  count++;
10 }

printf( "平均は%d", sum / count );

以上ですが、プログラムの9)にいきなりcount++; とありますが、入力した回数を記憶する(カウンタ)ためのものだと思います。
 5)で繰り返し入力した数が8)で合計され9)のcount++;で入力された回数を記憶させるとの流れだと思います。そこで疑問?ですが、8)で加算された回数を9)でカウンタする場合、プログラム同士を関連づけさせるお膳立て(プロセス)が何か必要だと、素人の私にとりましてそう思えます?流れ的に見て理解できますが、なぜ8)と9)が関連づくのでしょうか?
 よろしくお願いいたします。

A 回答 (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) を必ず実行するという、分割できない処理単位(トランザクション)という関係』
を持っている。
    • good
    • 0
この回答へのお礼

皆様ご回答誠にありがとうございました。
済みませんでした。初歩的なおおきな見落としをしていました。
 最初に
int count = 0;変数指定があり、なので、いきなりcount++;
 ではなかったです。
 失礼しました。

お礼日時:2011/08/20 05:22

質問者さまが「素人」と書かれているので、


プログラムを始めた頃に陥りそうな間違いを少し考えてみました。

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はただの変数です。
 意味ありげな名前なので、関数やプロパティだと勘違いしてしまってはいないでしょうか?


プログラムは思い込みでどツボにはまってしまいますので、
そんな時は一旦頭の中をリセットして見直してみるとよいかと思います。
    • good
    • 0

プログラムの各行の命令が、それぞれ独立して同時に実行されると思ってませんか?


世の中にはそんな動作をするプログラム言語も存在しますが
通常、FORTRAN,COBOL,C,JAVA,BASICなどの言語では特別な場合を除いて
ソースコードの上から順番に実行されます。
従って、(9) は (8) の終了後にのみ実行されます。
    • good
    • 0

>プログラム同士を関連づけさせるお膳立て(プロセス)が何か必要だと、素人の私にとりましてそう思えます?流れ的に見て理解できますが、なぜ8)と9)が関連づくのでしょうか


今回の場合8)と9)の間に同一回数の実行が保証されます、8)の合計の計算後9)のカウントアッピュする、それ以外の関連はありません。
    • good
    • 0

平均値ってどのようにして求めるか知ってる?

    • good
    • 0

sumもcountも独立したただの変数です。


プログラムの構造的に関連付けられてなどいません。
sumは入力の積算値、countは入力の回数というようにプログラムの考え方(構成)として関連付いているにすぎません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!