指針習題二

使用函數指針實現轉移表

#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input = 1;int ret = 0;int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //轉移表do{printf("*************************\n");printf("  1:add           2:sub  \n");printf("  3:mul           4:div  \n");printf("  0:exit                 \n");printf("*************************\n");printf("請選擇:");scanf("%d", &input);if ((input <= 4 && input >= 1)){printf("輸入操作數:");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);printf("ret = %d\n", ret);}else if (input == 0){printf("退出計算器\n");}else{printf("輸入有誤\n");}} while (input);return 0;
}

2.

解析:A選項,第一個括號里是一個完整定義,第二個括號里是個類型,四不像。BD選項,[]只能在標識符右邊,雙雙排除。只有C是能編過的。

3.

解析:

“調用指針”、“指向函數”是什么鬼……D選項簡直邏輯鬼才!ABC就是基礎概念,可以復習下。

回調函數是一種在編程中常見的概念,它是指將一個函數作為參數傳遞給另一個函數,并在特定的條件或事件發生時被調用執行的函數。

具體來說,回調函數是作為參數傳遞給其他函數的函數指針或函數對象。當滿足特定條件或事件發生時,調用該函數指針或函數對象,以執行預定義的操作或邏輯。

4.

找出一個只出現過一次的數字的問題處理方法就是找一個數字把里面所有的數字都異或一遍,利用異或兩次等于沒異或的特點來處理。那么如果有兩個數字都只出現了一次,那么如此得到的應該是兩個數異或的結果。首先這個結果肯定不是0(要不然就全都配對了),所以里面一定至少一位是一。找出值為1的一位,以這一位的值將結果分為兩組。例如1 2 3 4 1 2,異或完的結果應該是3^4得到的111,那么隨便找一位就行了。例如找最低位,那么這一位是1的有1 3 1,是0的有2 4 2,由于是利用異或結果為1的某一位分的組,所以兩個待查詢數字一定分別在兩組中。所以再找兩個變量,分別異或兩組數,即可找到這兩個數。

void findTwoNum(int arr[], int n, int * pnum1, int * pnum2)
{int i;int sum = 0;
?for (i = 0; i < 9; i++){sum ^= arr[i];} //先找到兩個數互相異或的結果
?int pos;for (i = 0; i < 32; i++){if (sum & 1 << i){pos = i;break;}} //再找到有分歧的一位。在這一位上,兩個數一定是一個1一個0
?*pnum1 = *pnum2 = 0;for (i = 0; i < 10; i++){if (arr[i] & 1 << pos){*pnum1 ^= arr[i]; //這一位是1的,放在數1里}else{*pnum2 ^= arr[i]; //這一位是0的,放在數2里}}
}

5.

#include <stdio.h>
int main()
{int y = 0;int m = 0;int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; while(scanf("%d%d", &y, &m) != EOF){int day = days[m-1];if((y%4==0 && y%100!=0) || (y%400==0)){if(m == 2)day += 1;}printf("%d\n", day);}return 0;
}

6.

int Int_sort(const void* p1, const void* p2)
{return *(int*)(p1) - *(int*)(p2);
}print_int(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}void int_test()
{int arr[] = { 1,5,8,23,56,44,32,7,6,66 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), Int_sort);print_int(arr, sz);
}struct  Stu
{char name[100];int age;
};int Char_sort(const void* p1,const void* p2)
{return (strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name));
}void print_Stu(struct Stu arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%s ", arr[i].name);printf("%d ", arr[i].age);}printf("\n");
}void stu_test()
{struct Stu arr[3] = { {"zhangsan",13},{"lisi",40},{"wangwu",22} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), Char_sort);print_Stu(arr, sz);
}int main()
{int_test();stu_test();return 0;
}

7.

#include<stdio.h>//仿qsort函數重寫冒泡排序
int cmp(void* e1, void* e2)   //所選擇的比較方法
{return *((int*)e1) - *((int*)e2);
}
void swap(char* p1, char* p2, int width)   //實現數組元素的交換
{int t = 0;int i = 0;for (i = 0; i < width; i++){t = *p1;*p1 = *p2;*p2 = t;p1++;p2++;}
}
void bubble_sort(void* arr, int sz, int width, int(*cmp)(void* e1, void* e2))
{int i = 0;int j = 0;for (i = 0; i < sz - 1; i++){//冒泡排序趟數for (j = 0; j < sz - 1 - i; j++)   //每一趟冒泡排序{if (cmp((char*)arr + (j * width), (char*)arr + (j + 1) * width)>0){//符合條件進行交換swap((char*)arr + (j * width), (char*)arr + (j + 1) * width,width);}}}
}
int main()
{int arr[] = { 10,9,8,7,6,5,4,3,2,1 };     //定義整型數組并初始化int sz = sizeof(arr) / sizeof(arr[0]);    //計算數組長度int i = 0;bubble_sort(arr, sz, sizeof(arr[0]), cmp);    //模擬qsort函數實現冒泡排序for (i = 0; i < sz; i++)                   {printf("%d ", arr[i]);                     //排序完后對數組進行打印,驗證排序是否成功}
}

8.

解析:C,strlen計算\0之前的字符長度

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

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

相關文章

學習python時一些筆記

1、winr 命令提示符的快捷鍵 輸入cmd進入終端 2、在終端運行桌面上的python文件 cd desktop(桌面) cd是進入該文件夾的意思。 cd .. 回到上一級 運行python時一定要找到文件的所在地 輸入python進入&#xff0c;exit()退出%s字符串占位符%d數字占位符%f浮點數占位符input輸…

Linux速覽(1)——基礎指令篇

在上一章對Linux有了一些基礎了解之后&#xff0c;本章我們來學習一下Linux系統下一些基本操作的常用的基礎指令。 目錄 1. ls 指令 2. pwd&&whoami命令 3. cd 指令 4. touch指令 5.mkdir指令&#xff08;重要&#xff09;&#xff1a; 6.rmdir指令 && …

vue面試題:如何保存頁面的當前的狀態?

如何保存頁面的當前的狀態&#xff1f; 既然是要保持頁面的狀態&#xff08;其實也就是組件的狀態&#xff09;&#xff0c;那么會出現以下兩種情況&#xff1a;組件會被卸載&#xff1a;&#xff08;1&#xff09;將狀態存儲在LocalStorage / SessionStorage優點&#xff1a;缺…

帶大家做一個,易上手的水煮牛肉

今天帶大家做川菜系中的 水煮牛肉 這個菜是比較費辣椒的 制作成本相對一般菜來說 會高一些 一塊牛肉 泡水劃冰 從超時買的干腐竹 切成小片 溫水浸泡五分鐘 泡軟它 然后撈出來 去干水分 牛肉切片 盡量切薄一點 三瓣左右蒜 一塊生姜 去皮切末 牛肉中下入 一個雞蛋 小半勺…

python實現視頻或音頻轉文本

python實現視頻或音頻轉文本 當然可以,以下是您的Python語音視頻轉文本代碼的描述: 內容概要: 這段Python代碼利用強大的語音識別庫,能夠自動將本地存儲的語音視頻文件轉換成文本。它通過分析音頻軌道中的語音數據,識別并轉錄為可編輯和可搜索的文本格式。 適用人群: …

裝修必看干貨|入戶玄關設計進門就是客廳應該怎么設計?福州中宅裝飾,福州裝修

入戶玄關設計在進門就是客廳的情況下&#xff0c;想要擁有單獨的玄關空間&#xff0c;以下是五點設計建議&#xff1a; ①隔斷屏風 使用隔斷屏風是傳統而常見的一種空間分割方法。可以選用木制、金屬或玻璃等材質的屏風&#xff0c;根據需要進行靈活搭配和定制。 屏風的款式和…

Python爬蟲——Urllib庫-1

這幾天都在為了藍橋杯做準備&#xff0c;一直在刷算法題&#xff0c;確實刷算法題的過程是及其的枯燥且枯燥的。于是我還是決定給自己找點成就感出來&#xff0c;那么Python的爬蟲就這樣開始學習了。 注&#xff1a;文章源于觀看尚硅谷爬蟲視頻后筆記 目錄 Urllib庫 基本使…

【C++】字符串 1478 - 出現次數最多的小寫字母 1475 - 字符串對比 1098 - 判斷是否構成回文 1102 - 字符串中的空格移位

文章目錄 問題一&#xff1a;1478 - 出現次數最多的小寫字母問題二&#xff1a;1475 - 字符串對比問題三&#xff1a;1098 - 判斷是否構成回文問題四&#xff1a;1102 - 字符串中的空格移位五、感謝 問題一&#xff1a;1478 - 出現次數最多的小寫字母 類型&#xff1a;字符串 …

oracle基礎體系

一、 Oracle數據庫服務器 數據庫在各個行業都會有使用到&#xff1b;其實&#xff0c;我們平時無論是在與客戶溝通或者交流中&#xff0c;所說的Oracle數據庫是指Oracle數據庫服務器&#xff08;Oracle Server&#xff09;&#xff0c;它由Oracle實例&#xff08;Oracle Instan…

什么是杠桿?WeTrade眾匯這樣舉例,大家都明白

杠桿是投資交易者一定要知道的一個金融術語。那么什么是杠桿呢?下面WeTrade眾匯就用蘋果進行舉例&#xff0c;大家就都會明白&#xff0c;原來如此簡單。 發揮我們投資者的想象&#xff0c;我們現在要進行一場蘋果的買賣&#xff0c;能夠賺錢的本質就是高買低賣&#xff0c;所…

二十篇esp3454

jfjjfj from machine import I2C,Pin from ssd1306 import SSD1306_I2C i2c I2C(sdaPin(“Y8”), sclPin(“Y6”)) oled SSD1306_I2C(128, 64, i2c, addr0x3c) oled.text(“Hello World!”, 0, 0) oled.text(“MicroPython”, 0, 20) oled.text(“By 01Studio”, 0, 50) oled…

【在巴厘島學點印尼語】日常篇

BINTANG BIR 檳棠啤酒 今天不寫代碼&#xff0c;在巴厘島休養&#xff0c;順便聊點印尼語。 印尼語&#xff0c;Bahasa Indonesia&#xff0c;是印度尼西亞的官方語言&#xff0c;也即印尼化的馬來語廖內方言&#xff0c;其變種包括 爪哇語&#xff08;島民方言&#xff09; 等…

如何選擇適合電商的WordPress主題模板?

選擇適合電商的WordPress主題模板時&#xff0c;首先應考慮主題模板是否與WooCommerce兼容。WooCommerce是WordPress中一個強大的電商插件&#xff0c;能夠幫助用戶實現在線電子商務銷售或產品展示。因此&#xff0c;選擇一個與WooCommerce高度兼容的主題模板至關重要。 其次&…

5.測試教程 - 進階篇

文章目錄 1.按測試對像劃分1.1**界面測試**1.2**可靠性測試**1.3**容錯性測試**1.4**文檔測試**1.5**兼容性測試**1.6**易用性測試**1.7**安裝卸載測試**1.8**安全測試**1.9**性能測試**1.10**內存泄漏測試** 2.按是否查看代碼劃分2.1黑盒測試(Black-box Testing)2.2白盒測試(W…

部署kubernetes-dashboard改成http免密登錄

原始鏈接地址 https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 修改Service端口 增加80端口&#xff0c;改成http訪問 修改前: spec:ports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard修改后&#xff…

snakemake: 基本語法知識點

Snakemake 使用一種基于 Python 的語法來定義工作流&#xff0c;允許用戶編寫規則&#xff08;rules&#xff09;來指定數據分析流程中的各個步驟。以下是一些基礎語法知識點&#xff0c;幫助你理解和使用 Snakemake。 1. 規則&#xff08;Rules&#xff09; 規則是 Snakemak…

【ROS源碼閱讀】

項目需要研讀ROS源碼&#xff0c;這其中碰到的一些問題記錄一下&#xff1a; 源碼編譯過程 (1) 在ubuntu 18.04 上安裝ROS melodic的版本。 (2) 下載源碼&#xff0c; ROS源碼鏈接&#xff1a; https://github.com/ros/ros_comm/tree/melodic-devel/ros_comm(3) 編譯 例如想…

圖像增強預處理對于深度學習訓練的提高有幫助嗎?

答案&#xff1a;圖像增強預處理對于深度學習訓練非常有幫助&#xff0c;它可以顯著提高模型的性能和泛化能力。 圖像增強包括許多技術&#xff0c;可以通過各種方法改進圖像數據&#xff0c;使其更適合訓練深度學習模型。 可以增加數據集的多樣性&#xff0c;減少模型對特定圖…

書生浦語全鏈路開源體系

推薦閱讀論文 A Survey Of Large Language Models 書生浦語開源的模型 從模型到應用 書生浦語開源體系 書生萬卷開源數據集 除此之外還有OpenDataLab國內數據集下載網站。 預訓練框架InterLM-Train 微調框架XTuner 評測工具體系 國內外常見的大語言模型評測基準&#xff1a…

【JS 算法題: 將 json 轉換為字符串】

題目簡介 其實就是手撕 JSON.stringfy()。 算法實現 輸入 原則上來說&#xff0c;輸入的是一個 json 對象。但需要考慮到異常情況&#xff0c;即輸入了其它類型的數據&#xff0c;比如&#xff1a;12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 輸出 …