C言語の基本的なことで躓いてしまって
自分でいくら考えてみても、わかりません・・。
よければ教えて頂けないでしょうか。
-----
{
int count;
for (count = 0; count < 5; count++) {
printf("countは今%dです\n", count );
}
if (count == 4) {
printf("正解は4でした\n");
} else if (count == 5) {
printf("正解は5でした\n");
} else {
printf("正解は4でも5でもありませんでした\n");
}
}
----------
上のプログラムを実行すると”正解は5でした”と出るのは分かります。
しかし”countは今4です”までしか出ないのが何故だか分かりません。
ここは5ではないんでしょうか?
私は何か根本的なことが分かってないのでしょうか・・。
教えてください。
No.7
- 回答日時:
> (count = 0; count < 5; count++)と先にかいてあって、その後にprint文がきてるので
> 先にcountに1をたしてから、print文を実行するとどうしても思ってしまうんですが
> なぜcount++はprint文の後に来ないのでしょうか・・
まず while 文によるループが基本であると考えてください。
つまり、ある条件が成り立っている間、処理をし続けると
いうのが普通のパターンです。
もっと極端な話をすれば、while 文があれば、for 文は必要
ないのです。全ての for 文は、while 文で書き換えること
ができますから。
では、なぜ for 文があるかというと、やはりカウンタを使
ったループを使いたい場合が多いからではないでしょうか。
「ある回数だけループさせたい」という場合、毎回 while
文でカウンタ変数を使って書いていると、カウンタ変数を
カウントアップする個所を同じように毎回ループ内に書か
なければいけません。
それより for 文を使えば、カウンタ変数のカウントアップ
という、ループ内処理には関係ない命令をループ内に書かな
くても済みますよね。
for ループは while ループの特殊な形だと思えばよいと思
います。
No.6
- 回答日時:
koreiです。
補足しますね。for文は、
for(初期化;条件文;式){}
と記述します。
実行の順番が、
(1)初期化(最初の";"で区切られたところまで)
(2)条件文(";~;"まで)
(3){}の中
(4)式(最後の";"以降)
(5)条件文(";~;"まで)
(6){}の中
(7)式(最後の";"以降)
・・・
と決まっています。
即ち、
for(最初だけ;実行(1);実行(3)){
実行(2)
}
となり、実行(1)~実行(3)の順番で、条件文(実行(1))が満たされている間、
ループする訳です。
なので、上記のプログラムでは、count++を実行してから、print文の実行にはならない訳ですね。
初級向けのC言語のマニュアルのfor文のところを見てみましょう。
もっと、わかりやすく載っていると思いますよ。
では、勉強をがんばってください。
No.5ベストアンサー
- 回答日時:
こんにちは。
C言語のマニュアルで、forのところを読まれたら、わかると思いますが。
上記にかかれているプログラムのfor文の処理される順番は
(1)countに0をいれる
(2)count < 5 の条件文を満たしているかチェックする(今はcountは0)
(3)条件文を満たしているのでprint文を実行する(countは今0です を表示)
(4)countに1をたす(countは1となる)
(5)count < 5 の条件文を満たしているかチェックする(今はcountは1)
(6)条件文を満たしているのでprint文を実行する(countは今1です を表示)
(7)countに1をたす(countは2となる)
・
・
繰り返し行う
・
・
・countに1をたす(countは4となる)
・count < 5 の条件文を満たしているかチェックする(今はcountは4)
・条件文を満たしているのでprint文を実行する(countは今4です を表示)
・countに1をたす(countは5となる)
・count < 5 の条件文を満たしているかチェックする(今はcountは5)
・条件文を満たしていないので、forループを抜ける。
次の処理を実行する。
・
・
なので、for文を抜けた時点でcountは5になっています。
なので、「正解は5でした」と表示されます。
しかし、for文内の処理が実行されるのは、count<5の間なので、
「countは今4です」までしかでないのです。
あと、forは関数ではありません。ループ文です。
まずは、基本を身に付けるようにがんばって勉強してくださいね。
ありがとうございます!すごくわかりやすかったです。
あの,条件文を満たしていたら、countに1を足し、print文を実行する。
という順番にならないのは何故ですか
(count = 0; count < 5; count++)と先にかいてあって、その後にprint文がきてるので
先にcountに1をたしてから、print文を実行するとどうしても思ってしまうんですが
なぜcount++はprint文の後に来ないのでしょうか・・
No.4
- 回答日時:
「関数for」と言う段階で“根本的なことが分かってない”が証明されています。
forは“関数”ではありません。
また、C言語に“命令”という概念はありません。
forは“制御文を示すキーワード”です。
forループを分解するとこういうカンジです。
for (i = 0 ; i < 5 ; i++) {
printf("%d", i) ;
}
printf("終わり") ;
これは
1.iに0をいれる
2.iが5より小さければ3以降、違ったら6以降を実行
3.printf("%d", i)関数の実行
4.iをカウントアップする
5.2に戻る
6.printf("終わり")関数の実行
whileループに書きなおすと
i = 0 ;
while (i < 5) {
printf("%d", i) ;
i++ ;
}
printf("終わり") ;
iが5の時にループ内を通らない理由はわかると思います。
No.1
- 回答日時:
for 文を while 文に書き換えてみるとわかりやすいと思います。
次の while 文は、ご質問の for 文と同じ動作をします。count++ が実行されるタイミングに注意してみてください。
count = 0;
while (count < 5) {
printf("count は今 %d です\n", count);
count++;
}
例えば、今 count が 4 であるとします。
printf で“count は今 4 です”と表示されます。
count++ で count が 5 になります。
しかし、次に while で (count < 5) の条件を満たさないので、printf や count++ は実行されずに while ループを抜けます。
“count は今 5 です”と表示されないのはこのためです。
ループを抜けたとき count は 5 になっていますから、“正解は 5 でした”と表示されます。
count++ は (count < 5) の評価の直前に実行されると考えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 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
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
For文の終了値を関数にしても問...
-
break文でループを一気に抜ける...
-
Excel VBAで年度をまたぐ期間の...
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
__asm int 3でのブレイクポイン...
-
C言語forループが完結した場合...
-
C言語に関する質問
-
While文の終わりにセミコロンが...
-
if文の中にfor文なのか、for文...
-
Cプログラムが終了しない
-
無限ループ対策
-
独習C 素数テスタ・・・分から...
-
入力した数値を倍々するプログラム
-
エクセルVBAで Do While (1)って?
-
入力した文字列から母音だけを...
-
他言語で言うcontinue文
-
繰り返し文の利点について
-
桁数を求めるプログラム。
-
H8/3048マイコンAD/DA変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
エクセルでC言語のfor文と同じ...
-
Excel VBAで年度をまたぐ期間の...
-
For文の終了値を関数にしても問...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
PAD図の書き方
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
C言語のプログラムみてください...
-
ループの特定入力終了
-
COBOLのEVALUATE文
-
for文while文の無限ループの違...
おすすめ情報