プログラミング入門

プログラミング入門
電卓を作ろう・パートII!!
C言語で電卓







先週は足し算(+)と引き算(-)を同時に計算してしまった・・・。
ちょっと、電卓とは違う?
何が違うか?
電卓は“1+3=”とか“3-7=”とか“5×10=”とか・・・
つまり、演算(+、-、×、÷・・・和差積商)ごとに演算を実行する。
今週はこの演算が出来るところまでを目標にプログラミングする。
シナリオは・・・





演算を入力する: “1+3=”とか“3-7=”とか“5×10=”とか・・・
それぞれ、入れ物に入れる・・・それで、何をすればいいのだろう?
演算の種類が分かればいい!!
演算の種類が分かれば、その演算を実行して
結果を表示する
電卓
入力した「物」はどこに行くのか?
1
+
3
1
+
3
+
%
√
MR
-
/+
M-
M+
÷
7
8
9
×
C
4
5
6
-
AC
1
2
3
・
=
0
+
a
1の入れ物
4
4
4の入れ物
kekka
enzan
+の入れ物
3の入れ物
b
メモリという入れ物へ
⇒先週は数字の入れ
物だけを作った
⇒今週は、まず、演算
の入れ物を作る
電卓(演算の入れ物)
 左のプログラム
を作成して実行
してみよう!!
ここを入力して
から「Enter」
キーを押す。
 先週のプログラム
今週のプログラム
電卓(演算の入れ物)
enzan
「enzan」という名前をつけた、
文字を入れる入れ物を準備
「scanf(“・・・”);」を使ってい
るので、キーボードから入
力する。
キーボードから入力する
「物」をその順番とともに書
いてある
⇒“%d”は整数(数字)
⇒“%c”は文字(演算)
を入力することを示す
“%d%c%d”つまり“整数・
文字・整数”の順番に入れ
る入れ物を示す。
・最初の整数→「a」
・文字→「enzan」
・2番目の整数→「b」
 入れ物に演算を代入
電卓(演算の入れ物)
1
+
3
1
+
3
a
enzan
b
メモリという入れ物へ
※これで、数字だけで
なく、文字も入力でき
るようになった
電卓(演算の入れ物)
1
a
+
enzan
3
b
4
kekka
これで、いろいろな
演算(和・差・積・商)
に対応可能か?
⇒では、
引き算「1-3」を実
行してみてください。
%cは文字を表示することを示す
電卓(いろいろな演算を可能に)
引き算「1-3」の実行結果は?
おかしな
結果?
何が原因か?
つまり
入れ物「kekka」の数字が違う
これでは、どんな演算
がしたくても、つまり、
「enzan」の入れ物に
何が入力されても、
「kekka」の入れ物に
足し算の結果が代入
されてしまう!!
電卓(いろいろな演算を可能に)
どうすればよいか?
「enzan」の中に入って
いる文字によって、演
算を変えればよい。
足し算と引き算だけの場合
シナリオを考えてみよう!!
もし、「enzan」が‘+’だったら
「kekka」に「a」+「b」を代入
⇒「kekka=a+b;」
‘+’ではなくて、‘-’だったら
「kekka」に「a」ー「b」を代入
⇒ 「kekka=aーb;」
・・・とシナリオを作ってみた。
電卓(いろいろな演算を可能に)
 左のプログラムを作成
して実行してみよう!!
1回目
2回目
電卓(いろいろな演算を可能に)
シナリオからC言語へ
もし、「enzan」が‘+’だったら
もし⇒「if(条件を書く)」
※条件が正しかったら・・・「enzan」が‘+’だった
ら、その後に続く{・・・}の中身を実行する。
⇒kekka=a+b;
※正しくなかったら・・・「enzan」の中身が‘+’で
なかったら、次の行を実行する。{・・・}の中身を
実行しない。この場合は、次のelse if・・・へ
「==」は左辺「enzan」の中身と右辺「’+’」が同じという意味
‘+’ではなくて、‘-’だったら
そうではなくて、もし
⇒「else if(条件を書く)」
※条件が正しかったら・・・「enzan」の中身が
‘ー’だったら、その後に続く{・・・}の中身を実
行する。
⇒kekka=aーb;
※正しくなかったら・・・「enzan」の中身が‘ー’
でなかったら、次の行を実行する。 {・・・}の
中身を実行しない。この場合は、printf(“計算
結果の表示\n”);を実行する。
if文の処理の流れ(フローチャート)
開始
開始
No
もし、「enzan」が
‘+’だったら
Yes
「kekka」に「a」+「b」を代入
No
‘+’でなく、
‘-’だったら
Yes
終了
「kekka」に「a」-「b」を代入
終了
演習3
 講義では足し算‘+’と引き算‘-’が演算できる電卓を
作成した。
 では、このプログラムを、掛け算‘*’と割り算‘/’も演
算できるように変更しなさい。
 ヒント
 ①シナリオの続き
 ‘+’ではなく、‘-’でもなく、‘*’だったら
 「kekka」に「a」*「b」を代入
 ⇒ 「kekka=a*b;」
 ‘+’ではなく、‘-’でもなく、‘*’でもなく、‘/’だったら
 「kekka」に「a」/「b」を代入
 ⇒ 「kekka=a/b;」
演習3
 講義では足し算‘+’と引き算‘-’が演算できる電卓を作成した。
 では、このプログラムを、掛け算‘*’と割り算‘/’も演算できる
ように変更しなさい。
 ヒント
 ①シナリオの続き
 ‘+’ではなく、‘-’でもなく、‘*’だったら
 「kekka」に「a」*「b」を代入
 ⇒ 「kekka=a*b;」
 ‘+’ではなく、‘-’でもなく、‘*’でもなく、‘/’だったら
 「kekka」に「a」/「b」を代入
 ⇒ 「kekka=a/b;」
 ②掛け算をさせる場合の書き方
 右のプログラム
を実行すると、
下の結果の様
に、入力によっ
て異なった文章
を表示するプロ
グラムである。
このプログラム
を参考に、次
ページにあるよ
うに複数の条
件を聞いて、出
力する文章を
変えるプログラ
ムを作成しなさ
い。
チャレンジ問題
結果1
結果2
チャレンジ問題
チャレンジ問題
あなたは人間
ではありません。
あなたは人
間ですか?
あなたは
男ですか?
あなたは人
間の男です。
あなたは
女ですか?
Yes
No
あなたは人
間の女です。
あなたは人間
の男でも女で
もありません。
チャレンジ問題解答