C語言計(jì)算器的3種實(shí)現(xiàn)方法代碼
方法一
#include <stdio.h>
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 menu()
{
printf("***************************\n");
printf("*** 1. Add 2. Sub ***\n");
printf("*** 3. Mul 4. Div ***\n");
printf("*** 0. Exit ***\n");
printf("***************************\n");
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = Add(x, y);
printf("%d\n", ret);
break;
case 2:
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = Sub(x, y);
printf("%d\n", ret);
break;
case 3:
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = Mul(x, y);
printf("%d\n", ret);
break;
case 4:
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = Div(x, y);
printf("%d\n", ret);
break;
case 0:
printf("退出計(jì)算器\n");
break;
default:
printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
break;
}
} while (input);
}
方法二
使?函數(shù)指針數(shù)組的實(shí)現(xiàn):
#include <stdio.h>
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 menu()
{
printf("***************************\n");
printf("*** 1. Add 2. Sub ***\n");
printf("*** 3. Mul 4. Div ***\n");
printf("*** 0. Exit ***\n");
printf("***************************\n");
}
int main()
{
int (*pf[])(int, int) = { NULL,Add,Sub,Mul,Div };
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = pf[input](x, y);
printf("%d\n", ret);
}
else if (input == 0)
{
printf("退出計(jì)算器\n");
}
else
{
printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
}
} while (input);
}
回調(diào)函數(shù)是什么?
回調(diào)函數(shù)就是?個(gè)通過函數(shù)指針調(diào)?的函數(shù)。
如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另?個(gè)函數(shù),當(dāng)這個(gè)指針被?來調(diào)?其所指向的函數(shù)時(shí),被調(diào)?的函數(shù)就是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)?直接調(diào)?,?是在特定的事件或條件發(fā)?時(shí)由另外的??調(diào)?的,?于對(duì)該事件或條件進(jìn)?響應(yīng)。
中我們寫的計(jì)算機(jī)的實(shí)現(xiàn)的代碼中,紅?框中的代碼是重復(fù)出現(xiàn)的,其中雖然執(zhí)?計(jì)算的邏輯是區(qū)別的,但是輸?輸出操作是冗余的,有沒有辦法,簡(jiǎn)化?些呢?因?yàn)榧t?框中的代碼,只有調(diào)?函數(shù)的邏輯是有差異的,我們可以把調(diào)?的函數(shù)的地址以參數(shù)的形式傳遞過去,使?函數(shù)指針接收,函數(shù)指針指向什么函數(shù)就調(diào)?什么函數(shù),這?其實(shí)使?的就是回調(diào)函數(shù)的功能。
方法三
#include <stdio.h>
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 menu()
{
printf("***************************\n");
printf("*** 1. Add 2. Sub ***\n");
printf("*** 3. Mul 4. Div ***\n");
printf("*** 0. Exit ***\n");
printf("***************************\n");
}
void Cal(int(*pf_t)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("請(qǐng)輸入:>");
scanf("%d %d", &x, &y);
ret = pf_t(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
Cal(Add);
break;
case 2:
Cal(Sub);
break;
case 3:
Cal(Mul);
break;
case 4:
Cal(Div);
break;
case 0:
printf("退出計(jì)算器\n");
break;
default:
printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
break;
}
} while (input);
}總結(jié)
到此這篇關(guān)于C語言計(jì)算器的3種實(shí)現(xiàn)方法代碼的文章就介紹到這了,更多相關(guān)C語言計(jì)算器實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)的一個(gè)三子棋游戲詳解流程
三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對(duì)角線連起來,相對(duì)兩邊依次擺上三個(gè)雙方棋子,只要將自己的三個(gè)棋子走成一條線,對(duì)方就算輸了2021-10-10
Linux系統(tǒng)中C語言編程創(chuàng)建函數(shù)fork()執(zhí)行解析
最近在看進(jìn)程間的通信,看到了fork()函數(shù),雖然以前用過,這次經(jīng)過思考加深了理解。現(xiàn)總結(jié)如下2013-04-04
學(xué)習(xí)二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算的方法
這片文章介紹了如何利用二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算,需要的朋友可以參考下2015-07-07

