有るサイトにある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)が関連づくのでしょうか?
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
■ 納得の仕方その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) を必ず実行するという、分割できない処理単位(トランザクション)という関係』
を持っている。
皆様ご回答誠にありがとうございました。
済みませんでした。初歩的なおおきな見落としをしていました。
最初に
int count = 0;変数指定があり、なので、いきなりcount++;
ではなかったです。
失礼しました。
No.6
- 回答日時:
質問者さまが「素人」と書かれているので、
プログラムを始めた頃に陥りそうな間違いを少し考えてみました。
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はただの変数です。
意味ありげな名前なので、関数やプロパティだと勘違いしてしまってはいないでしょうか?
プログラムは思い込みでどツボにはまってしまいますので、
そんな時は一旦頭の中をリセットして見直してみるとよいかと思います。
No.5
- 回答日時:
プログラムの各行の命令が、それぞれ独立して同時に実行されると思ってませんか?
世の中にはそんな動作をするプログラム言語も存在しますが
通常、FORTRAN,COBOL,C,JAVA,BASICなどの言語では特別な場合を除いて
ソースコードの上から順番に実行されます。
従って、(9) は (8) の終了後にのみ実行されます。
No.3
- 回答日時:
>プログラム同士を関連づけさせるお膳立て(プロセス)が何か必要だと、素人の私にとりましてそう思えます?流れ的に見て理解できますが、なぜ8)と9)が関連づくのでしょうか
今回の場合8)と9)の間に同一回数の実行が保証されます、8)の合計の計算後9)のカウントアッピュする、それ以外の関連はありません。
No.1
- 回答日時:
sumもcountも独立したただの変数です。
プログラムの構造的に関連付けられてなどいません。
sumは入力の積算値、countは入力の回数というようにプログラムの考え方(構成)として関連付いているにすぎません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語 3 2022/11/09 13:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
MACで動く実行ファイルをWindow...
-
プログラミング ソースコード
-
なんかC言語でプログラム書いて...
-
Visual Studio デバッグ実行で...
-
プロセス間通信について
-
Windows10でDOSゲーム
-
C言語プログラミングの再帰がい...
-
exeファイルが開かないのはなぜ...
-
sendkeysにてALT+CTRL+INSERTを...
-
実行中の実行ファイルの上書き
-
RPG パラメーターについて
-
C言語で途中までしか、プログラ...
-
PCIデバイスのコンフィグレーシ...
-
UNIXで自作プログラムのメモリ...
-
アクセス[ファイルを開かずに、...
-
プログラムを走らせる
-
C言語でフォルダを開く
-
JavaScriptでレースゲームを作...
-
VB.NETで作ったプログラムがサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
なんかC言語でプログラム書いて...
-
プログラミング ソースコード
-
MACで動く実行ファイルをWindow...
-
実行時エラー429
-
Windows10でDOSゲーム
-
VB上で実行中の無限ループの止め方
-
他のPC上にあるexeを、そのP...
-
sendkeysにてALT+CTRL+INSERTを...
-
VBAで外部プログラムを非表示で...
-
プロセス間通信について
-
システム資源とは?
-
アクセス[ファイルを開かずに、...
-
C言語でプログラムを再起動
-
C言語で途中までしか、プログラ...
-
終了してもプログラムが実行し...
-
system関数を使用してsuコマン...
-
PIC のデータEEPROMに書き込み...
-
実行中の実行ファイルの上書き
-
他の実行ファイルを実行するプ...
おすすめ情報