表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
15/37

第十三話 条件分岐



「じゃ、作るゲームも固まってきたことだし、またCの話の続きをするよー」

 立花先輩の言葉で、俺と西原さんは頷く。

「今回は、条件分岐についてのお話をしようと思うの」

「条件分岐?」

 先輩はPCへと向き直ると、ウィンドウズのメモ帳を開いてCプログラムを作り始める。

「うん。『もしも』の世界のお話よ。もしも、変数aが0だったら……とか、もしも変数aと変数bが同じ数だったらとかの……よし、出来た」

 俺と西原さんは先輩が作ったばかりのコードを覗き込む。



/* IF文のテストプログラム! iftest.c */

#include <stdio.h>


int main(void)

{

    int a,b;


    a = 1;

    b = 2;


    if (a == b)

        printf("A と B は同じ数です!\n");

    if (a > b)

        printf("A は B より大きな数です!\n");

    if (a < b)

        printf("A は B より小さな数です!\n");


    return 0;

}



「ifってのが、条件分岐なのか」

「イツキくんも、プログラミングがわかってきたねー。その通りよ。これは二つの変数aとbを比較するプログラムね。ifの後ろのカッコの中が条件式で、これが正(True)だったら、その直後の命令――この場合はprintf関数ね――を実行させるわけ。偽(False)だったら無視して次の行へ移動するの」

「ふむむ。この場合は、a < bだから、最後のやつが実行されるのか」

「じゃ、試してみるわ」

 先輩はコマンドプロンプトを立ち上げると、プログラムをコンパイルして実行してみた。



>iftest[ENTER]

A は B より小さな数です!


>_



「やっぱりそうか」と俺は頷く。

「最初のifの条件、イコールが2つついているんですね」と西原さん。

「そうそう。これはC系統の言語のお約束だから、特に気をつけてね。初心者だと (a = b) って間違って書きがちだけど、これだとa変数にb変数の内容を代入するって別の意味になるからね。しかも、変数a、bがゼロでないなら『true』になって後ろの命令も実行されるし、文法上は一応間違ってるわけじゃないから、コンパイラはエラーにも出さない! ……Wallしてたら、一応警告はしてくれるけど」

「そ、そうなのか」

「ちなみに、二つの数が違うかチェックしたい時は、(a != b)って書くから。これは≠の記号を昔のパソコンで書ける文字で真似たらしいわ」

「ほうほう」

「あとねー、こういう書き方もするから、覚えておいて」



    if (a == b)

    {

        printf("A と B は同じ数です!\n");

    }



「中カッコで囲むと、その中では二行以上の命令も入れられるのよ。個人的には、一行のみの時にも、この書き方をした方がわかりやすいと思うけど、これは人によって意見はいろいろね」

「ふうむ。なるほど」

「もう一つ。こっちも覚えておいて」

 また先輩はカタカタとコードを書き始める。



    if (a == b)

    {

        printf("A と B は同じ数です!\n");

    } else {

        printf("A と B は別の数です!\n");

    }



「else?」

「他の場合は、って訳してね。変数aとbが同じときは、最初の文が実行されてから、elseカッコ内は無視してreturn 0のところへ移動するけど、違うときは、後ろの文が実行されるわけ。あと、else if (a > b) って感じで、elseのあとで別のif文で判定を追加することもできるわよ」

「これだと、詳しく分岐できますね」と西原さん。

「でも、いくつも条件が並んでいたら、if~else文を使うと長くてわかりにくいコードになる時があるわ。そういう時には、switchを使うといいわよ」

 先輩はさらにコードを書く。



  switch(a){

  case 1:

    printf("a = 1です ");

    break;

  case 2:

    printf("a = 2なの ");

    break;

  default:

    printf("それ以外だったりして ");

  }



「かなり構文が違うな……」

「これは、もしa = 1なら、1番上の文が、2ならその下が……って、幾つでも並べられるわよ。そして、すべてに該当しなかったら、default、デフォルトの文が選ばれるの」

「このbreakは、最後に要るんですか?」

「事実上、ね。言語規定では省いてもいいんだけど、それだと、case 1が選ばれたときに、a = 1です a = 2なの それ以外だったりしてって、三つとも表示されちゃうわ。だから、必要だと思っておいて」

「C#だと、言語規定でもbreakは必須になってますね」と西原さん。

「ま、こんなところね。条件分岐の命令は」

「ふーむ。条件分岐ってのも、奥が深いな……」

「じゃ、最後にさらに奥の深い話をするわよ。if ()の中の判定は、式の結果が0ならfalse、偽となって、それ以外だったら10でも-100でもtrue、正として判定されるの」

「ん??」

「解りにくいかなー。たとえばね、if (0) {}って書いても、絶対に次の中カッコの中は実行されない。常に偽になるからね。if (1) {}だと、常に中カッコの中は実行される。でもこれだと判定する意味ないから、誰もやらないけど」

「そ、そうなのか」

「まー、こういうのは初心者は関係ない話だから、あまり気にしないで。解りにくいトリッキーな書き方はしない方がいいし。じゃ、今回の話はここまで」

 先輩はそう言うと、メモ帳を消した。



「次は、反復命令の話をするよー」先輩は言った。「これだけ知ってれば、Cの最低限の知識はマスターしたことになるから、お楽しみにね!」

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ