最普遍也是最基礎就是用switch開關語句實現,**很簡單,也很好像將switch放在乙個死迴圈中然後在迴圈內輸入input的值來呼叫不同四個函式。
這個**寫得很挫,而且很基礎了所以還有下面用函式指標,以及指標陣列來完成的簡單操作。
#define _crt_secure_no_warnings 1
#include
int add(int num1, int num2)
int sub(int num1, int num2)
int mul(int num1, int num2)
int div(int num1, int num2)
enum op //不給賦值的之後,列舉自動從0開始加
; void menu()//選單列表
int main()
case sub:
case mul:
case div:
case exit:
break;
default:
printf("選擇不規範\n");
}}
system("pause");
return
0;}
上面的用switch實現,你會發現**裡每個case語句了都得有一行輸入運算元的**,讓**看起來很繁瑣,怎麼用點稍微高階點的東西呢
我們不用開關語句怎麼有相同的效果呢,我們知道指標陣列可以存放多個指標位址,那我們可不可以把每個函式的位址都存放在乙個指標陣列裡呢?當我們輸入乙個選擇數,我們就訪問相對應函式的位址,從而訪問函式。同時要訪問函式的位址我們是不是還需要乙個可以存放函式位址的指標,也就是函式指標。
#define _crt_secure_no_warnings 1
#include
int add(int num1, int num2)
int sub(int num1, int num2)
int mul(int num1, int num2)
int div(int num1, int num2)
void menu()//選單
int main()
; //這裡首先是乙個指向函式的函式指標,然後再把這些函式指標存放在指標陣列裡
//因為我們輸入0不需要進行操作,所以讓pfunarr[0]為0
while (input)
else
if (input==0)
else
}system("pause");
return
0;}
我們發現程式確實比上面的switch實現好了很多並且也很高效,但我們還覺得不盡人意, 看過上面的指標陣列處理方法,我們發現main函式中感覺還是很凌亂,在main函式中建立了一大堆變數,所以我們先裡面可以分裝成乙個函式,而且還是感覺不是很高大上,那我們試點別的?
我們可以分裝乙個函式,然後把操作都在函式中進行,這裡主要注意的是我們已經將函式放到乙個指標陣列中,並且這些指標都指向函式,而我們要在這個函式中進行一系列加減乘除操作就必須把指著陣列傳參進去,所以我們要合理設計引數。所以就得給函式傳進去乙個函式指標型別。
#define _crt_secure_no_warnings 1
#include
int add(int num1, int num2)
int sub(int num1, int num2)
int mul(int num1, int num2)
int div(int num1, int num2)
void menu()//選單
void option(int (*op)(int , int))//這裡就需要傳進去乙個函式指標型別的引數
int main()
; while (input)
else
if (input==0)
else
}system("pause");
return
0;}
一步一步的從最簡單的switch語句到函式指標,進行大幅度優化,所有**都是可以這樣的,用所學到的知識,從多方面完成**,並且優化它。這樣才是好的。
計算器c 實現
1.中綴表示式轉字尾表示式 中綴 a b c d e 字尾 abc de 轉換步驟 1 從左到右掃瞄中綴表示式,遇到 轉 6 2 遇到運算元直接輸出 不進棧 3 遇到 則連續出棧輸出,直到遇到 為止 出棧但不輸出 否則 4 若是其它操作符,則與棧頂的操作符比較優先順序 若優先順序小於棧頂的優先順序,...
簡單計算器 兩種方法
讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 1 2 4 2 5 7 11 0輸出 3.00 13.36 這種型別題寫了很多,但每次變化一點點就會卡很久,而且中綴轉字尾也一直不熟練。今天再用兩種方法總結一次 相比於之前寫的中綴式轉字尾式,遇到的問題有 常量不再用a,b,c表示,而是具...
計算fibonacci數(多種方法)
include using namespace std 計算fibonacci數 方法一 二分遞迴法,時間複雜度為o 2 n 額外空間複雜度為常數 int recursivefibonacci int n 方法二 線性遞迴,時間複雜度為o n 空間複雜度為o n int linearrecursio...