新着記事
08/24: 待ち時間・アカウントなしで4sharedにあるファイルをダウンロードするには
08/23: 色んな歌詞検索サイトから歌詞を探してくれる高機能歌詞検索ソフト -Lyrics Master-
08/01: フリーでいろんな国のIPアドレスを利用できるFireFoxのVPNアドオン -Hola Unblocker-
07/18: 著作権フリー・無料で利用できるBGMダウンロードサイト - audionautix
07/17: apngをブラウザ上で見るには
06/14: deviantARTなどで入手したテーマに変更するには
06/03: [KissAnime] - 日本語検索可能でいろんなタイトルが見れるアニメ無料視聴サイト
05/30: スマホをギターにして演奏してしまう動画
05/23: InoReader - シンプルで使いやすいRSSリーダー
05/18: [Apowersoft音声録音フリーツール] - PC・マイクから簡単に録音できるフリーツール
05/12: フリーのDNSへ簡単に変更出来るDNSチェンジャー - [ChrisPC DNS Switch]
05/11: C言語 入門 複合文について
05/10: TabsBy.Net - フリーで利用可能なオンラインTABプレーヤー
05/09: [Chrome Extension]Chromeで新しいタブを開いたときにWindows8のメトロ画面にするExtension - New MetroTab
05/06: Bop.fm - フリーでクールなインターフェイスのオンライン音楽プレーヤー
05/05: iAlbums - アルバムごとにカテゴライズされたプレイリスト作成も可能なオンライン音楽プレーヤー
09/20: [B1 Online Archiver] オンライン上で圧縮ファイルを解凍できるサイト
09/15: Operaの旧バージョン(15以前)にXSSの脆弱性が
09/10: ペルセウス座流星群を1分で
08/29: スマホアプリ紹介サイト
RSS feeds

2010年09月19日

C言語 入門 3通り以上の場合分け

ずいぶん更新が途絶えてしまいました。目の調子が悪く長時間PC操作したりするのがきつくて更新でいませんでした。
申し訳ありません。これからまたちょっとずつC言語の勉強やっていきます。
前回2通りのプログラム分岐について勉強しました。今回は3通り以上の場合分け処理を勉強していきます。

※今回はちょっと長いです。


3通り以上の場合分け処理


さて、プログラムは複雑になるにつれてプログラムの分岐が多くなります。
当然2通りだけで済むわけではありません。

とりあえず3通りの場合分け処理を考えてみましょう。

ここでは「数値の正負を判別するプログラム」で考えてみます。
内容は入力された数値が
  • 正の数

  • 負の数

  • 0の場合

  • 以上の3つの場合の分岐処理を考えます。

    とりあえず今まで勉強したやり方で考えてみましょう。
    if文を繰り返してみましょう。
    /*
        入力された数値の正負を判別するプログラム
    */

    #include <stdio.h>

    int main(void)
    {
        int num;
        
        printf("入力された数の正負を判別します。¥n");
        printf("数値を入力してください:"); scanf("%d", &num);
        
        if (num > 0)
            printf("%dは正の数です。¥n", num);
        if (num < 0)
            printf("%dは負の数です。¥n", num);
        if (num == 0)
            printf("その数は0です。¥n");


        return 0;
    }

    実行結果(正の数)
    入力された数の正負を判別します。
    数値を入力してください:123↵
    123は正の数です。

    実行結果(負の数)
    入力された数の正負を判別します。
    数値を入力してください:-99↵
    -99は負の数です。

    実行結果(整数の場合)
    入力された数の正負を判別します。
    数値を入力してください:0↵
    その数は0です。

    こんな感じでif文を繰り返せばOKです。


    関係演算子・等価演算子


    さて、少し補足です。

    条件式のところで「> <」があります。
    これらは「関係演算子」と呼ばれるものです。大なり、小なりと役割は同じです。
    if文において「0になったものを[偽]」、「0以外(正の数、負の数両方含みます)を[真]」でしたね。
    「真」の場合のみ条件式に続く「文」を実行する。これを踏まえて説明すると

  • 「>演算子」 - a > b においてaがbよりも大きい場合は真、そうでなければ偽

  • 「<演算子」 - a < b においてaがbよりも小さい場合は真、そうでなければ偽

  • 「>=演算子」- a >= b においてaがb以上の場合は真、そうでなければ偽

  • 「<=演算子」- a <= b においてaがb以下の場合は真、そうでなければ偽

  • こんな感じですね。
    注意して欲しいのは「>=演算子」「<=演算子」を「=>」「=<」のように順序を変えたり、間にスペースを入力しないこと。
    この場合は機能しません。

    また、「==演算子」が出てきました。
    以前、変数を代入するとき「=」は等号を意味しないと言ったのを覚えていますでしょうか?

    式において等価を表す演算子は「==」とイコールを2つ連続で入力します。

    これは大事なことなので覚えておきましょう。
    また「==」と反対の意味を成す演算子があります。「!=演算子」です。
    これは文字通り数値が同じでない場合の条件となります。
    これらをまとめて「等価演算子」と呼びます。

  • 「==演算子」 - a == b においてaとbが同じ場合は真、そうでない場合は偽

  • 「!=演算子」 - a != b においてaとbが同じでない場合は真、そうでない場合は偽


  • 以上補足でした。


    if文の入れ子


    さて、上のプログラムは確かにプログラムとしては実行できます。
    しかし、少し問題(というか無駄な部分)があります。
    正でも負でもなければ基本的に0しか考えられません。
    また、0や負の数でない場合は必然的に正の数です。
    何が言いたいかというと、ここで必然的に正でも負でもない数「0」が確定しているのに条件とするのはプログラムにおいて無駄だと考えられます。
    そこで思い出して欲しいのが「else文」です。
    「else文」は条件が「偽」の場合に実行する文でした。

    これを上手く使いましょう。

    どうすればいいかというと、if else文を繰り返してやればいいわけです。
    ちょうど「入れ子」の状態を作ってやればいいわけです。

    「入れ子」というのは、ロシアのマトローシュカ人形を思い浮かべていただければ分かりやすいと思います。
    人形の中に一回り小さい人形が連続して入っていますよね。人形の中に人形が入っている状態。
    それと同じように考えてください。プログラムの中にプログラムが入っている、「if else文」の中に「if else文」が入っている、そんな状態です。
    「if else文」を{ }で括ってやればOKです。{ }がマトローシュカ人形の大きいほうの人形だと考えてもらえばOKです。
    if(条件式){ 文; } else { if(条件式){ 文; } else { 文; } }

    こんな感じで考えてもらえばいいのですが、
    ちょっと文章が長くなってしまいましたので上のプログラムを実際に書き変えてみましょう。
    #include <stdio.h>

    int main(void)
    {
        int num;
        
        printf("入力された数の正負を判別します。¥n");
        printf("数値を入力してください:"); scanf("%d", &num);
        
        if (num > 0){
            printf("%dは正の数です。¥n", num);
        } else {
            if (num < 0)
                printf("%dは負の数です。¥n", num);
            } else {
                printf("その数は0です。¥n");
            }
        }


        return 0;
    }

    こんな感じになります。
    実行結果は同じなので各々確認してください。


    より見やすくするために


    さてこの方法で入力した場合、どうしてもプログラムが見づらくなってしまいます
    エディタを使えば勝手にインデントしてくれますが正直見づらいですよね。

    そこで使用したいのが「else if文」です。
    elseの後にifがすぐ来る形です。

    実際に書いてみましょう。
    #include <stdio.h>

    int main(void)
    {
        int num;
        
        printf("入力された数の正負を判別します。¥n");
        printf("数値を入力してください:"); scanf("%d", &num);
        
        if (num > 0){
            printf("%dは正の数です。¥n", num);
        } else if (num < 0){
            printf("%dは負の数です。¥n", num);
        } else {
            printf("その数は0です。¥n");
        }


        return 0;
    }

    いかがでしょうか?とても見やすくなったのではないかと思います。
    else ifを上手く使えば複雑なプログラムも割りと見やすくなります。
    また、見て分かると思いますが、これはインデントを無視して書いているということに注目してください。
    大半はインデントしたほうが見やすい場合が多いのですが、「else if」を使用したときはインデントを無視したほうが見安かったりします。
    「else if」を使用するときはこんな風に書くのがオススメです。


    { }の省略


    最後に、{ }の省略について書いておきます。
    if文を書くとき{ }は必要なんですが、{ }内の文が単一の場合、{ }を省略することも出来ます。
    実際に上のプログラムの{ }を省略してみましょう。
    #include <stdio.h>

    int main(void)
    {
        int num;
        
        printf("入力された数の正負を判別します。¥n");
        printf("数値を入力してください:"); scanf("%d", &num);
        
        if (num > 0)
            printf("%dは正の数です。¥n", num);
        else if (num < 0)
            printf("%dは負の数です。¥n", num);
        else
            printf("その数は0です。¥n");
        


        return 0;
    }

    こんな風に{ }を省略してより簡潔にプログラムを書くことが出来ます。
    これも結構使える(というか私は忘れがちなので案外助かっています)ので上手く使いましょう。


    メニューへ戻る



    タグ:C言語


    ↓もしこの記事が役に立ったらクリックお願いします。
    人気ブログランキングへ ブログランキング・にほんブログ村へ



    posted by Yuichi at 06:26 | Comment(2) | TrackBack(0) | プログラミング>C言語 | このブログの読者になる | 更新情報をチェックする
    この記事へのコメント
    目の方お大事になさってくだい。万が一失明でもされたらそれこそ、c言語なんてできませんからw 
    Posted by タフィ at 2010年09月23日 20:06
    勉強になりました!
    Posted by No Name at 2014年03月30日 17:10
    コメントを書く
    お名前:

    メールアドレス:

    ホームページアドレス:

    コメント: [必須入力]


    この記事へのトラックバック

    Copyright (C) 2009-2010 Yuichi All Rights Reserved.