if文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

if文について

#1

投稿記事 by » 13年前

if((a >= 1 && a++) || b>=3 ){
処理X;
}
という場合、どのような動きをするのでしょうか?
どなたか分かる方いたら教えてください。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: if文について

#2

投稿記事 by みけCAT » 13年前

コード:

if(
(a>=1
&&
a++
) ||
b>=3
) {
処理X;
}
1.条件分岐をします。
2.aが1以上なら真になります。
3.前の文(a>=1)が真なら次の文(a++)を評価します。
前の文が真なら次の文を評価せず偽になります。
4.aの値を1増やし、増やす前のaの値を返します。
5.前の文(a >= 1 && a++)が偽なら次の文(b>=3)を評価します。
前の文が真なら次の文を評価せず真を返します。
6.bが3以上なら真を返します。
7.((a >= 1 && a++) || b>=3 )が真なら{}内を実行します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: if文について

#3

投稿記事 by box » 13年前

みけCAT さんが書きました: 4.aの値を1増やし、増やす前のaの値を返します。
ここを必ず通るって書いてあるように見えるんですが、よろしいんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: if文について

#4

投稿記事 by box » 13年前

c さんが書きました:

コード:

if((a >= 1 && a++) || b>=3 ){
    処理X;
}
こんな感じじゃないんでしょうか。
1)a >= 1 かどうか評価する。真ならば2)へ。偽ならば、(a >= 1 && a++) 全体が偽であることがわかったので、a++ を評価せずに4)へ。
2)aをインクリメントする。評価結果はインクリメントする前のa(前項で、1以上であることは確定しているので、必ず真)。
3)(a >= 1 && a++) が真であることがわかったので、if文全体が真であることがわかった。よって、b >= 3 を評価せずに5)へ。
4)b >= 3 かどうか評価する。真ならば5)へ。偽ならば処理Xを実行せずにif文から抜ける。
5)処理Xを実行してif文から抜ける。

このif文を終了した時点でaの値がどうなっているかは、上記1)の結果しだい。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る