C基礎1 四則演算プログラムを作る(画面表示とキー入力)
C基礎1 四則演算プログラムを作る(画面表示とキー入力)
この章では、単純に画面に文字を表示するプログラムの書き方を勉強します。また、算数で勉強してきた+-×÷といった計算をプログラムで行う場合の書き方についても勉強し、四則演算を行うプログラムを作成します。
動画は、Windows10とVisual Studio2019を使った説明になっていますが、WIndows11とVisual Studio2022を使った場合の操作方法と同じです。
プログラムとは、コンピュータへの命令書のことです。プログラムは、コンピュータへの命令書ですが、人間が読む読み物でもあり、人間が読みやすい様に書く必要があります。
プログラムをビルドして機械語にするためには、「文法」に則った書き方をしなければなりません。但し、文法通りに書くだけでは、人間が読みにくいプログラムになってしまう危険があります。このため、「文法」に加え、「作法」に則った書き方をしなければなりません。プログラムは、「文法」と「作法」に則った書き方をします。
コンピュータへは、「文」という単位で命令します。一番分かり易い文は、printf文です。printf文は、指定した文字を画面に表示させる命令です
ここでは、printf文の基本的な書き方を説明します。プログラムは、半角文字を使って書きますが、printf文で表示させる文字は、全角文字も指定することが出来ます。また、エスケープシーケンスと呼ばれる特殊な文字の並びを指定すると、改行(表示位置を次の行の左端に移動)や、タブ位置移動といった、特殊な命令をすることができます。
画面に文字を表示するプログラムを通して、「文法」と「作法」について学びます。
また、printf文で文字を画面に表示する時の行替えについてと、タブ文字によって、どの様な表示になるのかについても説明しています。
プログラムを書く場所は決められている
プログラムは、左図の「ココに色々なプログラムを書く」と書かれた場所に書きます。
これ以外の場所に書くと、文法違反になります。
コンピュータへの命令は「文」で行う
プログラムを書く場所に記述するのは「文」です。
色々な種類の文を幾つも書く事で、色々な事が出来る様になります。最初に覚えるのは、printf文とreturn文です。
「¥n」で行替え(改行)の指示をする
printf文で画面に文字を表示する時、行替えの指示は「改行文字」の表示で行わなければなりません。
「¥n」という2文字で行替えが行われます。
その他、「タブ文字」による位置合わせを行う事ができます。「¥」文字と「”」文字は、「¥¥」「¥”」という2文字を使います。
¥文字との組合わせで文字を表現するやり方をエスケープシーケンスと呼びます。
自己紹介するプログラムを作成してみましょう。
アスキーアートと呼ばれる、文字を組み合わせて絵の形にしたものを表示すると、画面表示が少し華やかになります。
Visual Studioを使ってプログラムを書くと、自動的に文字が挿入されたり、カーソルの位置が、自動的に右にずれたりします。自動的に挿入される文字は、対になって書かなければならない文字です。消さずに、対になった文字を意識してプログラムを書くようにしましょう。
カーソル位置のずれは、Visual Studioが字下げ(インデント)を意識してくれるからです。このずれた位置が、その行でプログラムを書き始める位置になりますので、プログラムを書き始める位置を意識しましょう。
Visual Studioは、字下げやスペースの入れ方等の「作法」に則った書き方をサポートしてくれます。
プログラムをこれから書いていきますが、ここでは計算を行うプログラムを書きます。
計算をする場合、どういう数値の計算をするのかの数値(データ)と、どういう計算をするのかの記号(+、ー,×、÷)を書きますが、プログラムで計算をする場合も基本的には同じです。データと記号で計算を表わします。計算方法を示す記号が、プログラムを書く場合は×や÷といった記号がなく、別の記号を使うので注意してください。
データは、直接、数値を書く場合と、データが入っている箱の名前を書く場合があります。プログラムでは、計算の過程を保存しておくための箱があり、この箱に、数値を記録する様にしています。この箱のことを「変数」と呼んでいます。
「変数宣言文」により、コンピュータの中に、データを記録するための箱が用意されます。
このデータを記録する箱には種類があり、データの種類によって箱の種類が違ってきます。変数宣言文では、その箱の種類を指定しなければなりません。この箱の種類を指定するのが「データ型」です。
四角形の面積を計算するプログラムを通して、変数とデータ型について学びます。
・変数は変数宣言文で用意する
変数はデータを入れる箱のような物で、この箱を用意させる命令が変数宣言文。箱には種類があり、データ型で箱の種類を指定します。
・int型とdouble型を覚える
代表的なデータ型に、int型とdouble型があります。小数点を扱えるか否かでデータ型が異なり、int型は小数点が扱えないデータ型(整数型)、double型は小数点以下の数値も扱うことができるデータ型(浮動小数点型)です。
メモ:よく使う浮動小数点型はfloat型ですが、1.23の様な小数点付きデータはdouble型となるため、初心者の方には、先ずはdouble型を使ってもらうようにします。
・コンピュータの中に記録される形式は2種類ある
コンピュータの中に記録されるデータは0と1の並びです。この0と1の並びは、固定2進数表現と呼ばれる形式と浮動小数点形式と呼ばれる形式の2種類があります。
int型のデータは固定2進数数表現で記録され、double型のデータは浮動小数点形式で記録されています。
・変数名の名前の付け方にはルールがある
変数名は、自分の好きな名前を付けます。実験的なプログラムの場合は、適当に、aやxといった名前で良いですが、長く使う可能性のあるプログラムの場合は、データの意味がイメージできる名前を付ける様にしましょう。
Visual Studioでは、全角文字の名前も付けられますが、半角英数字とアンダーラインを組み合わせた名前を付ける様にしましょう。
・書式指定子は「int型は%d」「double型は%lf」と覚える
double型のデータを表示する場合、%lfだけだと小数点以下6桁表示になってしまい煩わしくなります。%の後にピリオドを書いて、その後、表示させたい小数点以下の桁数を書く様にしましょう。
四角形の面積を求めるプログラムを作成しましょう。
辺の長さが整数で表わされている四角形と、小数点付きの数値で表わされている四角形、2つの四角形の面積を計算してください。
計算式で使うデータのデータ型を同じデータ型で揃えるのが基本です。異なるデータ型が混じった場合、どの様なころが起きるのかを説明します。
また、割り算については、どの様なデータ型を使っているかにより、結果が異なるります。整数型同士ならば、小数点以下が切捨てられた結果になるのに対し、浮動小数点型が含まれる場合は、小数点以下まで求まります。
プログラムは、扱うデータのデータを意識して書かなければなりません。
ここでは、キャスト(強制型変換)と呼ばれる文法を紹介しています。
また、エラーメッセージと警告メッセージ(ワーニング)の違いについても説明しています。
三角形の面積を計算するプログラムを通して、データ型を意識したプログラムを学びます。
・整数同士の割り算結果は切捨て
左図の計算式は「9 × 5 ÷ 2」という計算が行われます。
整数通しの割り算で切捨てになるため、計算結果は「22」です。
・整数型と浮動小数点型の割り算結果は小数点以下が求まる
「2.0」という書き方をすると浮動小数点定数という文法的な扱いになりdouble型(浮動小数点型)のデータになります。整数と浮動数点型の計算は、小数点以下が求まるため、結果は「22.5」です。
・キャストで強制的にデータ型を変えられる
キャストという文法を使うと、指定したデータ型に変えて計算を行うことができます。
・代入する時、右辺のデータ型を左辺のデータ型に揃える
「データ型のサイズ」とは箱の大きさのことで、代入先(=の左辺)のデータ型のサイズが、代入元(=の右辺)のデータ型のサイズよりも小さい場合、代入するデータが箱に収まりきれなくなる恐れがあります。この場合、コンパイラは警告メッセージ(ワーニング)を出します。
・警告メッセージは除去する習慣を付ける
エラーメッセージが出た場合はプログラムを実行することができませんが、警告メッセージだけの場合はプログラムを実行することができます。但し、警告メッセージはバグの可能性があることを教えてくれるものなので、極力除去する習慣を付けましょう。警告メッセージを0にする事は、作法の1つです。
四台形の面積を求めるプログラムを作成しましょう。
上底、下底、高さは整数、面積は小数点以下1桁まで求めた結果にします。三角形を求めるプログラムを参考にすると良いでしょう。
整数データを加減乗除するプログラムを作成しましょう。
割り算では、商と余りを求める式と、小数点以下2桁まで求める式を表示します。
余りは%という記号が、剰余算するためのものとして用意されています。
データ入力はscanf文で行います。プログラムに書いていた数値を、プログラムには書かず、プログラムを実行させた時に入力する様にします。
printf文の時に使った書式指定子で、int型データを入力するのか、double型のデータを入力するのかを指定します。printf文の書き方と、若干書き方が違うので気を付けなければなりません。
プログラムを実行する時に、データ入力しますが、どの様なデータを入力したらよいのか、プログラムを実行する時に分かる様に「入力促進メッセージ」を表示させます。プログラムを書く人とプログラムを実行する人は、別の人です。プログラムを見なくとも、データ入力できるような気配りをしましょう。
Visual Studioでscanf文を使う場合、Visual Studio独自の書き方をしなければなりません。この書き方についても説明します。
「1.2 変数とデータ型(四角形の面積)」で説明した四角形の面積を求めるプログラムでは、縦と横の長さは、代入文でデータを変数に入れていましたが、ここでは、代入ではなくscanf文を使って、データを変数に入れる様にします。
scanf文の書き方や、実行した時の動きを学びます。
・データ入力する時は入力促進メッセージを表示する
scanf文の前では、どの様なデータを入力して欲しいのかをprintf文で表示する様にします。
・scanf文は書式指定子を書いたら、変数の前に&を書く
scanf文は、printf文と同様の書式指定子(%d又は%lf)を書きます。printf文では、変数に入っているデータを表示させる場合、変数しか書きませんでしたが、scanf文では、入力したデータを入れる変数の変数名の前に&という記号を書きます。
・複数データ入力時のデータの区切りは空白文字類
データ入力を確定させるにはEnterキーを押します。複数データ入力する時は、データとデータの間に、空白文字類を入れます。空白文字類とは、空白・タブ・改行の事です。
・scanf文は何もしないとVisual Studioではエラーになる
scanf文はセキュリティに問題があるため、Visual Studiではエラーとなり実行させることが出来ません。サンプルプログラムでは、左記の方法1の書き方をすることで、エラーを発生させない様にしています。
メモ:ここで追加する「#define ・・・・・」は、「#include <stdio.h>」の直前に記述しなければなりません。これは、#defineでマクロ定義した名前を、stdio.hの中で定義済か否かをチェックしている為です。
・scanf文の警告メッセージを除去する
Visual Studioでは、scanf文だけだと警告メッセージが発生してしまいます。警告メッセージを0にする習慣を付けた方がよいので、scanf文の最初に「(void)」を付ける様にしましょう。
メモ:この「(void)」は、先に説明したキャストという文法を使った書き方です。scanf文の警告は、scanfによるデータ入力が失敗した場合もあり得るのに、失敗した場合の事を無視していいの?ということを警告するメッセージです。「(void)」でキャストすると、「scanf文のデータ入力失敗を無視します」ということを明確にする事ができます。これで、警告メッセージは出なくなります。
プログラムは、自分以外の人が読んで理解できる読み物にする必要があります。
コメントやプログラムスタイル(作法)は、プログラムを読みやすくするための手段です。
コメントの書き方を学びます。
代表的なプログラムスタイルを守ったプログラムが書ける様になりましょう。
・コメントには2種類の書き方がある
/* */の書き方と、//の書き方があります。
1行で書き切る場合は、//コメントの方が良いです。
・ヘッダコメント、ブロックコメント、行末コメント
プログラム全体の説明をするのがヘッダコメント、所々の塊ごとの説明をするのがブロックコメント、行単位の説明をするのが行末コメントです。
コメントの書き過ぎも良くないので気を付けましょう。
・代表的なプログラムスタイル
代表的なプログラムスタイル(作法)です。最低限、左記のスタイルに則ったプログラムを書くようにしましょう。
メモ:C(C++)言語の有名なプログラムスタイルに「Google C++ スタイルガイド」や「GNUコーディング・スタンダード」がありますが、文法がしっかり分かっていないと理解するのは難しいです。
「《練習問題04》四則演算プログラム」で作ったプログラムでは、代入文でデータを変数に入れていましたが、代入ではなくscanf文を使って、データ入力する様にプログラムを書き換えましょう。
更に、ヘッダコメント、ブロックコメント、行末コメントを追加してみましょう。
YouTubeの動画では、以下の2つの流用方法を説明しています。下記の方法の他、プロジェクトフォルダごとコピーする方法もあります。
テスト実施フォーム ← テストチャレンジできます
上記テストの解説と解答