« 出張終了直後、つぶやきミックス♪ | トップページ | 資格試験で続々とコロナ値上げ&ハーフジョグ、靴紐が緩くて足裏にマメ・・ »

C言語入門5~選択構造、if文、else、switch-case文による多岐分岐

超初心者が1年がかりでのんびり続けて来た、C言語のプログラミング入門。さすがにそろそろ、高校の教科書『新情報技術基礎』(コロナ社)の終わりが近づいて来た。問題の答となるプログラミング例がほぼ書かれてるので、自分なりに少しアレンジしたプログラムを作りながら練習。

  

利用してるありがたいサイトは、プログラミング用の「環境」をネットで無料で提供してくれてる、paiza.io。自分で環境を構築する作業は何度も失敗してるので、またいずれ。構築の説明はあちこちにあるけど、自分のPCで試すとなかなか説明の通りにならない。JAVAは何かが足りないとか言われて導入できず。Visual BASICは重すぎて断念。

        

今日使ったのは、教科書の第5章・C言語によるプログラミング、第5節。選択構造(p.135~140)。6ページとはいえ、少しずつ難しくなって来たので、精神的に疲れる。おまけに、前の話は次々と忘れて行くので、再び調べるのも時間がかかる。

    

選択構造とは要するに、場合分けの仕組みのこと。「もし何々なら・・・、そうでなければ~~~」とか、「この場合は・・・、その場合は~~~、あの場合は***」とか。選択や反復がない、一番シンプルな流れだ。一応、7年前にQuick BASICを使って記事を書いてるが、ほとんど覚えてない。

   

  

     ☆     ☆     ☆

ではまず、例題5.8。点数を1つ入力して、もし70点以上なら「合格」、そうでなければ「不合格」と表示するプログラム。

      

211120a

  

If(  )で条件文「tensuu >= 70」を書いた後、基本的には{  }で処理(命令文)を書くけど、処理が1つだけなら{  }は省略可能。私はこの{  }とか、プログラミングに多用する記号が苦手になってるので、上では省いてる。;(セミコロン)も本当は打ちたくない。

   

ただ、「以上」を「>=」と書くのは、普通の記号の「≧」を左右に2分割するだけなので、あまり抵抗ない。「等しい」を「==」と書くのも、何とか我慢の範囲内。入力しやすいし、意味も明らかなので。

     

211120b

  

点数として80を入力して実行すると、合格と表示された。2行に分けて表示する方法はしばらく後で発見。教科書はそうなってないので、考えてなかった。

      

211120c

  

  

      ☆     ☆     ☆

続いて、問10(1)。整数を1つ入力して、もし2で割った余りが0なら「偶数」、そうでなければ「奇数」と表示するプログラム。

  

表示するものをprintf(  )で指定、入力するものをscanf(  )で指定するのも、少し慣れて来た。普段はほとんど使わない二重引用符も、ようやく少し馴染んで来た感じか。整数の割り算の余りは、「%」という記号で計算。

           

211120d

   

14を入力して実行すると、「偶数」と表示された。

   

211120e

   

この環境だと、入力と出力を同時に見ることができないのが玉にキズ。もしかすると設定でどうにか出来るのかも。

       

211120f

  

  

     ☆     ☆     ☆

さらに、問10(2)。三つの整数値を入力して、最大値を表示するプログラム。最初に入力した数を暫定的に最大として、もし、次に入力した数がそれより大きければ、次に入力した数の方を新たな最大にする手続き。こうした、少しずつ比較するパターンは、小学生向けのプログラミング問題集でも出て来てた。

      

211120g

   

25、10、50を入力すると、確かに50という最大値が表示される。

   

211120h

      

211120i

   

  

     ☆     ☆     ☆

少しだけ変えて、4つの整数値の中から最小値を表示するプログラムも自分で作成。25、10、50、80を入力すると、確かに最小値10が表示された。

      

211120m

  

変数にn4を加えて、最大値maxの代わりに最小値minを導入して、ifの条件文の不等号の向きを逆にするだけ。

   

   

      ☆     ☆     ☆

次は、3つ以上の方向に分かれる「多岐分岐」(たきぶんき)。合成語の意味はすぐ分かるけど、4文字の一まとまりとしては聞いたことのない日本語だ。条件は、if、else if(前の条件とは違って、もし・・・、という意味)、else(それら以外の時)で表す。

      

ここでは、2次方程式 ax²+bx+c=0 の実数解を求めてる。もし判別式d=b²-4acが0より大きいのなら、異なる2つの実数解。もしd=0なら、1つの重解。それら以外(つまりd<0)なら、「解なし」と表示。

  

実数や数学の関数sqrt(平方根の計算:スクエア・ルート)を使うし、命令も少し長くなるから、ここまでの問題より難しい。2行目に「#include <math.h>」と書いて、5行目の変数の型はfloatにして、入力の型は%fにする。

        

211120n

  

高校数学でお馴染みの係数、a=1、b=-5、c=6を入力すると、「解は 3.000000 2.000000」と表示された。普通に「解は 2 3」とか表示させたいけど、とりあえず保留。

      

211120o   

   

211120p

   

その代わり、解の公式の分母の数を、2.0ではなく、2にしてみたら、大丈夫だった。係数として、a=1、b=4、c=4を入力すると、表示された答は重解-2.000000。

      

211120q

   

   

      ☆     ☆     ☆

最後に、もっときっちり並列的に多岐分岐を行う、switch-case(スウィッチ・ケース)文の問題。例題5.10。

  

相手が日本語を示す番号1を入力した場合は、「こんにちは。」と出力。英語を示す番号2を入力した場合は、「Hello!」と出力。フランス語を示す番号3を入力した場合は、「Bonjour!」(ボン・ジュール)と出力。ちなみに教科書の3番目は、ドイツ語「Guten Tag」(グーテン・ターク)になってたから、私が変更した。

      

211120r

   

switch(変数){case 変数}・・・break(ひとまず終わり)の形で、3つ以上の場合を並列的に分ける。「それ以外」のようなオマケ的な扱いは目立たなくて、最後の「default」の所のみ(ここではbreakは不要)。多様性とか対等性、中立性、共存が叫ばれる今の時代だと、特に重要だろう。 

      

211120s

  

2と入力して英語を指定すると、「Hello!」と出力された。ここでようやく、最後の出力で改行する方法を発見。前半のprintfの最後で、(”? /n”)としておけばいい。キーボードによっては、「/n」ではなく、「¥n」。

      

211120t

   

  

     ☆     ☆     ☆

最後に、switch-case文ではなく、if else文で同じ処理をプログラムすると、成功した。やはり、実質よりも、形とか外見の問題が大きい構文なのか。

       

211120u

   

というわけで、あと2回くらいだから、出来れば年内に終わらせたい。それでは今日はこの辺で。。☆彡

    

        (計 2608字)

| |

« 出張終了直後、つぶやきミックス♪ | トップページ | 資格試験で続々とコロナ値上げ&ハーフジョグ、靴紐が緩くて足裏にマメ・・ »

数学」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 出張終了直後、つぶやきミックス♪ | トップページ | 資格試験で続々とコロナ値上げ&ハーフジョグ、靴紐が緩くて足裏にマメ・・ »