3月2日 C++日常習題測試一答案

C++測試題答案與講解

一、填空題答案及講解

  1. 答案const
    • 講解:在 C++ 中,const關鍵字用于定義常量,一旦定義,其值不能被修改。例如const int num = 10;,這里的num就是一個常量。
  1. 答案3
    • 講解:數組的下標從 0 開始,a[5] = {1, 2, 3, 4, 5};中,a[0]的值為 1,a[1]的值為 2,以此類推,a[2]的值就是 3。
  1. 答案:內存地址
    • 講解:指針變量用于存儲其他變量的內存地址。通過指針,程序可以間接訪問和操作存儲在該地址的數據。例如int num = 5; int *p = #,這里的p就是一個指針,存儲了num變量的地址。
  1. 答案:常量表達式
    • 講解:在switch語句中,每個case后面必須跟一個常量表達式。常量表達式在編譯時就能確定其值,這樣switch語句才能根據表達式的值準確地跳轉到對應的case分支。例如switch (day) { case 1: // 處理周一的情況; break; case 2: // 處理周二的情況; break; },這里的 1 和 2 就是常量表達式。
  1. 答案:先執行循環體,再判斷條件
    • 講解while循環是先判斷條件表達式,若條件為真則執行循環體;而do - while循環是先執行一次循環體,然后再判斷條件表達式,若條件為真則繼續執行循環體,否則退出循環。例如int i = 0; do { cout << i << " "; i++; } while (i < 3);,會先輸出 0,然后再判斷i < 3是否成立,繼續循環。
  1. 答案enum
    • 講解enum關鍵字用于定義枚舉類型,它是一種用戶自定義的數據類型,用于將一組相關的常量組織在一起。例如enum Color { RED, GREEN, BLUE };,這里定義了一個Color枚舉類型,其中REDGREENBLUE是枚舉常量,默認情況下,RED的值為 0,GREEN的值為 1,BLUE的值為 2。
  1. 答案floatdouble
    • 講解float(單精度浮點數)和double(雙精度浮點數)用于表示帶有小數部分的數值。float通常占用 4 個字節,double通常占用 8 個字節,double的精度更高,能表示更精確的小數。例如float f = 3.14f; double d = 3.141592653589793;
  1. 答案delete[] p;
    • 講解:當使用new運算符動態分配數組內存時,需要使用delete[]來釋放該內存,以避免內存泄漏。這里int *p = new int[10];分配了一個包含 10 個int類型元素的數組內存,delete[] p;則釋放了這塊內存。如果使用delete p;(少了[]),則只會釋放p指向的第一個元素的內存,而其他元素的內存將無法釋放,導致內存泄漏。
  1. 答案:邏輯與、邏輯或
    • 講解&&是邏輯與運算符,只有當左右兩邊的表達式都為真時,整個表達式才為真。例如(3 > 2) && (5 < 10),因為3 > 2為真,5 < 10也為真,所以整個表達式為真。||是邏輯或運算符,只要左右兩邊的表達式有一個為真,整個表達式就為真。例如(3 > 2) || (5 > 10),因為3 > 2為真,所以整個表達式為真。
  1. 答案:O(n^2)
    • 講解:冒泡排序是一種簡單的排序算法。它通過多次比較相鄰元素并交換位置,將最大(或最小)的元素逐步 “冒泡” 到數組的末尾。在最壞情況下,即初始數組是逆序的,需要進行n(n - 1)/2次比較和交換操作,時間復雜度為O(n^2)。例如對于一個長度為n的數組,第一輪需要比較n - 1次,第二輪需要比較n - 2次,以此類推,總的比較次數為(n - 1) + (n - 2) +... + 1 = n(n - 1)/2,時間復雜度為O(n^2)。

二、選擇題答案及講解

  1. 答案:B
    • 講解char類型通常占用 1 個字節,用于存儲單個字符。int類型在不同系統下可能占用 2 個字節(如 16 位系統)或 4 個字節(如 32 位和 64 位系統);float類型通常占用 4 個字節;double類型通常占用 8 個字節。所以在這幾種數據類型中,char占用內存空間最小。
  1. 答案:D
    • 講解:指針變量在使用前最好初始化,否則它會指向一個不確定的內存地址,可能導致程序崩潰,所以 A 選項錯誤。指針變量的值是它所指向變量的內存地址,而不是變量的值,B 選項錯誤。雖然可以對指針變量進行算術運算,如p++,但指針算術運算的結果是基于其所指向的數據類型的大小,并且指針算術運算必須在合理的范圍內,否則會導致未定義行為,C 選項不準確。指針變量通常只能指向同類型的變量,這樣才能保證對指針所指向內存的訪問和操作是安全和正確的,D 選項正確。
  1. 答案:B
    • 講解a > b? a : b是一個條件表達式,其含義是如果a > b為真,則返回a的值,否則返回b的值。因為a = 5b = 35 > 3為真,所以該表達式的值為a的值,即 5。
  1. 答案:A
    • 講解:在for(int i = 0; i < 10; i += 2)循環中,i的初始值為 0,每次循環后i增加 2。當i = 0時,滿足i < 10,執行循環體;i變為 2 后,仍滿足i < 10,繼續執行循環體;以此類推,當i依次變為 4、6、8 時都執行循環體,當i變為 10 時,不滿足i < 10,循環結束。所以循環體執行的次數為 5 次。
  1. 答案:D
    • 講解switch語句中default分支用于處理case常量表達式都不匹配的情況,它可以省略,A 選項正確。switch語句中case后面的值必須是常量表達式,這是語法要求,B 選項正確。switch語句中case分支可以有多個語句,如果沒有break語句,程序會繼續執行下一個case分支的語句,所以case分支的多個語句不需要用{}括起來,C 選項正確。switch語句中case分支后面的語句不一定必須以break結束,如果沒有break,會發生 “穿透” 現象,即繼續執行下一個case分支的語句,所以 D 選項錯誤。
  1. 答案:C
    • 講解:在枚舉類型enum Week {Mon, Tue, Wed, Thu, Fri, Sat, Sun};中,枚舉常量默認從 0 開始編號,Mon的值為 0,Tue的值為 1,Wed的值為 2,以此類推。所以Wed的值為 2。
  1. 答案:B
    • 講解:在 C++ 運算符優先級中,乘法運算符*的優先級高于加法運算符+,邏輯與運算符&&和等于運算符==。例如表達式3 + 4 * 2,先計算4 * 2,結果為 8,再計算3 + 8,結果為 11。所以在這幾個運算符中,*的優先級最高。
  1. 答案:B
    • 講解:數組在定義后大小是固定的,不能改變,A 選項錯誤。數組名代表數組的首地址,這是數組的一個重要特性,通過數組名可以訪問數組中的元素,B 選項正確。通過數組名不能直接訪問數組元素,需要通過數組名加下標來訪問,例如arr[0],C 選項錯誤。數組元素的數據類型必須相同,這是數組的基本定義,D 選項錯誤。
  1. 答案:A
    • 講解:在代碼int arr[5] = {1, 2, 3, 4, 5}; int *p = arr;中,p指向了數組arr的首地址。在for(int i = 0; i < 5; i++) { cout << *(p + i) << " "; }循環中,*(p + i)等價于arr[i],通過指針偏移依次訪問數組中的每個元素,并將其輸出。所以這段代碼實現的功能是輸出數組arr的元素。
  1. 答案:A
    • 講解:穩定排序是指在排序過程中,相同元素的相對順序保持不變。冒泡排序在比較相鄰元素時,如果元素相等不會交換位置,所以它是穩定排序。快速排序、選擇排序和堆排序在某些情況下可能會改變相同元素的相對順序,屬于不穩定排序。例如,對于數組{2, 2, 1},冒泡排序后仍然是{1, 2, 2},相同元素的相對順序不變;而快速排序在某些劃分情況下,可能會將兩個2的相對順序改變。

三、判斷題答案及講解

  1. 答案:√
    • 講解:在 C++ 中,變量必須先聲明后使用。聲明變量的作用是告訴編譯器變量的類型和名稱,以便編譯器為其分配內存空間。例如int num;聲明了一個int類型的變量num,之后才能對num進行賦值和其他操作。
  1. 答案:×
    • 講解:字符串常量不能直接賦值給字符數組。例如char arr[10]; arr = "hello";這樣的寫法是錯誤的。應該使用strcpy函數來將字符串常量復制到字符數組中,如strcpy(arr, "hello");。這是因為字符數組名是一個常量指針,不能直接被賦值。
  1. 答案:×
    • 講解:指針變量通常指向同類型的變量。雖然可以通過強制類型轉換讓指針指向不同類型的變量,但這樣做可能會導致未定義行為,因為不同類型的變量在內存中的存儲方式和大小可能不同。例如int num = 5; char *p = (char *)#,這樣的操作可能會導致訪問內存錯誤,因為char類型和int類型的大小不同。
  1. 答案:√
    • 講解if - else語句可以嵌套使用,以實現更復雜的條件判斷邏輯。例如if (a > 10) { if (b > 20) { // 內層if語句 } else { // 內層else語句 } } else { // 外層else語句 },通過嵌套可以根據不同的條件執行不同的代碼塊。
  1. 答案:×
    • 講解while循環是先判斷條件表達式,若條件為真則執行循環體,若條件一開始就為假,則循環體一次都不會執行。例如int i = 5; while (i > 10) { // 循環體 },由于i > 10為假,循環體不會執行。
  1. 答案:√
    • 講解:枚舉類型的元素默認從 0 開始編號。例如enum Season { SPRING, SUMMER, AUTUMN, WINTER };SPRING的值為 0,SUMMER的值為 1,AUTUMN的值為 2,WINTER的值為 3。當然,也可以在定義枚舉類型時指定元素的值,如enum Season { SPRING = 1, SUMMER, AUTUMN, WINTER };,此時SUMMER的值為 2,AUTUMN的值為 3,WINTER的值為 4。
  1. 答案:√
    • 講解:數組名作為函數參數傳遞時,傳遞的是數組的首地址。這意味著在函數內部對數組元素的修改會影響到原數組。例如void modifyArray(int arr[], int n) { arr[0] = 100; },調用該函數時,傳遞的數組首地址使得函數內部對arr[0]的修改會改變原數組第一個元素的值。
  1. 答案:√
    • 講解:邏輯運算符&&||具有短路特性。對于&&運算符,如果左邊的表達式為假,則右邊的表達式不會被計算,因為整個表達式已經確定為假。例如(false && someFunction())someFunction()不會被調用。對于||運算符,如果左邊的表達式為真,則右邊的表達式不會被計算,因為整個表達式已經確定為真。例如(true || someFunction())someFunction()不會被調用。
  1. 答案:×
    • 講解:動態分配的內存(使用new運算符分配的內存)需要手動釋放(使用deletedelete[]運算符),否則程序結束時系統不會自動回收,會造成內存泄漏。例如int *p = new int;,在使用完p后,需要使用delete p;來釋放內存;如果是動態分配的數組int *arr = new int[10];,則需要使用delete[] arr;來釋放內存。
  1. 答案:×
    • 講解:排序算法的時間復雜度不僅與數據規模有關,還與初始數據的順序有關。例如冒泡排序,在初始數組已經有序的情況下,時間復雜度為O(n),因為只需要進行一輪比較,沒有元素交換;而在初始數組逆序的情況下,時間復雜度為O(n^2)。插入排序也類似,在初始數組有序時,時間復雜度為O(n)。所以排序算法的時間復雜度與初始數據順序有關。

四、編程題答案及講解

1. 冒泡排序函數

void bubbleSort(int arr[], int n) {

????for (int i = 0; i < n - 1; i++) {

????????for (int j = 0; j < n - i - 1; j++) {

????????????if (arr[j] > arr[j + 1]) {

????????????????int temp = arr[j];

????????????????arr[j] = arr[j + 1];

????????????????arr[j + 1] = temp;

????????????}

????????}

????}

}

  • 講解
    • 外層循環for (int i = 0; i < n - 1; i++)控制排序的輪數。對于一個長度為n的數組,最多需要進行n - 1輪排序就能將數組排好序。
    • 內層循環for (int j = 0; j < n - i - 1; j++)用于比較相鄰元素并交換位置。在每一輪排序中,比較的次數會隨著輪數的增加而減少,因為每一輪都會將一個最大(或最小)的元素 “冒泡” 到數組的末尾。
    • if (arr[j] > arr[j + 1])判斷相鄰的兩個元素arr[j]arr[j + 1]的大小關系,如果arr[j]大于arr[j + 1],則交換它們的位置。通過int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp;這三行代碼實現交換。經過多輪比較和交換,最終數組會按從小到大的順序排列。

2. 尋找數組最大值和最小值的程序

#include <iostream>

using namespace std;

int main() {

????int n;

????cout << "請輸入整數的個數: ";

????cin >> n;

????int arr[n];

????cout << "請輸入" << n << "個整數: ";

????for (int i = 0; i < n; i++) {

????????cin >> arr[i];

????}

????int maxVal = arr[0];

????int minVal = arr[0];

????for (int i = 1; i < n; i++) {

????????if (arr[i] > maxVal) {

????????????maxVal = arr[i];

????????}

????????if (arr[i] < minVal) {

????????????minVal = arr[i];

????????}

????}

????cout << "數組中的最大值為: " << maxVal << endl;

????cout << "數組中的最小值

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

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

相關文章

2W8000字 LLM架構文章閱讀指北

? 大模型架構專欄已經更新了30多篇文章。完整的專欄內容歡迎訂閱&#xff1a; LLM 架構專欄 1、LLM大模型架構專欄|| 從NLP基礎談起 2、 LLM大模型架構專欄|| 自然語言處理&#xff08;NLP&#xff09;之建模 3、 LLM大模型架構之詞嵌入&#xff08;Part1&#xff09; 3、 LLM…

SP導入智能材質球

智能材質球路徑 ...\Adobe Substance 3D Painter\resources\starter_assets\smart-materials 放入之后就會自動刷新

網絡原理----TCP/IP(3)

核心機制七----延時應答 默認情況下&#xff0c;接收方都是在收到數據報的第一時間&#xff0c;就返回ack&#xff0c;但是可以通過延時返回ack的方式來提高效率&#xff0c;理論上不是100%提高效率&#xff0c;但還是有一定幫助的。 因為如果接收數據的主機?刻返回ACK應答,…

MacBook Pro使用FFmpeg捕獲攝像頭與麥克風推流音視頻

FFmpeg查看macos系統音視頻設備列表 ffmpeg -f avfoundation -list_devices true -i "" 使用攝像頭及麥克風同時推送音頻及視頻流: ffmpeg -f avfoundation -pixel_format yuyv422 -framerate 30 -i "0:1" -c:v libx264 -preset ultrafast -b:v 1000k -…

部署Joplin私有云服務器postgres版-docker compose

我曾經使用過一段時間 Joplin&#xff0c;官方版本是收費的&#xff0c;而我更傾向于將數據掌握在自己手中。因此&#xff0c;在多次權衡后&#xff0c;我決定自己搭建 Joplin 服務器并進行嘗試。 個人搭建的版本與數據庫直連&#xff0c;下面是使用 Docker Compose 配置數據庫…

SQL的select語句完整的執行順序

SQL的SELECT語句的執行順序可以用"做菜流程"來類比理解。雖然我們寫SQL時按SELECT…FROM…WHERE…順序寫&#xff0c;但數據庫執行順序完全不同。以下是通俗易懂的講解&#xff08;附流程圖和示例&#xff09;&#xff1a; &#x1f527; 執行順序流程圖&#xff1a…

Spring Cloud LoadBalancer詳解

一、介紹 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客戶端負載均衡器,抽象和實現,用來替代Ribbon(已經停更), 二、Ribbon和Loadbalance 對比 組件組件提供的負載策略支持負載的客戶端Ribbon隨機 RandomRule輪詢 RoundRobinRule 重試 RetryRule最低并發 Bes…

ubuntu中ollama設置記錄

自己同一臺電腦主機安裝3080和3090顯卡&#xff0c;測試發現ollama只默認跑在3090上&#xff1b;故查看一下設置&#xff0c;成功也把3080也運行起來了。 原因如下&#xff1a; 開始設置記錄&#xff1a; Environment Variables: OLLAMA_DEBUG 作用&#xff1a;顯示額外的調試…

RabbitMQ系列(四)基本概念之Exchange

在 RabbitMQ 中&#xff0c;Exchange&#xff08;交換機&#xff09; 是消息路由的核心組件&#xff0c;負責根據規則將生產者發送的消息分發到對應的隊列&#xff08;Queue&#xff09;中。以下是其核心功能與分類的詳細說明&#xff1a; 一、Exchange 的核心作用 消息路由樞…

有沒有什么免費的AI工具可以幫忙做簡單的ppt?

互聯網各領域資料分享專區(不定期更新): Sheet 正文 1. 博思AIPPT 特點:專為中文用戶設計,支持文本/文件導入生成PPT,內置海量模板和智能排版功能,涵蓋商務、教育等多種場景。可一鍵優化布局、配色,并集成AI繪圖功能(文生圖/圖生圖)。適用場景:職場匯報、教育培訓、商…

【Python · PyTorch】循環神經網絡 RNN(基礎應用)

【Python PyTorch】循環神經網絡 RNN&#xff08;簡單應用&#xff09; 1. 簡介2. 模擬客流預測&#xff08;數據集轉化Tensor&#xff09;3.1 數據集介紹3.2 訓練過程 3. 模擬股票預測&#xff08;DataLoader加載數據集&#xff09;3.1 IBM 數據集3.1.2 數據集介紹3.1.3 訓練…

【JSON2WEB】15 銀河麒麟操作系統下部署JSON2WEB

【JSON2WEB】系列目錄 【JSON2WEB】01 WEB管理信息系統架構設計 【JSON2WEB】02 JSON2WEB初步UI設計 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代碼前端框架介紹 【JSON2WEB】05 前端開發三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…

地基簡識Spring MVC 組件

Spring MVC 是一個基于 MVC 設計模式的框架&#xff0c;其核心組件協同工作以處理 HTTP 請求并生成響應。以下是各組件的詳細說明及其協作流程&#xff1a; 一、?核心組件 ?DispatcherServlet&#xff08;前端控制器&#xff09;? ?作用&#xff1a;接收所有請求并協調其他…

Spring Boot(七):Swagger 接口文檔

1. Swagger 簡介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 風格的接口文檔在線自動生成 功能測試功能軟件。Swagger 是一個規范和完整的框架&#xff0c;用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。目標是使客戶端和文件系統作為服務器以同樣的…

cursor 彈出在簽出前,請清理倉庫工作樹 窗口

問題出現的背景&#xff1a;是因為我有兩臺電腦開發&#xff0c;提交后&#xff0c;另一個電腦的代碼是舊的&#xff0c;這個時候我想拉取最新的代碼&#xff0c;就會出現如下彈窗&#xff0c;因為這個代碼暫存區有記錄或者工作區有代碼的修改&#xff0c;所以有沖突&#xff0…

Cocos Creator3.8.6拖拽物體的幾種方式

文章目錄 前言一、第一種通過UILocation二、第二種通過UIDelta實現總結 前言 在游戲開發中&#xff0c;拖拽物體是一個非常常見的交互功能&#xff0c;無論是用于UI元素的拖動&#xff0c;還是場景中物體的移動&#xff0c;拖拽操作都能極大地提升用戶體驗。Cocos Creator 3.8…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

隨著人工智能技術的飛速發展&#xff0c;本地部署大型語言模型&#xff08;LLM&#xff09;已成為許多技術愛好者的熱門選擇。本地部署不僅能夠保護隱私&#xff0c;還能提供更靈活的使用體驗。本文將詳細介紹如何在 Mac mini M2&#xff08;24GB 內存&#xff09;上部署 DeepS…

《UE5_C++多人TPS完整教程》學習筆記33 ——《P34 關卡與大廳之間的過渡(Transition Level And Lobby)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P34 關卡與大廳之間的過渡&#xff08;Transition Level And Lobby&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer,…

Nginx 配置與常用命令速查手冊

Nginx 配置文件結構 Linux 中 Nginx 的配置文件&#xff1a; 通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。 Nginx 采用模塊化設計&#xff0c;主要分為以下部分&#xff1a; 1. 全局塊 配置與服務器整體相關的參數&#xff0c;如工作進程數、日…

Vscode 便用快捷鍵設置教程

文章目錄 簡介&#xff1a;1. go to define (跳轉到函數定義的位置)2. go to declaration (跳轉到函數聲明的位置)3. move line &#xff08;上下移動本行代碼&#xff09;3.1上下復制本行代碼 4. 前進和后退&#xff08;就是前進到光標上一次停留的位置&#xff0c;和后退到那…