ほぷしぃ

納得C言語!

[第17回]プリプロセッサ(解答)

解答

(1)解答プログラム

17_1.cpp

#include <stdio.h>

//my.hの読込
#include "my.h"

int main()
{
    int s = 0,a = 0,b = 0,c = 0;    //変数の宣言と初期化
    int *p1,*p2;
    p1=&a;
    p2=&b;

    while(1){
        printf("\n簡易計算機\n");
        printf("加算=>1, 減算=>2 ,乗算=>3 ,除算=>4 ,乗除=>5 ,終了=>0\n");
        printf("\nどの計算をしますか =");
        scanf("%d",&s);

        if(s == 0){
            printf("終了します\n");
            break;
        }

        printf("数値Aを入力してください=");
        scanf("%d",&a);
        printf("数値Bを入力してください=");
        scanf("%d",&b);

        switch(s){
            case 1:
                c = add(a,b);
                printf("加算A+Bの答えは%d\n",c);
                break;

            case 2:
                c = sub(a,b);
                printf("減算A-Bの答えは%d\n",c);
                break;

            case 3:
                c = mul(a,b);
                printf("乗算A*Bの答えは%d\n",c);
                break;

            case 4:
                c = div(a,b);
                printf("除算A/Bの答えは%d\n",c);
                break;

            case 5:
                div2(a, b, p1, p2);
                printf("剰余A/Bは%d余り%d",*p1,*p2);
                break;

            default:
                printf("数値が正しくありません\n");
        }
    }
    return 0;
}

int add(int i,int n)        //自作関数add
{
    int kai;
    kai = i + n;            //加算
    return kai;             //kaiを返す
}

int sub(int i,int n)        //自作関数sub
{
    int kai;
    kai = i - n;            //減算
    return kai;             //kaiを返す
}

int mul(int i,int n)        //自作関数mul
{
    int kai;
    kai = i * n;            //乗算
    return kai;             //kaiを返す
}

int div(int i,int n)        //自作関数div
{
    int kai;
    kai = i / n;            //除算
    return kai;             //kaiを返す
}

void div2(int a, int b, int *i, int *n)
{
    *i = a/b;
    *n = a%b;
}

my.h

//関数のプロトタイプ宣言
int add(int i,int n);
int sub(int i,int n);
int mul(int i,int n);
int div(int i,int n);
void div2(int a, int b, int *i, int *n);

解説

結果は第13回の演習問題(2)と同じなので省略します
関数のプロタイプをmy.hに書いて、17_1.cppの先頭で#includeして読み込みます。


(2)解答プログラム

#include <stdio.h>

#define KAZAN(i,f) i+f         //加算マクロ関数
#define GENZAN(i,f) i-f        //減算マクロ関数
#define ZYOUZAN(i,f) i*f       //乗算マクロ関数
#define ZYOZAN(i,f) i/f        //除算マクロ関数

int main()
{
    int s = 0,a = 0,b = 0,c = 0;

    while(1){
        printf("\n簡易計算機\n");
        printf("加算=>1, 減算=>2 ,乗算=>3 ,除算=>4 ,終了=>0\n");
        printf("\nどの計算をしますか =");
        scanf("%d",&s);

        if(s == 0){
            printf("終了します\n");
            break;
        }

        printf("数値Aを入力してください=");
        scanf("%d",&a);
        printf("数値Bを入力してください=");
        scanf("%d",&b);

        switch(s){
            case 1:
                c = KAZAN(a,b);
                printf("加算A+Bの答えは%d\n",c);
                break;

            case 2:
                c = GENZAN(a,b);
                printf("減算A-Bの答えは%d\n",c);
                break;

            case 3:
                c = ZYOUZAN(a,b);
                printf("乗算A*Bの答えは%d\n",c);
                break;

            case 4:
                c = ZYOZAN(a,b);
                printf("除算A/Bの答えは%d\n",c);
                break;

            default:
                printf("数値が正しくありません\n");
                break;
        }
    }
    return 0;
}

結果

関数群をマクロにしました。
なんだかすっきりしたプログラムになりましたね。
1行程度の関数ならマクロにしてしまったほうが楽になるかもしれません。


[第17回]プリプロセッサ ページのトップ [第18回]演習問題X