C言語のif文について(初歩の初歩の初歩)

このQ&Aのポイント
  • C言語のif文について(初歩の初歩の初歩)
  • C言語のif文について、numが偶数であるかどうかを判定する方法と、numが0であるかどうかを判定する方法について説明します。
  • C言語のif文を使って条件分岐する際、条件が「偽」であるときに特定の処理を実行するためには、「非0」を条件として指定することがあります。しかし、「真」か「偽」かでみると逆になるため、わかりづらいと感じる場合もあります。一般的には、条件が「偽」であることを明示するために、「!=」を使用して0以外の値を条件として指定する方法が一般的です。この方法を使えば、常に条件が「偽」のときに特定の処理を実行することができ、わかりやすいコードを書くことができます。ただし、自分が理解しやすい方法でプログラムを書くことが重要であり、他の人に理解してもらうためには、適切なコメントや変数名なども使用する必要があります。
回答を見る
  • ベストアンサー

C言語のif文について(初歩の初歩の初歩)

if(num % 2) とするときnumが2で割り切れ「ない」とき つまり()内が「偽」であるときputsの文が表示されます。 if(num == 0) とするときnumが0のとき つまり()内が「真」であるときputsの文が表示されます。 ()内が非0になるか0になるかというのはわかるのですが 「真」か「偽」かでみると逆になってしまってわかりにくいので 常に if(num != 0) として0じゃ「ない」とき つまり()内が「偽」であるときputsの文を表示させれば 常に()内が「偽」のとき表示されるのでわかりやすいと思ったのですが この先これでやっていくとうまく行かないことが出てきますでしょうか。 簡単なうちに慣れていますべきでしょうか。 それともこのようにやっても問題ないのでしょうか。 皆様はどのようにしているのか教えてください。 よろしくおねがいします。

  • mist55
  • お礼率72% (180/247)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

あくまでifの中は真か偽かで判断するようにしましょう。 num%2はnumを2で割ったあまりを求めているので、「割り切れたら」が「真」ではありません。 「あまりが0でない」が「真」です。 「割り切れたら」を「真」にしたいなら、条件は「余りが0である」になるので if ((num%2)==0) になります。

mist55
質問者

お礼

ありがとうございました。

その他の回答 (3)

  • aiueo6391
  • ベストアンサー率23% (3/13)
回答No.3

苦しんで覚えるC言語の本があるのですが、お勧めだと思いますよ。 実際苦しんで覚えるどころか、解りやすく、理解しやすいので。 http://www.amazon.co.jp/%E8%8B%A6%E3%81%97%E3%82%93%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8BC%E8%A8%80%E8%AA%9E-MMGames-x/dp/4798030147/ref=sr_1_1?s=books&ie=UTF8&qid=1456852654&sr=1-1&keywords=C%E8%A8%80%E8%AA%9E

mist55
質問者

お礼

ありがとうございました。

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.2

命題の文章をどう書くかによって、同じ事象でも真になったり偽になったりしますよ。 ・今日は偶数日だ・・・・・3月1日なので偽 ・今日は奇数日だ・・・・・3月1日なので真 if (x) は、『xが非ゼロで「ある」とき』ですが、「ない」と書きたければ、 『xがゼロで「ない」とき』 になります。どちらも同じ意味です。 > if(num % 2) > とするときnumが2で割り切れ「ない」とき これは、numを2で割った余りが非ゼロで「ある」とき です。

mist55
質問者

お礼

ありがとうございました。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

こんにちは。 比較演算子は==と!=だけではありません。> < >= <= の時はどう考えるのですか? また、関数の戻り値が真偽値であることもあります。 この場合 if( isXXXX() )~ という書き方になります。 また、変数に真偽値を持たせることもあります。 この場合は if( isYYYY )~ という書き方になります。 (関数名、変数名がisで始まるのは真偽値であるということですが、このへんは単なるコーディング規則ですので、この通りでなくても問題はありません。) といったことを考えてみると、質問者さんの考えた方法は、あまり意味がなく、場合によってはむしろ読みづらいコードになってしまうと思います。 ちなみに、 if( num != 0 ) と if( num ) は同じ動作となります。 どちらでも構わないのですが、私の場合はnumが数値である場合には、 if( num != 0 ) と書きます。 numが真偽値である場合には if( num ) と書きますが、変数名がnumのままだといかにも数値を入れる変数っぽいので、別の変数名にすることでしょう。

mist55
質問者

お礼

ありがとうございました。

関連するQ&A

  • C言語のIFについて

    IF文などの判定の時、真の方が処理が速い!とかあるのでしょうか。 また、プログラマーになるために参考になるサイトなどありましたら、教えてもらえないでしょうか。 ご教授の方、よろしくお願いします。

  • if文について

    最近、C言語プログラムから、離れていて、久しぶりにここを覗いたのですが、 こんな質問を見ました。 質問 C言語初心者だが、学習用に良いサイトはないか? 最初の回答の方は、ある初心者用と思われるサイトを、紹介してらっしゃいました。 それに対して、他の回答者の方々は、そのサイトの一分を引用して、コンパイルできないし、間違っていると指摘されました。それは以下のようなものでした。 if(条件式) 文1; else 文2; その代わりに掲載されているのが次のようなものでした。 if(条件)条件が真のときに実行する1文; else 条件が偽のときに実行する1文; 私には、最初の回答がなぜ間違っているのか、何故コンパイルできないのか、判りません。何方か詳しく教えていただければ、嬉しいです。よろしくお願いします。

  • switch文をif文に変換

    以下のプログラムをif文に書き換えるとどうなるでしょうか? if文と論理演算子を使って短く書きかえられるらしいのですが。 #include <stdio.h> main() { int no; scanf("%d",&no); switch (no){ case 1: puts("1番です。\n"); break; case 2: puts("2番です。\n"); break; case 3: puts("3番です。\n"); break; case 4: puts("4番です。\n"); break; case 5: puts("5番です。\n"); break; case 6: puts("6番です。\n"); break; default: puts("そんな学年はありません。"); break; } }

  • if文における代数の設定方法

    if文を使った条件分岐をさせているんですが、条件の共通部分が多いため、代数か何かを設定してまとめられないかなと考えています。 何度も同じ条件文を書いていると、カッコが多すぎてどこがどこにかかっているのか全くわからなくなります。 代数でなくてもよいのですが、とにかく上手くまとめたいと思っています。 今作っているのは 条件C1=Note_on_c"かつMOD(I1,1)=0) 真なら(MIN(124,F1+6) 偽なら  条件C1=Note_on_c"かつMOD(I1,1)=0.5)  真なら(MAX(60,F1-5))  偽なら   条件C1=Note_on_c"かつMOD(I1,1)=0.25)    真なら(MIN(120,F1+6)    偽なら    条件C1=Note_on_c"かつMOD(I1,1)=0.75)     真なら(MAX(90,F1-5))     偽ならF1 というもので以下のように書いてみたのですが(まだ途中です) =IF((C1=" Note_on_c")*AND(MOD(I1,1)=0),(MIN(124,F1+6)),IF((C1=" Note_on_c")*AND(MOD(I1,1)=0.25),(MAX(60,F1-5)),F1)) とこのように、IF((C1=" Note_on_c")までは全て一緒なのですが、条件文に共通部分があっても入れ子にするしかないのでしょうか。 もっとスマートな方法があったら教えて下さいませ。

  • javascript if文

    javascript if文 まずソースコードなのですが var num; var sign; num = 20; (1)sign = num >= 0 ? '正' : '負'; console.log( num + "は" + sign ); (2)if(num >= 0){ console.log( num + "は" + sign ); } (1)と(2)は同じ意味なのですか?(1)のやり方はあまり見かけないのですが用途としてはどのような時に使うのですか? 馬鹿な質問でスミマセン。

  • IF関数が理解できませんでした。

    セル【G6】の数式を、「上記目標」が空白の場合は、「達成率」に空白を表示するように変更して下さい。 という問題があり、答えが =IF(E6=″ ″,″ ″,F6/E6) です。 しかし、表に空白の部分はありませんし、テキストにはIF関数の説明項目において、 =IF(論理式、真の場合、偽の場合) とあります。 IF関数の論理式内では真や偽の場合を示すのは「″ ″」部分ですよね。 ですが、真の場合も、偽の場合も空白で、答えは問題のどこを指してるのか、 最後にF6/E6がつく意味も全くわかりませんでした。 表には空白がないのに問題自体もどのように捉えたらよいのかもわかりません。 よろしくお願いします。

  • キューのプログラムのif文でわからないところが

    いま、キューのプログラムを見ていてわからないところがあるのですが、 void IncBuf() { if(++Front >= MAX_BUF_NUM){Front = 0;} } このif文の場合、どのような動きをするのかが正直わかりません。 MAX_BUF_NUMは24なのですが、 この場合、if文に入るとFrontをインクリメントして、そのあとにMAX_BUF_NUMの大小を判定するという感じでしょうか? ・私がやりたいのは、if文に入ったら、Frontをまずインクリメントして、その値がMAX_BUF_NUMと同じになったら、Frontに0を入れたい という感じでつくってみたのですが、これであっているのでしょうか?

  • for文&if文を使った問題について教えてください。

    参考書の練習問題を解いていて、応用力がないのか理解できない ので、分かる方教えていただけませんか? 問題: キーボードから整数を入力させ、その数が素数であるかどうかを 判断するコードを記述してください。 解答: import java.io.*; class SampleP5 { public static void main(String[] args) throws IOException { System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=2; i<=num; i++){ if(i = = num){ System.out.println(num + "は素数です。"); } else if(num % i = = 0){ System.out.println(num + "は素数ではありません。"); break; } } } } 例えば"7"を入力すると「7は素数です」と出力されるようなんですが、 『i = 7』だとして、『 if(i = = num)』の条件って当てはまるん ですか?for文でiの初期値が2だから、『2 = = 7』で当てはまらない と思うんですが・・・ 考え方が間違っているんですかね? ※ちなみに(= =)のところ、実際はスペース空いてません。  ここの画面での表示上くっついて1本の線になってしまうので、  スペースを空けて入力したまでです。

    • ベストアンサー
    • Java
  • シェルスクリプトのif文

    シェルスクリプトのif文について質問です。 あるファイルが存在しないときだけ処理を行いたい場合、 下記のような記述をするしかないのでしょうか? if [ -e /tmp/test.txt ]; then  ダミー処理(val1=1など意味のない処理)  (ダミー処理を入れるのは何も書かないとエラーとなってしまうため) else   行いたい処理 fi elseを使わずに if  fi だけですますことはできないでしょうか? -eはファイルが存在するならば真なので 逆に意味が真となるようにしたいのですが・・・

  • エクセル if文で偽判定のとき、何も起こらないようにしたいのですが・・・

    宜しくお願いします。 エクセル2003のif文で、偽の判定の時に何も起こらない状態にしたいのですがどうすればいいのでしょうか? 例えば =if(A1=A2,"○","") とすると偽の判定のときに空欄になってしまいますよね? 既に文字が入力されているところにコピペしても、偽の判定ならば打ち込まれた文字が残るようにしたいのですが・・・・ 教えて頂ければと思います。 宜しくお願いいたします。