算法的通常實現:算法
#include<stdio.h> void mnue() { printf("------------------------------------------\n"); printf("------1.Add 2.Sub-----------------\n"); printf("------3.Mul 4.Div-----------------\n"); printf("------ 0.exit -----------------\n"); printf("------------------------------------------\n"); } int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } int main() { int input = 0; int x = 0; int y = 0; do { mnue(); printf("請選擇:"); scanf("%d", &input); switch (input) { case 1: printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d + %d = %d\n", x, y, Add(x, y)); break; case 2: printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d - %d = %d\n", x, y, Sub(x, y)); Sub(x, y); break; case 3: printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d * %d = %d\n", x, y ,Mul(x, y)); break; case 4: printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d / %d = %d\n", x, y, Div(x, y)); break; case 0: printf("退出\n"); break; default: printf("輸入錯誤,請從新輸入!\n"); } } while (input); return 0; }
封裝新函數,存儲冗餘項,利用回調函數優化case裏面的冗餘項:
回調函數:
數組
#include<stdio.h> void mnue() { printf("------------------------------------------\n"); printf("------1.Add 2.Sub-----------------\n"); printf("------3.Mul 4.Div-----------------\n"); printf("------ 0.exit -----------------\n"); printf("------------------------------------------\n"); } int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } void Cacl(int (*pf)(int, int)) { int x = 0; int y = 0; printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d\n", pf(x, y)); } int main() { int input = 0; do { mnue(); printf("請選擇:"); scanf("%d", &input); switch (input) { case 1: Cacl(Add); break; case 2: Cacl(Sub); break; case 3: Cacl(Mul); break; case 4: Cacl(Div); break; case 0: printf("退出\n"); break; default: printf("輸入錯誤,請從新輸入!\n"); } } while (input); return 0; }
利用函數指針數組實現:
當功能多了的時候,case語句不會那麼長了ide
#include<stdio.h> void mnue() { printf("------------------------------------------\n"); printf("------1.Add 2.Sub-----------------\n"); printf("------3.Mul 4.Div-----------------\n"); printf("------ 0.exit -----------------\n"); printf("------------------------------------------\n"); } int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } int main() { int input = 0; int x = 0; int y = 0; do { mnue(); printf("請選擇:"); scanf("%d", &input); int (*pArr[5])(int, int) = { 0,Add,Sub,Mul,Div }; //故意設5個,使得選擇的函數能夠對應下標 if (input >= 1 && input <= 4) { printf("請輸入兩個操做數:"); scanf("%d%d", &x, &y); printf("%d\n", pArr[input](x, y)); } else if (input == 0) { printf("退出\n"); } else { printf("輸入錯誤,請從新輸入!\n"); } } while (input); return 0; }