« ちょっと体調回復、無理して2ヶ月半ぶりにハーフジョグ&つぶやき | トップページ | 新型コロナウイルスワクチン(ファイザー社・コミナティ)2回接種完了、副反応は肩のわずかな筋肉痛のみ、感想は複雑・・ »

C言語入門4~変数の入力と計算、型指定子 int(整数型)、float(実数型)、順次構造

先日、約1年ぶりにアプリで復習した後、今日は高校の教科書『新情報技術基礎』(コロナ社)を使用。答のプログラミング例がほぼ書かれてる問題で、自分なりに少しアレンジしたプログラムを作って練習した。

  

利用したのはネットで無料で環境を提供してくれてる、paiza.io。ありがたいサイトに感謝。自分で環境構築を行う作業は何度も失敗してるので、またいずれ。自分のPCで試すと、なかなか説明の通りにならないのだ。

   

今日使ったのは、第5章・C言語によるプログラミングの第4節。変数と順次構造(p.130~134)。5ページしか進まなかったのは、何度も間違えたり考え込んだりしたから。既に前の箇所に書かれてた内容は、あらためて説明してくれないから、自分で前のページに戻って復習する必要がある。

  

順次構造とは難しげな用語だが、要するに順番に次々と進む仕組みのこと。選択や反復がない、一番シンプルな流れだ。選択や反復については一応、7年前にQuick BASICを使って記事を書いてるが、ほとんど覚えてない。

   

  

     ☆     ☆     ☆

211028a

   

まず、例題5.6(5章の6問目)。長方形の縦と横の長さを整数で入力して、面積を整数で出力するプログラム。上図は、教科書に載ってるものとほぼ同じで、面積を s と書く代わりに、そのまま menseki としたもの。もちろん、縦×横。

   

4行目の先頭の「int」が整数型の指定子で、変数 tate、yoko、menseki が整数だと宣言してる。私が苦手なのが6行目の入力設定。%dと%dの間にコンマがないのが引っかかるし、カッコの前半だけ引用符に入ってるのも分かりにくいし、その右の変数名に & が付いてるのもなじめない。

  

5行目で、改行を表す「逆スラッシュ+n」を入れてるが、教科書には付いてない。たぶん、同じC言語の中にも、細かい違いがあるということだろう。

    

211028b

   

下の「入力」という所をクリックして、半角スペースを挟んで、半角数字の 7 と 9 を入力。「実行」すると、確かに面積 63 が表示された。

         

211028c

   

  

      ☆     ☆     ☆

211028d

   

続いて、円の半径を入力して、面積を出力するプログラム。円周率3.14×半径×半径。半径を表す変数は、そのまま hankei 。面積は menseki。ちなみに教科書は、r と s になってる。

  

これは円周率が小数だから、変数は実数型の指定子 float を使って宣言(4行目)。なるべく教科書を見ずに入力したら、何度もコンパイル・エラーが表示されて、挫折しそうになった。半径を入力する6行目で、hankei の前の & を忘れてたのだ。エラー表示の英語はもっと分かりにくい書き方だったので、意味が分からなかった。

  

半径 5 を入力して実行すると、出力は 78.500000。確かに、3.14×5×5の値になってる。

    

   

     ☆     ☆     ☆

211028e

  

3問目は、問7。上底(じょうてい)、下底(かてい)、高さを入力して、台形の面積を計算するプログラム。(上底+下底)×高さ÷2。

  

教科書だと、30、20、10 を入力するだけだから、答は (30+20)×10÷2=250。整数型でもいいはずだけど、面積の答は 250.000000 と与えられてるから、実数型(この教科書では float)を宣言。÷2が入ってるし、小数になることが多いからか。ちなみに、この教科書では、より詳しくて実用的な実数の型指定子、double は使ってない。

  

この3問目でようやく、わりとスラッと書けたから、気を良くして次へ。

    

    

      ☆     ☆     ☆

211028f

  

4問目は、整数どうしの割り算(除算)を行った時の、商と余りに関する問題(例題5.7)。与えられた金額を、10円玉と5円玉と1円玉を使って、なるべく少ない枚数で作りたい。要するに、なるべく10円玉を使って、次になるべく5円玉を使えばいい。変数は、ここではそのまま、kingaku、coin10、coin5、coin1。

      

まず、金額を10で割った商が、10円玉の枚数。ここでは 47 円だから、/10 の計算結果 4 を使って、10円玉は4 枚。次は、その割り算の余り(ここでは 7)を 5 で割ればいいから、余りを出す記号 % を使って、coin5=(kingaku%)/5 。そのまた余りが1円玉だから、coin1=(kingaku%10)%5 。

   

211028l

    

ちなみに教科書のプログラムは、最初に10で割った後、金額を変更する形になってる(上図)。私は不自然だと感じるけど、なるべく単純な計算式にしたかったということか、あるいは勉強のためか。

  

とにかく、47 円を入力して「実行」すると、10円玉 4 枚、5円玉 1 枚、1円玉 2 枚が出力された。

       

211028g

  

  

     ☆     ☆     ☆

211028h

  

最後、5問目は、総秒数(全体の秒数)を入力して、何時間何分何秒かを表示するプログラム(問9)。これも、私と教科書とで発想が違ってた。

  

上が教科書のやり方で、まず秒数(second)を 60 で割って、分(minute)を出す。その割り算の余りが、新たな秒。さらに、分を 60 で割って、時間(hour)を求め、その割り算の余りを新たな分として定義し直してる。確かに、3670を入力すると、1時間1分10秒と出力される。

            

211028i

  

しかし、私なら下のように書く。これなら、分の定義変更が無くて1行少ないし、日本語の順番(時間、分、秒)に求める形になる。式がほんの少し複雑になるだけ。

       

211028j

   

なお、最後に試しに型指定子を実数型の float に変えてみたら、余りの計算の行2つにバツ印が付いてしまった。なるほど、商と余りという計算は、整数型のものなのか。このコンパイル・エラーはわりと分かりやすい英語表示になってた。second%3600 の % は不適当だという警告。

          

211028k

    

ちょっと思い出したから、なるべく早めに先に進みたいと思ってる。今日のところはこの辺で。。☆彡

    

          (計 2344字)

| |

« ちょっと体調回復、無理して2ヶ月半ぶりにハーフジョグ&つぶやき | トップページ | 新型コロナウイルスワクチン(ファイザー社・コミナティ)2回接種完了、副反応は肩のわずかな筋肉痛のみ、感想は複雑・・ »

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

コメント

コメントを書く



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


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



« ちょっと体調回復、無理して2ヶ月半ぶりにハーフジョグ&つぶやき | トップページ | 新型コロナウイルスワクチン(ファイザー社・コミナティ)2回接種完了、副反応は肩のわずかな筋肉痛のみ、感想は複雑・・ »