C語言精華題目錦集1

第一題

test.c文件中包括如下語句,文件中定義的四個變量中,是指針類型的是()【多選】

#define INT_PTR int*
typedef int* intptr; 
INT_PRT a,b; 
int_ptr c,d;

A:a ?B:b ?C:c ?D:d


#define是宏定義,此時在程序中INT_PTR都會被替換為int*,變量a,b的定義如下:

int * a,b;

可以發現a確實為整型指針類型,而b則為整型類型。
而typedef是給該類型定義一個別名,使用該別名創建出的變量都是這個類型的。

第二題

對于以下說法,正確的是()
?A:對于struct X {short s;int i; charc},sizeof(X)sizeof(s)+sizeof(i)+sizeof(c )
?B:對于某個double變量a,可以使用a==0.0來判斷其是否為0。
?C:初始化方式char a[14]=“helloworld”;和char a[14];a=“hello world”;的效果相同。
?D:以上說法都不對


解析:
A:結構體大小的計算要考慮內存對齊問題。
B:這道題如果在VS上實驗一下的話,會覺得B選項就是正確的,然而不然,因為該數據是double類型的數據,浮點數存在誤差,不能直接判斷兩個數是否相等,通常是采用比較兩數之差是否小于一個很小的數字,(具體可以自己設定一個這樣的數,作為誤差)來確定是否相等
例如:
在這里插入圖片描述
運行結果是不是超脫預料之外?
調試觀察sub1和sub2的數值。
在這里插入圖片描述
可以發現誤差是存在的,所以不能直接用一個浮點數是否等于0.0來判斷該數是否為0。
C:a為數組首元素地址,是一個常量不可以改變。

第三題

請問下列表達式,哪些會被編譯器禁止()【多選】

int a=248,b=4;
int const*c=21;
const int*d=&a;
int *const e=&b;
int const* const f=&a;

?A:*c = 32;
?B:*d = 43;
?C:e = &a;
?D:f = 0x321f;


解析:
這道題是有關const修飾指針變量的題目,要記住只有兩種情況,const在*前邊的位置和const在*后邊。如果const在*前邊,就修飾的是指針變量指向的結果。
例如

int a=1;
const int *pa=&a;
int const *pa=&a;

只要const在pa的左邊,那么const修飾的就是*pa,就不可以利用解引用得到a來修改a的值,此時a的值被固定了。
還有一種情況是const在*的右邊

int a=0;
int b=0;
int * const pa=&a;

這種情況下const修飾的是a這個變量的地址,即pa的指向不能發生變化。此時如果要更改pa的指向如pa=&b,這樣的操作是不被允許的。
如果覺得不好記憶的話,可以參考趣味講解const修飾指針變量。

第四題

對于下邊代碼段,描述正確的是()

t=0;
while(printf("*"))
{t++;if(t<3)break;
}

?A:其中循環控制表達式與0等價。
?B:其中循環控制表達式與‘0’等價。
?C:其中循環控制表達式是不合法的。
?D:以上說法都不對。


解析:
這道題目選B,因為printf函數返回打印的字符·個數,所以判斷條件恒為1,字符零不是零。
在這里插入圖片描述
所以在這里B選項就是正確的。其他選項都是錯誤的。

編程題

1,至少是其他數字兩倍的最大數
題目要求如下
在這里插入圖片描述
第一種思路
遍歷兩邊,第一遍找出最大值,第二遍判斷是否找出的最大值是數組每個元素的二倍,如果滿足條件就返回最大數字的下標,如果不滿足,那就返回-1。
代碼如下:

int dominantIndex(int* nums, int numsSize){int i=0;int max=0;for(i=0;i<numsSize;i++){if (nums[i] > max){max = nums[i];}}int num=0;int flag=0;for(i=0;i<numsSize;i++){if(nums[i]==max){num=i;}else{if(nums[i]*2>max){flag=1;}}}if(flag==0){return num;}else{return -1;}return 0;
}

代碼表達很清晰。
還有一種方法,在找到最大值時,也要保存倒數第二大的值。
代碼如下:

int dominantIndex(int* nums, int numsSize){int i=0;int max=nums[0];int max1=0;int flag=0;for(i=0;i<numsSize;i++){if(nums[i]>max){flag=i;max1=max;max=nums[i];            }if (max1 < nums[i]&&max!=nums[i]){max1 = nums[i];}}if(max>=2*max1){return flag;}else{return -1;}return 0;
}

找到最大值的同時,保存第二大值,因為后邊可能會出現比已經保存的第二大的值還要大的值,所以要繼續向后遍歷找到真正第二大的值,。最后進行判斷即可。

第二題

自除數
在這里插入圖片描述
只需要創建一個數組,得到right和left之間的所有滿足條件的數即可,每一個數求出他的個位數,十位數,等等。

在這里插入圖片描述
數據范圍最大也只有10000。
像這種需要用的數字的每一位的數據進行判斷的題目,最好還是創建一個大小為6的數組,裝輸入的數據的每個位的數字,方便最后進行判斷。在解題的過程中要注意返回的數組必須是malloc申請的,不然就會有很多的報錯。
代碼如下(注釋十分清晰)

int* selfDividingNumbers(int left,int right,int *returnsize) 
{int*ccc=(int*)malloc(sizeof(int)*(right-left+1));int kkk[6];int l = 0;for (int i = left; i <= right; i++){       int j = 0;int a = 1;int num = i;while (i > 0)//獲取每位數字{kkk[j++] = i % 10;i = i / 10;}i = num;for (int k = 0; k < j; k++){if (kkk[k] != 0)//如果數字中包含零,就不滿足{if (i % kkk[k] != 0){a = 0;}else{a = 1;}}else{a=0;}}if (a != 0)//如果該數字通過前邊的測試{ccc[l++] = i;//將該數字存放在預留數組中。}}*returnsize = l;return ccc;
}

第三題

喝汽水問題
小明喝汽水,一瓶汽水1元,2個空瓶可以換一瓶汽水,小明現在有n元,求小明可以喝到多少瓶汽水?

思路一
將上述問題以代碼形式解決,如果有n元,那么剛開始就有n個空瓶,假設全部喝完,然后拿著所有空瓶過去換汽水,就能換到n/2瓶汽水,喝完后于是又獲得了n/2的瓶子,然后再去換,直到瓶子數目為0或者為1不足以再換汽水為止。
代碼實現如下

int main()
{int money = 0;//錢數int total = 0;//總共喝的汽水的數量int empty = 0;//空瓶的數量scanf("%d", &money);total = money;empty = money;while(empty>1)//只要空瓶數大于2,就能繼續換{total += empty/2;empty = empty/2+empty%2;}printf("total = %d\n", total);//最終結果totalreturn 0;
}

思路二
利用數學思維求解,我們可以利用上述代碼多運行幾次觀察規律,會發現隨著money的增長,能喝到的汽水的數量是一個等差數列。
1元—>1瓶汽水
2元—>3瓶汽水
3元—>5瓶汽水
。。。。
所以只要Money的數量不為0,只需要返回money*2-1即可。
代碼如下

int main()
{int money = 0;int total = 0;int empty = 0;scanf("%d", &money);	//方法2if(money <= 0){total = 0;}else{total = money*2-1;}printf("total = %d\n", total);return 0;
}

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

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

相關文章

SQLite3 數據庫學習(六):Qt 嵌入式 Web 服務器詳解

參考引用 SQLite 權威指南&#xff08;第二版&#xff09;SQLite3 入門 1. Apache 搭建 cgi 環境 1.1 什么是 Apache Apache 是世界使用排名第一的 Web 服務器軟件 它可以運行在幾乎所有廣泛使用的計算機平臺上&#xff0c;由于其跨平臺和安全性被廣泛使用 1.2 具體搭建流程…

一、用戶管理

一、后端數據庫初始化 1.1 因為版本問題&#xff0c;始終報錯&#xff0c;按照報錯信息去查詢解決方案&#xff0c;無法解決 靈機一動&#xff1a; 網址&#xff1a; Spring Boot 3.0 升級 實戰踩坑記錄 - 掘金 (juejin.cn) &#xff11;.&#xff12; 個人配置【運行成功…

c++的三目運算符

C三目運算符增強 C中的三目運算符表達式返回的可以是一個變量&#xff0c;但是C語言中返回的是一個常量。 C語言中&#xff1a; void test05() { int a 10; int b 20; printf("%d\n", a < b ? a : b); //在C語言中三目運算符返回的是表達式的值&am…

Javascript每天一道算法題(十三)——最大子數組和_中等

文章目錄 動態規劃題三個重要步驟&#xff08;了解思路&#xff09;1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——動態規劃 總結 動態規劃題三個重要步驟&#xff08;了解思路&#xff09; &#xff08;1&#xff09;定義數組元素的含義 用一個數組來保存歷史數…

2020年06月 Scratch(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 執行以下腳本后舞臺上的角色將 ? A:先克隆自身,克隆體出現后被刪除。 B:先克隆自身,克隆體出現后刪除本體。 C:克隆出自身后本體與克隆體同時被刪除。 D:克隆出自身后本體與克…

docker常用命令, 鏡像版本的導入、導出并加載,打包鏡像的命令

文章目錄 docker常用命令&#xff1a;打鏡像包&#xff1a;鏡像版本的導入、導出并加載 docker常用命令&#xff1a; 打鏡像包&#xff1a; ? docker build -t calc:20230630 /home/apps/calc/docker/ 刪除某個鏡像的版本&#xff0c;allen_mysql的5.7版本 docker rmi all…

Redis深入理解-內核請求處理流程、數據傳輸協議

Redis 內核級請求處理流程 Redis Server 其實就是 Linux 服務器中的一個進程 主要還是下圖的流程 應用先和 server 端建立 TCP 連接建立連接之后&#xff0c;server 端就會有一個與該客戶端通信的 socket&#xff0c;客戶端的讀寫請求發送到服務端的 socket那么通過 IO 多路…

分組背包問題學習筆記 AcWing 9. 分組背包問題

原題 有 N&#xfffd; 組物品和一個容量是 V&#xfffd; 的背包。 每組物品有若干個&#xff0c;同一組內的物品最多只能選一個。 每件物品的體積是 vij&#xfffd;&#xfffd;&#xfffd;&#xff0c;價值是 wij&#xfffd;&#xfffd;&#xfffd;&#xff0c;其中 …

PC8233(CC/CV控制)高耐壓輸入5V/3.4A同步降壓電路內建補償帶恒流恒壓輸出

概述 PC8233&#xff08;替代CX8853&#xff09;是一款同步降壓調節器,輸出電流高達3.4A,操作范圍從8V到32V的寬電源電壓。內部補償要求最低數量現成的標準外部組件。PC8233在CC&#xff08;恒定輸出電流&#xff09;模式或CV&#xff08;恒定輸出電壓&#xff09;模式&#x…

【前端】前端監控?埋點

文章目錄 前端監控分為三個方面前端監控流程異常監控常見的錯誤捕獲方法主要是 try / catch 、window.onerror 和window.addEventListener 等。Promise 錯誤Vue 錯誤React 錯誤 性能監控用戶行為監控常見的埋點方案來源 前端監控分為三個方面 異常監控&#xff08;監控前端頁面…

基于element-ui后臺模板,日常嘮嗑

后面會補充github地址 文章目錄 目錄 文章目錄 案例說明 1.引入庫 2.創建布局組件 3.創建布局組件 4.菜單效果展示 5.創建頂部組件 5.創建頂部面包屑組件 6.創建內容區域組件 7.效果總覽 7.布丁&#xff08;實現一些小細節&#xff09; 前言一、pandas是什么&#xff1f;二、使…

CentOS7中升級OpenSSL詳細教程

文章目錄 一. 引言二. 升級前的準備1.備份現有配置2. 檢查系統版本3. 安裝依賴 三. OpenSSL安裝四. 驗證 一. 引言 OpenSSL: 是用于保護數據安全的重要工具。它能提供加密&#xff0c;解密等多項功能。 然而&#xff0c;隨著技術的發展和新的安全漏洞的出現&#xff0c;使用最…

管理類聯考——英語二——備考 100 句涵蓋所有詞匯

全中 在海里的這個地區&#xff0c;熊貓們喜歡就著蘇打碗豆喝茶。而大洋州的民兵則喜歡經過半島&#xff0c;帶著編劇本的公式上餐廳去。附件的電影院里有額外的歌劇和香蕉&#xff0c;這一時代的斑馬們被外面的天線所吸引。實驗室里的蟹想用它的肋骨去戳四肢象燈炮的小羊。但…

千夢網創:創業,一場游戲一場夢

創業這件事就好比一場養成類游戲&#xff0c;而我們自己就是游戲主角。 這個游戲有一個特殊之處在于&#xff1a;SSS級裝備有穿戴等級設定&#xff0c;就算你氪重金買到了一把神器&#xff0c;自身閱歷不夠也根本無法發揮它的強大威力而只能當個裝飾。 這就要求我們真正沉浸在…

催單開發信怎么寫?外貿人如何寫催單郵件?

年末催單開發信編寫技巧&#xff1f;最有效的催單話術有哪些&#xff1f; 催單開發信成為了企業間日常溝通的重要一環。這些信件不僅有助于促進業務發展&#xff0c;還可加強供應鏈的協調&#xff0c;確保貨物及時送達。蜂郵EDM將介紹如何寫一封出色的催單開發信&#xff0c;以…

ubuntu20.04安裝多版本cuda,切換版本

1. 安裝cuda toolkit: 下載網站 https://developer.nvidia.com/cuda-11.3.0-download-archive 選擇版本&#xff0c;這里選擇11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run給cuda權限: chmod x…

Linux加強篇001-部署Linux系統

目錄 一、前言 1.1準備工具 1.2安裝配置VM虛擬機 1.3安裝軟件 1.4系統初始化進程 1.5重置root密碼 二、鞏固練習 1&#xff0e;為什么建議讀者在下載系統文件后先進行校驗而不是直接安裝呢&#xff1f; 2&#xff0e;使用虛擬機安裝Linux系統時&#xff0c;為什么要先…

科技與藝術如何交織出“理想之家”?三星電視給出家電行業最優解答

作者 | 曾響鈴 文 | 響鈴說 理想的家&#xff0c;是什么樣子? 關于這個問題&#xff0c;社交媒體上有形形色色的答案。很多人的夢中情屋是原木風、奶油色&#xff0c;點綴著綠意盎然的植物&#xff1b;還有一些人的Dream house是用全屋智能將科技感拉滿&#xff0c;再配上打…

OpenStack云計算平臺-計算服務

目錄 一、計算服務概覽 二、安裝并配置控制節點 1、先決條件 2、安全并配置組件 3、完成安裝 三、安裝和配置計算節點 1、安全并配置組件 2、完成安裝 四、驗證操作 一、計算服務概覽 使用OpenStack計算服務來托管和管理云計算系統。OpenStack計算服務是基礎設施即服務…

2024東北師范大學計算機考研分析

24計算機考研|上岸指南 東北師范大學 信息科學與技術學院位于長春凈月國家高新技術產業開發區&#xff0c;毗鄰風光秀美的凈月潭國家森林公園。 信息科學與技術學院由原“計算機科學與信息技術學院”和“信息與軟件工程學院”于2017年根據學校事業發展需要整合形成。學院設有…