C語(yǔ)言計(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è)指針被?來(lái)調(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語(yǔ)言計(jì)算器的3種實(shí)現(xiàn)方法代碼的文章就介紹到這了,更多相關(guān)C語(yǔ)言計(jì)算器實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言實(shí)現(xiàn)計(jì)算器的兩種方法
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器程序
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能(1)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之簡(jiǎn)易計(jì)算器
- 用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能
- 用C語(yǔ)言實(shí)現(xiàn)計(jì)算器功能
相關(guān)文章
C++有限狀態(tài)機(jī)實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了C++有限狀態(tài)機(jī)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Java?C++?算法題解拓展leetcode670最大交換示例
這篇文章主要介紹了Java?C++算法題解拓展leetcode670最大交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
詳解C++中的vector容器及用迭代器訪問vector的方法
使用迭代器iterator可以更方便地解引用和訪問成員,當(dāng)然也包括vector中的元素,本文就來(lái)詳解C++中的vector容器及用迭代器訪問vector的方法,需要的朋友可以參考下2016-05-05
C++深入講解對(duì)象的銷毀之析構(gòu)函數(shù)
構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)被系統(tǒng)自動(dòng)調(diào)用,而析構(gòu)函數(shù)(Destructor)在對(duì)象被撤銷時(shí)被自動(dòng)調(diào)用,相比構(gòu)造函數(shù),析構(gòu)函數(shù)要簡(jiǎn)單的多2022-04-04
C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)
為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語(yǔ)言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)2022-06-06
使用Objective-C獲取IPHONE手機(jī)IMSI序列號(hào)
這篇文章主要介紹了使用Objective-C獲取IPHONE手機(jī)IMSI序列號(hào)的方法以及通過IMSI序列號(hào)獲取運(yùn)營(yíng)商、手機(jī)號(hào)的方法,非常的實(shí)用,有需要的小伙伴可以參考下。2015-04-04

