130 300 250 1000

kadai2-3
買い物の合計金額を計算するプログラムを作成しなさい。商品の数は 3 個とし、一つ一つの商品の
金額は税別料金として、合計金額を求めてから 5%の消費税を加える。また、支払い金額を入力し、
お釣りも表示すること。
実行結果例(斜体はキーボードから数値を入力する部分)
商品 1 の価格を入力してください
130
商品 2 の価格を入力してください
300
商品 3 の価格を入力してください
250
合計金額(税込み)は○○円です
支払金額を入力してください
1000
お釣りは△△円です
処理の流れ
(1)商品の価格を格納するため、int 型の変数を 3 個用意する。
int syouhin1, syouhin2, syouhin3;
また、合計金額、支払金額、お釣りを格納するため、int 型の変数を 3 個用意する。
int goukei, shiharai, oturi;
変数名の付け方は大事である。一目見て変数が何に使われているかわかるように心がけること。
(2)
「商品 1 の価格を入力してください」というように、printf 文を使って表示する。
printf("商品 1 の価格を入力してください\n");
(3)scanf 文を使って①で宣言した変数にデータをキーボードから入力する。
scanf("%d", &syouhin1);
(4)商品 3 まで同様に処理する。
(5)入力処理が終わったら、商品 1 から商品 3 の価格の合計を求め、消費税込みの金額にするため、
1.05 を乗じ、変数に代入する。
goukei = 1.05 * ( syouhin1 + syouhin2 + syouhin3 );
(6)「合計金額(税込み)は○○円です」と表示する。○○には変数 goukei に格納されているデータ
を出力させる。
printf("合計金額(税込み)は %d 円です\n", goukei);
-1-
(7)「支払金額を入力してください」と表示する。
(8)支払金額をキーボードから入力し、変数 shiharai に格納する。
(9)おつりを計算し、変数 oturi に格納する。
(10)「お釣りは△△円です」と表示する。△△には変数 oturi に格納されているデータを出力さ
せる。
注意
このプログラムをコンパイルするとコンパイラによっては警告(warning)が出る。goukei = 1.05 *
( syouhin1 + syouhin2 + syouhin3 );の処理では、goukeiがint型であるにもかかわらず、代入してい
る値が実数であるためである。これを解消するには、以下のようにする必要がある。
goukei = (int)(1.05 * ( syouhin1 + syouhin2 + syouhin3 ));
(int)は変数の型を括弧でくくったもので、キャスト(明示的な型変換)という。これは変数の型が代
入する値の型と異なる時に使うことで、型に合わせた代入を行うことができる。ここではint型に変更
されて、
小数点以下の値は切り捨てられてから代入が行われることになる。
これについては教科書p.98
にも解説が載っているので読んでおくこと。
続き
プログラムを商品の個数も入力して計算するようにプログラムを変更しなさい。
実行結果例(斜体はキーボードから数値を入力する部分)
商品 1 の価格を入力してください
130
商品 1 の個数を入力してください
3
商品 2 の価格を入力してください
300
商品 1 の個数を入力してください
4
商品 3 の価格を入力してください
250
商品 3 の個数を入力してください
1
合計金額(税込み)は○○円です
支払金額を入力してください
10000
お釣りは△△円です
ヒント
個数を入力する変数を 3 個追加して、キーボードから値をそれぞれ入力する。また、合計金額を求
-2-
める部分を変更する。
続き
入力された金額が合計金額に不足している場合、
「お金が足りません」と表示するプログラムに変更
する。
kadai2-4
身長と体重を入力し、BMI を計算して表示するプログラムを作成しなさい。BMI とは Body Mass
Index の略で肥満度の指標であり、身長と体重を用いて「BMI = 体重[kg]÷(身長[m]×身長[m])」とし
て計算する。BMI は小数点以下一桁に調整して出力する。
実行結果例(斜体はキーボードから数値を入力する部分)
BMI を計算します。
身長(m)を入力してください。
1.84
体重(kg)を入力してください。
75.6
BMI=75.6kg÷(1.84m×1.84m)で計算します。
あなたの BMI は 22.3 です。25 を超えると注意してください。
ヒント
なし。
kadai2-5
テストの平均値を計算して表示するプログラムを作成しなさい。キーボードから入力する点数は整
数型で 3 つとし、平均値を求めてから実数型変数に値を代入する。その後、結果を小数点以下一桁で
出力を行いなさい。
実行結果例(斜体はキーボードから数値を入力する部分)
点数 1 を入力してください
90
点数 2 を入力してください
65
点数 3 を入力してください
78
テストの平均点は 77.7 点です
ヒント
(1)点数を格納するため、int 型の変数を 3 個用意する。
(2)平均値を格納するため、double 型の変数を1個用意する。
(3)キーボードから値を入力し、平均値を求め、出力を行う。整数型で合計を求めてから割り算を
-3-
行うことになる。そして結果は実数型に代入することになる。
平均値を求める場合、int 型変数を a,b,c、double 型変数を d として宣言した場合には、例えば計算
式を d = (a+b+c)/3.0;として求めることができる。a,b,c は整数型だが、3.0 は実数型となるので、計算
式の右辺は自動的にデータ量が多い(より精度が高い)方に型変換が行われる。これを暗黙的な型変
換という。これに対して明示的な型変換のことをキャストということは前述した。変数型のデータ量
(精度)には一般に以下の関係がある。
char < int < float < double
それでは 3.0 を 3 に変え、d = (a+b+c)/3;とした場合を考えてみよう。点数を 90、65、78 とした場
合の平均値は 77.7 である。しかし、a,b,c,3 は全て整数型であるので、小数点以下の値が切り捨てら
れてしまい結果は 77 になる。その後、実数型の変数 d に代入されると表示される結果は 77.0 になっ
てしまうため、これは間違いである。
正しく計算させるためには、先に紹介したように d = (a+b+c)/3.0;として、計算式の適切な部分に実
数型を含める必要がある。a+b+c は合計を求める部分なので整数値の演算でかまわないが、割り算部
分は実数の計算結果が得られるように(a+b+c)をキャストを用いて、(double) (a+b+c)と書くか、3.0
と数値を実数で書く必要がある。以下にキャストを使った場合のプログラム例を示す。
d = (double)(a+b+c)/3;
d = (double)(a+b+c)/ 3.0;
これらの書き方はいずれも正解である。
ここで、以下の書き方について考えてみよう。一見すると正解のように見えるかもしれないが、括
弧の付け方に問題があり、実は不正解である。
d=(double) ((a+b+c)/3);
この式の場合には括弧が優先され、((a+b+c)/3)が先に計算される。結果は小数点以下を切り捨てた 77
が得られ、それを double 型に型変換した 77.0 が代入されてしまう。
まとめ
プログラムを作成する際にはデータ型と演算子の優先順位を意識して作成しなくてはならない
ここまでに習った演算子の優先順位は以下の通り
( ) > *,/,% > +,- > =
kadai2-6
ここまでに printf、scanf、変数、四則演算、if 文について習った。これらを利用し、自分で使用例
を考えてオリジナルの処理を行うプログラムを作成しなさい。時間に余裕がある人は複数作成して提
出してもよい。ただし、少なくとも一つは作成して提出すること。
このプログラムについては、どのような動作を行うものかを簡単でよいので説明を付けること。
-4-