Calculator

電卓プログラムの考え方、書き方例

2つの数値の加減乗除をする電卓のようなプログラムを作ります。
簡単なようですが、多くの話題(データ型の選択、入力、判断や繰り返しなど)を含んでおり、学習に役立つ例題です。
今回は、プログラムをつくる流れも分かるように、どんなプログラムにするか検討するところから始めます。 それを処理手順に書き、C言語のコードに直します。

プログラムの機能を考える

まずは、どんなプログラムにするかを考え、前提とすることや制約についても検討します。

  1. 数や演算の指定はどうする?
    たとえば「2 + 5」のように、「数値1 演算記号 数値2」の順に入力すると計算結果が表示されるようにする。
    演算記号は、+, -, *, / のみとする。
  2. 繰り返して計算できるようにする
    繰り返しの終了は、指定が上記の書式でなかったときとしよう。
  3. 他に考えておくことは?
    (1) 浮動小数点数でも計算できるようにする
    (2) 加減乗除以外の演算記号が指定されたらどうする?
    (3) 割り算で、ゼロ割しようとしたときはどうする?
    (4) 電源ON の代わりに指定の書式を示すメッセージを表示しよう。電源OFF のメッセージも表示しよう
    (2) と (3) のケースは、エラー・メッセージを表示して、指定し直せるようにしよう。

処理手順として書く

上の検討結果を踏まえて、処理内容を具体的かつ端的に書きます。 判断や繰り返し、データの入出力も分かるようにします。
下記では、チャートを使わずに書きます。

電卓プログラムの処理手順 】
指定の書式を示すメッセージを表示する
<繰り返し>
|  「数値1 演算記号 数値2」の指定を受け取る –> 変数 a, op, b へ
|    指定の書式でなかったとき) 繰り返しを抜ける
|  演算記号 op に応じた計算をする –> ans へ結果を入れる
|    + のとき) a + b を求める
|    - のとき) a – b を求める
|    * のとき) a * b を求める
|    / のとき) b がゼロでないかチェックする
|          ゼロのとき) エラー・メッセージを表示して繰り返しの先頭に戻る
|          a / b を求める
|    それ以外) エラー・メッセージを表示して繰り返しの先頭に戻る
-  答え ans を表示する
電源OFF のメッセージを表示する

プログラムコードに直す

上記の手順を素直にC言語で書きます。

電卓プログラムの書き方例 】

#include <stdio.h>
main()
{
    double  a, b, ans;
    char    op;

    printf( "加減乗除(+,-,*,/)ができます。指定例:2+5、終了時はq\n" );
    while( 1 ) {
        printf( "ready : " );
        if( scanf( "%lf %c %lf", &a, &op, &b ) != 3 ) break;
        switch( op ) {
        case '+': ans = a + b; break;
        case '-': ans = a - b; break;
        case '*': ans = a * b; break;
        case '/': if( b == 0.0 ) {
                     printf( "Error!(ゼロでの割算はできません)\n" );
                     continue;
                  }
                  ans = a / b; break;
        default:  printf( "Error!(演算記号の指定が誤りです)\n" );
                  continue;
        }
        printf( "--> %g\n", ans );
    }
    printf( ".... Power OFF\n" );
}

 実行例

加減乗除(+,-,*,/)ができます。指定例:2+5、終了時はq
ready : 6.5 * 3
--> 19.5
ready : 7 % 4
Error!(演算記号の指定が誤りです)
ready : 123 / 2
--> 61.5
ready : 7 + 16
--> 23
ready : q
.... Power OFF

 

「Calculator」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です