欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

【C語(yǔ)言進(jìn)階】函數(shù)指針、回調(diào)函數(shù)——實(shí)現(xiàn)計(jì)算器-創(chuàng)新互聯(lián)

目錄

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比武山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式武山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋武山地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

寫再前面

正文

一、計(jì)算器的實(shí)現(xiàn)

二、封裝冗余代碼

三、使用函數(shù)指針

四、回調(diào)函數(shù)的再舉例

寫在最后


寫再前面

行文思路:

  1. 先用最簡(jiǎn)單的do-while語(yǔ)句和switch語(yǔ)句來(lái)實(shí)現(xiàn)計(jì)算器的最基本的功能
  2. 再用使用回調(diào)函數(shù)封裝冗余的語(yǔ)句
  3. 最后使用函數(shù)指針改造程序

正文 一、計(jì)算器的實(shí)現(xiàn)

我們就是實(shí)現(xiàn)加、減、乘、除、異或,這幾項(xiàng)基本的功能

#includevoid menu()
{
   printf("******************\n");
   printf("**0.exit  1.add***\n"); 
   printf("** 2.sub  3.mul**\n");
   printf("** 4.div  5.Xor**\n");
   printf("******************\n");
}
//計(jì)算器功能的封裝函數(shù)
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 Xor(int x,int y)
{
	return x^y;
}
 
int main()
{
   int x=0,y=0,input;
   do
   {
       menu();
       printf("請(qǐng)選擇:>");
       scanf("%d",&input);
       
       switch(input)
       {
            case 1:  printf("請(qǐng)輸入兩個(gè)操作數(shù):");
			            scanf("%d%d",&x,&y);
                        printf("結(jié)果為:%d\n",add(x,y));
                        break;
            case 2:  printf("請(qǐng)輸入兩個(gè)操作數(shù):");
			            scanf("%d%d",&x,&y);
                        printf("結(jié)果為:%d\n",sub(x,y));
                        break;
            case 3:  printf("請(qǐng)輸入兩個(gè)操作數(shù):");
			            scanf("%d%d",&x,&y);
                        printf("結(jié)果為:%d\n",mul(x,y));
                        break;
            case 4:  printf("請(qǐng)輸入兩個(gè)操作數(shù):");
			            scanf("%d%d",&x,&y);
                        printf("結(jié)果為:%d\n",div(x,y));
                        break;
            case 5:  printf("請(qǐng)輸入兩個(gè)操作數(shù):");
			            scanf("%d%d,&x,&y");
                        printf("結(jié)果為:%d\n",Xor(x,y));
                        break;
            case 0:  printf("退出");
                        break;
            default: printf("選擇錯(cuò)誤,請(qǐng)重新輸入");
                         break; 
       }
   }while(input);
   return 0;
}

二、封裝冗余代碼

你會(huì)發(fā)現(xiàn)五個(gè)實(shí)現(xiàn)計(jì)算功能的函數(shù)除了調(diào)用函數(shù)不一樣外,其他的均相同,這就造成了代碼的冗余,我們把這些重復(fù)的代碼封裝成一個(gè)函數(shù),就能大大減少代碼量

回調(diào)函數(shù):就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)。回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的以一方調(diào)用

#includevoid menu()
{
   printf("\n******************\n");
   printf("**0.exit  1.add***\n"); 
   printf("** 2.sub  3.mul**\n");
   printf("** 4.div  5.Xor**\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 Xor(int x,int y)
{
	return x^y;
 } 
void fun(int (*pf)(int,int))
{
	int x=0,y=0;
	printf("請(qǐng)輸入兩個(gè)操作數(shù)>");
	scanf("%d%d",&x,&y);
	printf("結(jié)果是:%d",pf(x,y));//實(shí)現(xiàn)回調(diào)
}
int main()
{
   int x=0,y=0,input;
   do
   {
       menu();
       printf("請(qǐng)選擇:>");
       scanf("%d",&input);
       
       switch(input)
       {
            case 1: fun(add);
                    break;
            case 2: fun(sub);
                    break;
            case 3: fun(mul);
			        break;
            case 4: fun(div);
                    break;
            case 5: fun(Xor);
                    break;
            case 0: printf("退出");
                    break;
            default: printf("選擇錯(cuò)誤,請(qǐng)重新輸入");
                         break; 
       }
   }while(input);
   return 0;
}

三、使用函數(shù)指針

我們干脆不使用switch語(yǔ)句,采用函數(shù)指針來(lái)實(shí)現(xiàn)同樣的效果,也算是一題多解吧

#includevoid menu()
{
   printf("\n******************\n");
   printf("**0.exit  1.add***\n"); 
   printf("** 2.sub  3.mul**\n");
   printf("** 4.div  5.Xor**\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 Xor(int x,int y)
{
	return x^y;
 } 
//下面是改造部分
int main()
{
   int x=0,y=0,input;
   int (*pfArr[6])( int,int )={0,add,sub,mul,div,Xor}; 
   do
   {
       menu();
       printf("請(qǐng)選擇:>");
       scanf("%d",&input);
       if(input>=1&&input<=6)
       {
       	   printf("請(qǐng)輸入兩個(gè)操作數(shù)>");
       	   scanf("%d%d",&x,&y);
           int ret=pfArr[input](x,y);//一定要傳兩個(gè)參數(shù)
           printf("%d",ret);
	   }
	   else if(input==0)
	   {
	   	   printf("退出\n");
	   	   break;
	   }
	   else
	       printf("輸入錯(cuò)誤,請(qǐng)重新輸入"); 
   }while(input);
   return 0;
}

四、回調(diào)函數(shù)的再舉例

回調(diào)函數(shù):就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的以一方調(diào)用

在這段程序中,print函數(shù)就稱為回調(diào)函數(shù),當(dāng)然,這不是回調(diào)函數(shù)的應(yīng)用場(chǎng)景,只是拿一段簡(jiǎn)單的代碼來(lái)說(shuō)明問(wèn)題

void print(char *str)
{
	printf("Hello,World!+%s",str); 
}
void fun(void (*p)(char*))
{
	printf("fun\n");
	p("666");
}
int main()
{
	fun(print);
	return 0;
 } 

//輸出結(jié)果為:
//fun
//Hello,World!+666

寫在最后

👍🏻點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力!

?收藏,你的青睞是我努力的方向!

??評(píng)論,你的意見(jiàn)是我進(jìn)步的財(cái)富!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章題目:【C語(yǔ)言進(jìn)階】函數(shù)指針、回調(diào)函數(shù)——實(shí)現(xiàn)計(jì)算器-創(chuàng)新互聯(lián)
本文路徑:http://aaarwkj.com/article36/cocipg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作、虛擬主機(jī)網(wǎng)站維護(hù)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
日本国产一区二区三区在线观看| 亚洲最大午夜福利视频| 日韩 在线一区二区| 日本精品三级一区二区视频| 中文字幕乱码熟女人妻视频| 日韩一级毛一片欧美一级| 日本免费观看一区久久| 日本在线一区二区三区| 亚洲av综合色区一区| 亚洲男人av天堂东京热| 欧美亚洲国产日韩熟女| av天堂资源在线播放| 久久热久久热在线视频| 国产精品九九久久精品三级| 日韩亚洲天堂视频免费观看| 久久国产精品亚洲看片| 欧美日韩一区二区高清在线| 亚洲av成人精品网站推荐| 欧美亚洲国产青草久久| 国产网红女主播视频一区二区| 亚洲免费黄色大片网站| 国产麻豆91精品女同性恋| 国产精品麻豆色哟哟av| 美女被强到爽高潮不断在线| 日韩av在线免费在线观看| 日本人妻中文字幕一区| 在线观看视频免费午夜| 欧美高清精品在线视频| 中文字幕在线日韩av| 久久久av在线免费观看| 亚洲一区二区日韩在线| 亚洲欧美日韩乱码综合久久| 日韩中文字幕在线首页| 蜜桃视频中文字幕二区三区| 亚洲欧洲中文字幕一区二区| 亚洲天堂成人av蜜臀| 黄色av福利在线网站| 免费人成在线观看网站免费观看| 欧美日韩国产激情另类| 中文字幕日韩精品久久| 国内一级片内射免费视频观看|