//動態函數調用實現下列操作,輸入2個數以及操作符計算結果。@ 求最大公約數 $求最小公倍數 - 求差 + 求和 等等

int maxDivisorFunction(int x, int y){//求最大公約數
    int m = 0;
    if (x > y) {
        while (y != 0) {
            m = x % y;
            x = y;
            y = m;
        }
        return x;
    }else{
        while (x != 0) {
            m = y % x;
            y = x;
            x = m;
        }
        return y;
    }
}


int minMultipleFunction(int x, int y){//最小公倍數
    return x * y / maxDivisorFunction(x , y);

}


int poorFunction(int x, int y){//求差函數
    if (x > y) {
        return x - y;
    }else{
        return y - x;
    }
}


int sumFunction(int x, int y){//求和函數
    return x + y;
}

typedef int (*Pwork)(int, int);//定義指針變量類型Pwork用來指上面的計算函數


typedef struct symbol{
    char ch ;
    Pwork function;
} Symbol;//定義結構體Symbol來匹配字符和指向函數的指針


Pwork findFunction(char ah, Symbol *p, int count){//定義函數findFunction用來根據輸入的字符查找對應的函數指針.
    for (int i = 0; i < count; i++) {
        if (ah == (p+i)->ch) {
            return (p+i)->function;
        }
    }
    return NULL;
}

int resultFunction(int x, int y, char ah, Symbol *p, int count){
    Pwork function = findFunction(ah, p, count);
    return function(x,y);
}

int main(int argc, const char * argv[])
{
    //作業
    //動態函數調用實現下列操作,輸入2個數以及操作符計算結果。
    //@ 求最大公約數       $求最小公倍數
    //-  求差      + 求和   等等
    Symbol pair[4] = {
        {'@',maxDivisorFunction},
        {'$',minMultipleFunction},
        {'-',poorFunction},
        {'+',sumFunction}
    };
    int a = 0, b = 0;
    char str = 0;
    printf("輸入兩個數和操作符");
    scanf(" %d %d %c", &a, &b, &str);
    int c = resultFunction(a, b, str, pair, 5);
    printf("%d",c);


    return 0;
}
發佈了33 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章