c語言枚舉代替雙switch,C語言 使用數組代替switch分支語句降低圈復雜度

#include typedef int(*CALCULATE_FUN)(int, int); //定義函數指針

typedef struct tagStruct

{

CALCULATE_FUN fun_name; //結構體成員,存放函數

char calc_flag; //結構體成員,存放符號

}CALC_STRUCT;

/* 加減乘除函數聲明 */

int fun_add(int x, int y);

int fun_sub(int x, int y);

int fun_mul(int x, int y);

int fun_div(int x, int y);

/* 初始化數組 */

CALC_STRUCT fun_array[4] = {{fun_add, '+'},

{fun_sub, '-'},

{fun_mul, '*'},

{fun_div, '/'}};

void method1(int data_a, int data_b, int flag)

{

int ret;

switch (flag)

{

case 1:

{

ret = fun_add(data_a, data_b); //傳入函數進行計算

flag = '+'; //獲取符號

break;

}

case 2:

{

ret = fun_sub(data_a, data_b);

flag = '-';

break;

}

case 3:

{

ret = fun_mul(data_a, data_b);

flag = '*';

break;

}

case 4:

{

ret = fun_div(data_a, data_b);

flag = '/';

break;

}

default:

{

/* 錯誤的情況 */

printf("Symbol input error.");

return;

}

}

/* 打印算式 */

printf("%d %c %d = %d\n",data_a, flag, data_b, ret);

return;

}

void method2(int data_a, int data_b, int flag)

{

int ret;

if ((flag < 1) || (flag > 4))

{

/* 錯誤的情況 */

printf("Symbol input error.");

return;

}

ret = (*fun_array[flag - 1].fun_name)(data_a, data_b); //計算獲取結果

flag = fun_array[flag - 1].calc_flag; //獲取符號

printf("%d %c %d = %d\n", data_a, flag, data_b, ret); //打印算式

}

void main(void)

{

int flag;

int a = 8;

int b = 4;

/* 總共有4中計算方法,輸入1 2 3 4 選擇 */

scanf("%d", &flag);

method1(a, b, flag); //實現方法一 高圈復雜度

method2(a, b, flag); //實現方法二 低圈復雜

}

/* 加函數 */

int fun_add(int x, int y)

{

return x + y;

}

/* 減函數 */

int fun_sub(int x, int y)

{

return x - y;

}

/* 乘函數 */

int fun_mul(int x, int y)

{

return x * y;

}

/* 除函數,不帶小數 */

int fun_div(int x, int y)

{

return x / y;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394756.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基礎DP(初級版)

本文主要內容為基礎DP&#xff0c;內容來源為《算法導論》&#xff0c;總結不易&#xff0c;轉載請注明出處。 后續會更新出kuanbin關于基礎DP的題目...... 動態規劃&#xff1a; 動態規劃用于子問題重疊的情況&#xff0c;即不同的子問題具有相同的公共子子問題&#xff0c;在…

《UNIXLinux程序設計教程》一2.1 UNIX 輸入輸出基本概念

2.1 UNIX 輸入輸出基本概念 在任何一種操作系統中&#xff0c;程序開始讀寫一個文件的內容之前&#xff0c;必須首先在程序與文件之間建立連接或通信通道&#xff0c;這一過程稱為打開文件。打開一個文件的目的可能是要讀其中的數據&#xff0c;也可能是要往其中寫入數據&…

python時間計算_日期天數差計算(Python)

描述 從json文件中讀取兩個時間數據&#xff08;數據格式例如&#xff1a;2019.01.01&#xff0c;數據類型是字符串&#xff09;&#xff0c;并計算結果&#xff0c;打印出兩個時間間隔了多少天。 輸入/輸出描述 輸入描述 json文件名稱datetime.json&#xff0c;格式如下&#…

c語言編常見算法,5個常見C語言算法

5個常見C語言算法十進制轉換為二進制的遞歸程序字符串逆置的遞歸程序整數數位反序&#xff0c;例如12345->54321四舍五入程序(考慮正負數)二分法查找的遞歸函數#include#include#include//十進制轉換為二進制的遞歸程序voidDecimalToBinary(int n){if(n<0){printf("…

利用Kinect將投影變得可直接用手操控

Finally 總算是到了這一天了&#xff01;假期里算法想不出來&#xff0c;或者被BUG折磨得死去活來的時候&#xff0c;總是YY著什么時候能心情愉快地坐在電腦前寫一篇項目總結&#xff0c;今天總算是抽出時間來總結一下這神奇的幾個月。 現在回過頭來看&#xff0c;上學期退出AC…

my-medium.cnf_您的手機如何打開medium.com-我將讓門衛和圖書管理員解釋。

my-medium.cnfby Andrea Zanin由Andrea Zanin 您的手機如何打開medium.com-我將讓門衛和圖書管理員解釋。 (How your phone opens medium.com — I’ll let a doorman and a librarian explain.) Hey did you notice what just happened? You clicked a link, and now here y…

springboot自動配置的原理_SpringBoot自動配置原理

SpringBoot的啟動入口就是一個非常簡單的run方法&#xff0c;這個run方法會加載一個應用所需要的所有資源和配置&#xff0c;最后啟動應用。通過查看run方法的源碼&#xff0c;我們發現&#xff0c;run方法首先啟動了一個監聽器&#xff0c;然后創建了一個應用上下文Configurab…

Django first lesson 環境搭建

pycharm ide集成開發環境 &#xff08;提高開發效率&#xff09; 解釋器/編譯器編輯器調試環境虛擬機連接 設置VirtualBox端口 操作1 操作2 點擊號添加&#xff0c;名稱為SSH&#xff0c;其中主機端口為物理機的端口&#xff0c;這里設置為1234&#xff0c;子系統端口為虛擬機的…

《Drupal實戰》——3.3 使用Views創建列表

3.3 使用Views創建列表 我們接著講解Views的設置&#xff0c;首先做一個簡單的實例。 3.3.1 添加內容類型“站內公告” 添加一個內容類型“站內公告”&#xff0c;屬性配置如表3-1所示。 為該內容類型設置Pathauto的模式news/[node:nid]&#xff0c;并且我們在這里將節點類型…

c語言函數編正切余切運算,淺談正切函數與余切函數的應用

九年義務教育三年制初級中學“數學”課本中&#xff0c;對正切函數和余切函數的定義是這樣下的&#xff1a;在&#xff32;&#xff54;&#xff21;&#xff22;&#xff23;中&#xff0c;∠&#xff23;&#xff1d;&#xff19;&#xff10;&#xff0c;&#xff41;&#…

wget命令下載文件

wget -r -N -l -k http://192.168.99.81:8000/solrhome/ 命令格式&#xff1a; wget [參數列表] [目標軟件、網頁的網址] -V,–version 顯示軟件版本號然后退出&#xff1b; -h,–help顯示軟件幫助信息&#xff1b; -e,–executeCOMMAND 執行一個 “.wgetrc”命令 -o,–output…

idea mybatis generator插件_SpringBoot+MyBatis+Druid整合demo

最近自己寫了一個SpringBootMybatis(generator)druid的demo1. mybatisgenerator逆向工程生成代碼1. pom文件pom文件添加如下內容&#xff0c;引入generator插件org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 mysql …

vr格式視頻價格_如何以100美元的價格打造自己的VR耳機

vr格式視頻價格by Maxime Coutte馬克西姆庫特(Maxime Coutte) 如何以100美元的價格打造自己的VR耳機 (How you can build your own VR headset for $100) My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel…

python_裝飾器

# 裝飾器形成的過程 : 最簡單的裝飾器 有返回值得 有一個參數 萬能參數# 裝飾器的作用# 原則 &#xff1a;開放封閉原則# 語法糖&#xff1a;裝飾函數名# 裝飾器的固定模式 import time # time.time() # 獲取當前時間 # time.sleep() # 等待 # 裝飾帶參數的裝飾器 def timer…

歐洲的數據中心與美國的數據中心如何區分?

人會想到這意味著&#xff0c;在歐洲和北美的數據中心的設計基本上不會有大的差異。不過&#xff0c;一些小的差異是確實存在的。您可能想知道為什么你需要了解歐洲和北美的數據中心之間的差異&#xff0c;這對你的公司有幫助嗎?一個設計團隊往往能從另一個設計團隊那里學到東…

老農過河

java老農過河問題解決 http://www.52pojie.cn/thread-550328-1-1.html http://bbs.itheima.com/thread-141470-1-1.html http://touch-2011.iteye.com/blog/1104628 轉載于:https://www.cnblogs.com/wangjunwei/p/6032602.html

python isalnum函數_探究Python中isalnum()方法的使用

探究Python中isalnum()方法的使用 isalnum()方法檢查判斷字符串是否包含字母數字字符。 語法 以下是isalnum()方法的語法&#xff1a; str.isa1num() 參數 NA 返回值 如果字符串中的所有字符字母數字和至少有一個字符此方法返回 true&#xff0c;否則返回false。 例子 下面的例…

docker快速入門_Docker標簽快速入門

docker快速入門by Shubheksha通過Shubheksha Docker標簽快速入門 (A quick introduction to Docker tags) If you’ve worked with Docker even for a little while, I bet you’ve come across tags. They often look like “my_image_name:1” where the part after the col…

動態規劃算法——最長上升子序列

今天我們要講的是最長上升子序列&#xff08;LIS&#xff09;。【題目描述】給定N個數&#xff0c;求這N個數的最長上升子序列的長度。【樣例輸入】      【樣例輸出】7        42 5 3 4 1 7 6那么什么是最長上升子序列呢&#xff1f; 就是給你一個序列…

如何快速掌握一門新技術/語言/框架

IT行業中的企業特點是都屬于知識密集型企業。這種企業的核心競爭力與員工的知識和技能密切相關。而如果你在企業中扮演的是工程師的角色的話&#xff0c;那么 你的核心競爭力就是IT相關的知識與技能的儲備情況。而眾所周知&#xff0c;IT行業是一個大量產生新知識的地方&#x…