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点以上なら「合格」、そうでなければ「不合格」と表示するプログラム。
If( )で条件文「tensuu >= 70」を書いた後、基本的には{ }で処理(命令文)を書くけど、処理が1つだけなら{ }は省略可能。私はこの{ }とか、プログラミングに多用する記号が苦手になってるので、上では省いてる。;(セミコロン)も本当は打ちたくない。
ただ、「以上」を「>=」と書くのは、普通の記号の「≧」を左右に2分割するだけなので、あまり抵抗ない。「等しい」を「==」と書くのも、何とか我慢の範囲内。入力しやすいし、意味も明らかなので。
点数として80を入力して実行すると、合格と表示された。2行に分けて表示する方法はしばらく後で発見。教科書はそうなってないので、考えてなかった。
☆ ☆ ☆
続いて、問10(1)。整数を1つ入力して、もし2で割った余りが0なら「偶数」、そうでなければ「奇数」と表示するプログラム。
表示するものをprintf( )で指定、入力するものをscanf( )で指定するのも、少し慣れて来た。普段はほとんど使わない二重引用符も、ようやく少し馴染んで来た感じか。整数の割り算の余りは、「%」という記号で計算。
14を入力して実行すると、「偶数」と表示された。
この環境だと、入力と出力を同時に見ることができないのが玉にキズ。もしかすると設定でどうにか出来るのかも。
☆ ☆ ☆
さらに、問10(2)。三つの整数値を入力して、最大値を表示するプログラム。最初に入力した数を暫定的に最大として、もし、次に入力した数がそれより大きければ、次に入力した数の方を新たな最大にする手続き。こうした、少しずつ比較するパターンは、小学生向けのプログラミング問題集でも出て来てた。
25、10、50を入力すると、確かに50という最大値が表示される。
☆ ☆ ☆
少しだけ変えて、4つの整数値の中から最小値を表示するプログラムも自分で作成。25、10、50、80を入力すると、確かに最小値10が表示された。
変数に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にする。
高校数学でお馴染みの係数、a=1、b=-5、c=6を入力すると、「解は 3.000000 2.000000」と表示された。普通に「解は 2 3」とか表示させたいけど、とりあえず保留。
その代わり、解の公式の分母の数を、2.0ではなく、2にしてみたら、大丈夫だった。係数として、a=1、b=4、c=4を入力すると、表示された答は重解-2.000000。
☆ ☆ ☆
最後に、もっときっちり並列的に多岐分岐を行う、switch-case(スウィッチ・ケース)文の問題。例題5.10。
相手が日本語を示す番号1を入力した場合は、「こんにちは。」と出力。英語を示す番号2を入力した場合は、「Hello!」と出力。フランス語を示す番号3を入力した場合は、「Bonjour!」(ボン・ジュール)と出力。ちなみに教科書の3番目は、ドイツ語「Guten Tag」(グーテン・ターク)になってたから、私が変更した。
switch(変数){case 変数}・・・break(ひとまず終わり)の形で、3つ以上の場合を並列的に分ける。「それ以外」のようなオマケ的な扱いは目立たなくて、最後の「default」の所のみ(ここではbreakは不要)。多様性とか対等性、中立性、共存が叫ばれる今の時代だと、特に重要だろう。
2と入力して英語を指定すると、「Hello!」と出力された。ここでようやく、最後の出力で改行する方法を発見。前半のprintfの最後で、(”? /n”)としておけばいい。キーボードによっては、「/n」ではなく、「¥n」。
☆ ☆ ☆
最後に、switch-case文ではなく、if else文で同じ処理をプログラムすると、成功した。やはり、実質よりも、形とか外見の問題が大きい構文なのか。
というわけで、あと2回くらいだから、出来れば年内に終わらせたい。それでは今日はこの辺で。。☆彡
(計 2608字)
| 固定リンク | 0
「数学」カテゴリの記事
- 4×9=36マスの格子を、8つの長方形(1~8マス)に区切る方法~開成中2025年入試、算数・問題2の解き方(2025.02.15)
- パズル「ナンスケ」の解き方、考え方14~難易度3、ニコリ作、朝日新聞be、2025年2月8日(2025.02.09)
- かけ算の九九の表で、長方形で囲まれた数を足して315になる場合~灘中学校2025年入試、算数1・問題6の解き方(2025.02.07)
- 動画配信のおすすめ作品など、商業サイトでお薦めを決める方法と計算回数~2025年共通テスト・旧情報関係基礎・第2問(2025.02.04)
- パズル「絵むすび」33、解き方とコツ、考え方(難易度4、ニコリ作、朝日新聞be、2025年1月25日)(2025.01.26)
「プログラミング」カテゴリの記事
- Python(パイソン)入門4~ランダムなサイコロの目の予想、数値データのリストの処理(ChatGPT4oも使用)(2024.09.20)
- ps5.js Web Editor(Processing)のプログラミングでお絵描き、アニメーション作成~ 高校教科書『情報 II 』(東京書籍)(2024.08.22)
- Python(パイソン)入門3~乱数を利用した、じゃんけんゲーム作成など(生成AI・ChatGPT4も使用)(2023.10.06)
- Python(パイソン)入門2~高校副教材とオンライン環境Bit Arrow、さらにAI(ChatGPT4)も使用(2023.09.06)
- Python(パイソン)入門1~人気プログラミング言語を高校教科書副教材(東京書籍)とオンライン環境Bit Arrowで簡単に(2023.02.28)
コメント