【C語言16天強化訓練】從基礎入門到進階:Day 13


?🔥個人主頁:艾莉絲努力練劍

?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、洛谷刷題、C/C++基礎知識知識強化補充、C/C++干貨分享&學習過程記錄

🍉學習方向:C/C++方向學習者

??人生格言:為天地立心,為生民立命,為往圣繼絕學,為萬世開太平

前言:距離我們學完C語言已經過去一段時間了,在學習了初階的數據結構之后,博主還要更新的內容就是【C語言16天強化訓練】,之前博主更新過一個【C語言刷題12天IO強訓】的專欄,那個只是從入門到進階的IO模式真題的訓練。【C語言16天強化訓練】既有IO型,也有接口型。和前面一樣,今天依然是訓練五道選擇題和兩道編程算法題,希望大家能夠有所收獲!



目錄

一、五道選擇題

1.1? 題目1

1.2? 題目2

1.3? 題目3

1.4? 題目4

1.5? 題目5

二、兩道算法題

2.1? 統計每個月兔子的總數

2.1.1 題目理解

2.1.2 思路

2.2??數列的和

2.2.1 題目理解

2.2.2 思路

結尾


一、五道選擇題

1.1? 題目1

題干:如果x = 2014 ,下面函數的返回值是( )

int fun(unsigned int x)
{int n = 0;while(x + 1){n++;x = x | (x + 1);} return n;
}

A. 20? ? ?B. 21? ? ?C. 23? ? ?D. 25

解析:正確答案就是C選項。

這個作用是對整型中0的個數進行統計,x=x|(x+1);的作用是每次循環把x的二進制中從右往左數的最后一位0變成1,一直到變成全1的時候x+1就溢出為全0,循環結束。2014的二進制是0000 0000 000 0000 0000 0111 1101 1110,所以結果是23。

1.2? 題目2

題干:下列語句定義 x 為指向 int 類型變量 a 的指針,其中哪一個是正確的( )

A. int a , *x = a;? ? ?B. int a , *x = &a;? ? ?C. int *x = &a , a;? ? ?D. int a , x = a;

解析:正確答案就是B選項。

A選項的x是指針,賦值時使用a不合適,C選項在賦值時a變量還沒定義,D選項中的x不是指針,B選項是最合適的。

1.3? 題目3

題干:下面有關空指針和未初始化指針,說法錯誤的是( )

A. 對0x0這個地址取值是非法的

B. 空指針可以確保不指向任何對象或函數; 而未初始化指針則可能指向任何地方? ? ?

C. 空指針與任何對象或函數的指針值都不相等? ? ?

D. malloc在其內存分配失敗時返回的是一個未初始化的指針

解析:正確答案就是D選項。

malloc函數在內存分配失敗時返回NULL,其余選項都正確。

1.4? 題目4

題干:若有定義 int a[8]; ,則以下表達式中不能代表數組元素 a[1] 的地址的是( )

A. &a[0]+1? ? ?B. &a[1] ? ? ?C. &a[0]++? ? ?D. a+1

解析:正確答案就是D選項。

D選項中a計算時是首元素地址,再加1,就是a[1]的地址,AB明顯對,C選項a[0]先和++結合,形成一個表達式,不能對表達式取地址,會報錯。

1.5? 題目5

題干:以下選項中,對基本類型相同的兩個指針變量不能進行運算的運算符是( )

A. +? ? ?B. -? ? ?C. =? ? ?D. ==

解析:正確答案就是A選項。

A選項錯誤,因為兩個地址相加無意義也可能越界,所以規定不允許指針相加;

B選項,可以求出兩個數據元素儲存位置之間的相隔同數據類型的元素個數;

C選項,賦值,沒問題;

D選項,判斷兩指針是否相同。

選擇題答案如下:

1.1? C

1.2? B

1.3? D

1.4? D

1.5? A

校對一下,大家都做對了嗎?


二、兩道算法題

2.1? 統計每個月兔子的總數

牛客網鏈接:HJ37 統計每個月兔子的總數

題目描述:

2.1.1 題目理解

這道題的關鍵在于尋找數字之間的規律,如果細心的友友會發現這其實是一個斐波那契數列規律:第 n 個月的兔子數量實際上就是第 n - 1 個斐波那契數。

題意理解——計算斐波那契數列的第n項(從第1項開始:1,1,2,3,5,...),因為兔子生長規律與斐波那契數列相同。如下圖所示,博主這里畫了一個簡單的示意圖——

這道題是IO型的,下面是C語言的模版(如果是IO型就可以不用管它們了)——

2.1.2 思路

1、兔子從出生后第三個月開始每月生一只,且不死。

2、設第n個月兔子總數為 f(n),則:

(1)第 1 個月:f(1)=1;

(2)第 2 個月:f(2)=1;

(3)第 n 個月(n ≥ 3):f(n) = f(n - 1)+f(n - 2)(因為新生的兔子數等于兩個月前的兔子總數)。

3、直接使用迭代法(循環)計算斐波那契數列即可。

代碼演示:

//C語言實現
#include <stdio.h>int main()
{int n;scanf("%d", &n);if (n <= 2){printf("1\n");return 0;}int a = 1, b = 1, c;for (int i = 3; i <= n; i++){c = a + b;a = b;b = c;}printf("%d\n", b);return 0;
}

時間復雜度O(n),需要迭代n次;

空間復雜度O(1),僅需幾個變量。

同樣的,我們知道這里是一個斐波那契數列之后,代碼也可以這樣實現——

代碼演示:

//C語言實現
#include <stdio.h>
int main()
{int n;while (~scanf("%d", &n)) {int num1 = 1, num2 = 1, ret = 0;for (int i = 2; i < n; i++) {ret = num1 + num2;num1 = num2;num2 = ret;}printf("%d\n", ret);} return 0;
}

時間復雜度O(n),需要迭代n次;

空間復雜度O(1),僅需幾個變量。

我們學習了C++之后也可以嘗試用C++來實現一下,看看自己前段時間C++學得怎么樣——

代碼演示:

//C++實現
#include <iostream>
using namespace std;int main()
{int n;cin >> n;if (n <= 2){cout << 1 << endl;return 0;}int a = 1, b = 1, c;for (int i = 3; i <= n; i++){c = a + b;a = b;b = c;}cout << b << endl;return 0;
}

時間復雜度:O(n),空間復雜度:O(1)

我們目前要寫出來C++的寫法是非常考驗前面C++的學習情況好不好的,大家可以嘗試去寫一寫,優先掌握C語言的寫法,博主還沒有介紹C++的算法題,之后會涉及的,敬請期待!

2.2??數列的和

牛客網鏈接:REAL246 數列的和

題目描述:

2.2.1 題目理解

給定n和m,計算數列:n, sqrt(n), sqrt(sqrt(n)), ...(共m項)的和,保留兩位小數。

2.2.2 思路

(1)第一項為n,之后每一項是前一項的平方根;

(2)循環m次,每次將當前項加到總和,并更新當前項為它的平方根;

(3)注意精度:使用double類型,輸出保留兩位小數。

這道題是IO型的,下面是C語言的模版(如果是IO型就可以不用管它們了)——

代碼演示:

#include <stdio.h>
#include <math.h>int main() 
{int n, m;while (scanf("%d %d", &n, &m) != EOF) {double sum = 0;double current = n;for (int i = 0; i < m; i++) {sum += current;current = sqrt(current);}printf("%.2f\n", sum);}return 0;
}

時間復雜度O(m),每次循環計算一次平方根(通常為常數時間操作);

空間復雜度O(1),僅需幾個變量。

既然明確了我們調用C語言math庫,就可以這樣——

求取一個數字的平方根可以使用數學庫中的double sqrt(double num) 函數完成,接下來只需要從數字自身開始進行求和并在求和后將 n 自身計算成為自身的平方根即可。

代碼演示:

#include <stdio.h>
#include <math.h>int main()
{double m, n;while (~scanf("%lf %lf", &n, &m)) {double sum = 0;while (m-- > 0) {sum += n;//從自身開始以及每次的平方根進行求和n = sqrt(n);//n成為當前自身的平方根}printf("%.2lf\n", sum);} return 0;
}

時間復雜度O(n)

空間復雜度O(1)

我們學習了C++之后也可以嘗試用C++來實現一下,看看自己前段時間C++學得怎么樣——

代碼演示:

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;int main() 
{int n, m;while (cin >> n >> m) {double sum = 0;double current = n;for (int i = 0; i < m; i++) {sum += current;current = sqrt(current);}cout << fixed << setprecision(2) << sum << endl;}return 0;
}

時間復雜度:O(n),空間復雜度:O(1)

我們目前要寫出來C++的寫法是非常考驗前面C++的學習情況好不好的,大家可以嘗試去寫一寫,優先掌握C語言的寫法,博主還沒有介紹C++的算法題,之后會涉及的,敬請期待!


結尾

本文內容到這里就全部結束了,希望大家練習一下這幾道題目,這些基礎題最好完全掌握!

往期回顧:

【C語言16天強化訓練】從基礎入門到進階:Day 12

【C語言16天強化訓練】從基礎入門到進階:Day 11

【C語言16天強化訓練】從基礎入門到進階:Day 10

【C語言16天強化訓練】從基礎入門到進階:Day 9

【C語言16天強化訓練】從基礎入門到進階:Day 8

【C語言16天強化訓練】從基礎入門到進階:Day 7

【C語言16天強化訓練】從基礎入門到進階:Day 6

【C語言16天強化訓練】從基礎入門到進階:Day 5

【C語言16天強化訓練】從基礎入門到進階:Day 4

【C語言16天強化訓練】從基礎入門到進階:Day 3

【C語言16天強化訓練】從基礎入門到進階:Day 2

【C語言16天強化訓練】從基礎入門到進階:Day 1

結語:感謝大家的閱讀,記得給博主“一鍵四連”,感謝友友們的支持和鼓勵!

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

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

相關文章

單元測試到底是什么?該怎么做?

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快一、什么是單元測試&#xff1f;單元測試&#xff08;unit testing&#xff09;&#xff0c;是指對軟件中的最小可測試單元進行檢查和驗證。至于“單元”的大小或范…

PostgreSQL【應用 04】加解密擴展 pgcrypto 使用實例(加密、導出、導入、解密流程說明)

加解密擴展 pgcrypto 使用實例1.需求說明2.工具說明2.1 環境說明2.2 插件添加3.實例分析3.1 測試數據3.2 進行加密3.3 數據導出3.3.1 Navicat 導出3.3.2 copy 命令導出3.4 數據解密3.4.1 Navicat 導入3.4.2 copy 導入3.5 坑1.需求說明 從內網導出敏感數據的時候&#xff0c;對…

SDK、JDK、JRE、JVM的區別

SDK、JDK、JRE、JVM的區別一、SDK二、JDK三、JRE四、JVM五、JDK、JRE、JVM三者關系圖一、SDK SDK&#xff08;Software Development Kit&#xff0c;程序軟件開發工具包&#xff09;&#xff0c;可以認為jdk只是sdk的一種&#xff08;子集&#xff09;&#xff0c;而當提及jav…

如何啟動一個分支網絡改造試點?三步走

在多云化、全球化的今天&#xff0c;企業的分支網絡早已不僅僅是“能連”的問題。視頻會議卡頓、ERP 響應延遲、跨境訪問不穩、合規風險增大……這些都讓 CIO 和 IT 負責人越來越清楚&#xff1a;分支網絡改造是數字化的必修課。但是&#xff0c;面對幾百甚至上千個分支機構&am…

四,設計模式-原型模式

目的原型模式的產生是為了解決一個問題&#xff0c;即復制對象時對被復制對象所屬類的依賴。當需要復制一個對象時&#xff0c;需要遍歷對象中的所有成員并進行復制&#xff0c;但存在一些問題&#xff1a;某些成員對象可能是私有的無法訪問。同時要復制某個對象&#xff0c;那…

(筆記)Android窗口管理系統分析

概述 Android窗口管理系統是Android UI框架的核心組件&#xff0c;負責管理所有應用窗口的顯示、布局、層級、焦點和輸入事件分發。WindowManagerService&#xff08;WMS&#xff09;作為系統服務&#xff0c;協調Surface、Activity、View等組件&#xff0c;為用戶提供流暢的界…

WebIDEPLOY 技術支撐草莓數字產業鏈的構建邏輯與實踐路徑—— 草莓智能育苗系統實踐應用分析

一、WebIDEPLOY 技術與草莓產業數字化的適配邏輯WebIDEPLOY 技術以 “低門檻接入、全鏈路協同、數據驅動” 為核心特征&#xff0c;其底層架構可精準對接草莓產業鏈的碎片化需求。通過零代碼設備接入模塊&#xff0c;能快速整合育苗棚傳感器、種植區智能設備、銷售端數據平臺等…

汽車電氣系統的發展演進為測試帶來了哪些影響?

隨著汽車智能化進程加速&#xff0c;車輛電氣系統方案持續演進。為滿足日益嚴格的功能安全要求&#xff0c;主機廠逐漸引入智能配電、冗余配電等新型方案&#xff0c;這給電氣系統的測試環節帶來了顯著影響。智能配電測試何為智能配電&#xff1f;下圖分別展示了傳統電氣架構以…

Rocky9配置完VMware橋接模式后沒有自動獲取IP

現象如下&#xff1a;查看網卡狀態&#xff1a; nmcli dev status可以看到ens160存在&#xff0c;但是disconnected查看已有連接配置&#xff1a; nmcli con show可以看到連接配置也在重啟NetworkManager systemctl restart NetworkManager激活網卡 sudo nmcli con up "en…

Unity List 相關

順序復制同類型的List①list2 new List<T>(list1);②list2.Clear(); list1.ForEach(item > list2.Add(item));倒序復制同類型的Listlist2 new List<T>(list1);//順序復制 list2.Reverse();//顛倒list亂序復制同類型的ListList<T> list2 new List<T&…

網絡安全測試(一)Kali Linux

Kali Linux 是一款專為網絡安全測試、滲透測試和白帽黑客設計的 Linux 發行版&#xff0c;預裝了大量安全測試工具。以下是其核心工具的分類及代表性工具介紹&#xff1a; 一、信息收集工具 用于獲取目標網絡、主機或系統的基礎信息。 Nmap&#xff1a;網絡掃描工具&#xff0…

go grpc使用場景和使用示例

Go gRPC 使用場景 微服務架構中的服務間通信&#xff1a;在微服務架構中&#xff0c;不同的服務之間需要高效、可靠地進行通信和數據交換&#xff0c;gRPC 可以很好地滿足這一需求。需要高并發、低延遲通信的場景&#xff1a;gRPC 基于 HTTP/2 協議&#xff0c;支持多路復用和頭…

6.8 學習ui組件方法和Element Plus介紹

學習 UI 組件庫的核心是 “文檔 實踐 深入”。從官方文檔入門&#xff0c;通過構建真實項目來鞏固和深化理解&#xff0c;適時探索源碼以提升認知。同時&#xff0c;掌握按需引入、主題定制、插槽等關鍵技術&#xff0c;并保持對性能、可訪問性和最佳實踐的關注。記住&#x…

MongoDB和Mysql比較

MongoDB與MySQL深度對比:選擇適合你的業務的數據存儲方案 在當今數據驅動的時代,選擇合適的數據庫系統對應用性能、開發效率和業務擴展性至關重要。作為數據庫領域的兩大巨頭,關系型數據庫的代表MySQL和文檔型NoSQL的代表MongoDB,常常成為開發者面臨的選擇。本文將從數據模…

LoRA modules_to_save解析及卸載適配器(62)

LoRA modules_to_save解析及卸載適配器 modules_to_save解析 PEFT 模型中卸載適配器 在需保存模塊列表中,還可以添加什么 modules_to_save解析 還有一個配置參數可用于指定你希望保持 “活躍且可訓練” 的層列表 —— 也就是說,這些層會被設為可訓練狀態。更便捷的是,你無需…

分支多、云也多,網絡又慢又燒錢?一套方案全搞定!

隨著企業云化和全球化步伐加快&#xff0c;多云、混合云已成為常態&#xff0c;而非選擇。隨之而來的是網絡架構的復雜性與日俱增&#xff1a;分支越來越多&#xff0c;應用越來越散&#xff0c;鏈路越來越雜。IT部門不僅要保障關鍵應用的體驗&#xff0c;還要應對跨境合規、成…

centos7安裝java mysql redis nginx

1.安裝java8(百度) yum install java-1.8.0-openjdk.x86_64 [rootcanteen jar]# yum install java-1.8.0-openjdk.x86_64 yum install java-1.8.0-openjdk-devel.x86_64 查java版本&#xff1a; [rootlocalhost ~]# java -version openjdk version "1.8.0_372" Op…

【STM32】G030單片機的窗口看門狗

一、簡單介紹窗口看門狗適合需要精確時序控制的場合&#xff0c;在一個受限的窗口期內喂狗&#xff0c;如果遞減計數器還沒有到窗口值就喂狗&#xff0c;會觸發復位如果一直不喂狗&#xff0c;也會觸發復位&#xff0c;和之前的獨立看門狗的窗口選項有點類似需要指出的是&#…

完整代碼注釋:實現 Qt 的 TCP 客戶端,實現和服務器通信

一、實驗效果演示 實現 Qt 的 TCP 客戶端&#xff0c;實現和服務器通信二、代碼框架 三、代碼 tcpclient客戶端代碼 tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QDebug> #include <QMessageBox> #include …

AR培訓系統:油氣行業的安全與效率革新

在油氣行業&#xff0c;一場由增強現實&#xff08;AR www.teamhelper.cn &#xff09;技術引領的培訓革命正在悄然發生。新員工們不再需要冒著生命危險在真實的鉆井平臺上學習操作&#xff0c;而是通過AR眼鏡在虛擬環境中模擬鉆井、起下鉆甚至處理井噴等復雜操作。這種創新的培…