「夫を成功」へ導く妻の秘訣 座談会

c言語のプログラムについての質問です。ご回答お願いします。


#include <stdio.h>
int main(void) {
int a,b,c;
b=c=0;
for (a=10; a>0; --a) {
printf("a = %2d ", a--);
printf("b = %2d c = %2d¥n", b++, ++c);

return 0;

というプログラムを作りました。実行結果が

a = 10 b= 0 c= 1
a = 8 b= 1 c= 2
a = 6 b= 2 c= 3
a = 4 b= 3 c= 4
a= 2 b= 4 c= 5

このようになりました。この実行結果が得られる理由を教えて頂きたいです。

A 回答 (2件)

この行が理解できれば解決すると思います。


printf("b = %2d c = %2d¥n", b++, ++c);

インクリメント、デクリメントは
変数の前に書いた場合と後ろに書いた場合では計算するタイミングが違います。

b++は、printfの後に計算します。
++cは、printfの前に計算します。

書き換えるとこんな感じです。
c=c+1;
printf("b = %2d c = %2d¥n", b, c);
b=b+1;


aも同じように考えてみてください。
    • good
    • 0
この回答へのお礼

詳しく解説して頂きありがとうございます!

お礼日時:2020/07/14 12:56

あなたは、どうしてこうなると思いますか?


それとも、この実行結果に納得がいかないのでしょうか?



(1)
for (a=10; a>0; --a) {

}
と書いたら、 a=10,9,8,...,1 とループするように見える。
しかし、 〜 の中で a を書き換えたら、そうなるとは限らない。上記のfor文は
a=0
while(a>0) {

--a ;
}
と同等だと考える。
※ 違いは 〜の中に continue があったときの挙動


(2)
「前置インクリメント」「後置インクリメント」
「前置デクリメント」「後置デクリメント」
をキーワードに、本やサイトを確認する。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2020/07/14 12:56

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング