信息學奧賽初賽天天練-22-C++基礎關鍵字、進制轉換、結構體與聯合體的實用技巧大揭秘

PDF文檔公眾號回復關鍵字:20240607

在這里插入圖片描述

單項選擇題(共15題,每題2分,共計30分:每題有且僅有一個正確選項)

1 在C++中,下面哪個關鍵字用于聲明一個變量,其值不能被修改?( )

A unsigned

B const

C static

D mutable

2 八進制數12345670(8) 和07654321(8)的和為( )

A 22222221(8)

B 21111111(8)

C 22111111(8)

D 22222211(8)

3 閱讀下述代碼,請問修改data的value成員以存儲3.14,正確的方式是( )。

union Data{int num;    float value;    char symbol;
};
union Data data;

A data.value = 3.14;

B value.data = 3.14;

C data->value = 3.14;

D value->data = 3.14;

9 數101010(2)和166(8)的和為( )

A 10110000(2)

B 236(8)

C 158(10)

D A0(16)

2 相關知識點

1) C++ 關鍵字

unsigned 關鍵字

用于聲明無符號整數類型。無符號整數類型只能表示非負整數,即它們的值總是大于或等于零

例如

short是16為二進制組成,第1位是符號位,表示范圍-32768~32767之間
unsigned short是16為二進制組成,無符號位, 表示范圍0~65535之間

#include<bits/stdc++.h>
using namespace std;
/*無符號關鍵字short是16為二進制組成,第1位是符號位,表示范圍-32768~32767之間unsigned short是16為二進制組成,無符號位, 表示范圍0~65535之間
*/ 
int main(){short a=32769;//超出了short的范圍 unsigned short b=32769;//在范圍內可以正常表示 cout<<"a的值為:"<<a<<endl; //輸出不正確 cout<<"b的值為:"<<b<<endl;return 0;
}
/* 
a的值為:-32767 
b的值為:32769
*/

static 關鍵字

在 C 和 C++ 中,當變量被聲明為 static 時,它會在程序的整個執行期間存在,而不僅僅是定義它的代碼塊(例如函數)的執行期間。這意味著 static 變量在函數調用之間保持其值

主要在不同作用域或對象之間共享數據

const 關鍵字

在 C++ 中,const 是一個類型修飾符,用于指定一個變量或對象的值是不可更改的。這意味著一旦為 const 變量分配了初始值,就不能再對其進行修改

#include<bits/stdc++.h>
using namespace std;
const int a=10; 
int main(){//改變const 關鍵字修飾變量的值 編譯會出錯 a=3;// [Error] assignment of read-only variable 'a' cout<<a;return 0;
}

mutable 關鍵字

在聲明const的成員函數,不能修改成員變量,如果成員函數聲明時加 mutable則可以修改

#include <iostream>
using namespace std;class Test {
public:Test(int c):counter(c){}//構造函數 并為counter字段賦值 /* 聲明為const函數,表示不會修改類的成員屬性,但是mutable的屬性除外 */int getValue() const;
private:mutable int counter;
};int Test::getValue() const {counter++;  // 允許在 const 成員函數中修改 mutable 成員變量return counter;
}int main()
{Test mc = 1;cout << mc.getValue() << endl;return 0;
}

2) 進制轉換

R進制轉十進制

按權展開,但要注意各個位的權,最低位(最右邊)的權是0次方,權值為1

(11010110)2=1×2^7+1×2^6+0×2^5+1×2^4+0×2^3+1×2^2+1×2^1+0×2^0=(214)10

十進制整數轉R進制

十進制小數轉R進制

二進制轉八進制

二進制轉換成八進制的方法是,取三合一法,即從二進制的小數點為分界點,向左(或向右)每三位取成一位

(1010 0100)B = (010 001 100 )B=(244)O

八進制轉二進制

二進制轉換成八進制的反向操作

(244)O=(010 001 100 )B=(1010 0100)B

二進制轉十六進制

二進制轉換成十六進制的方法是,取四合一法,即從二進制的小數點為分界點,向左(或向右)每四位取成一位

(10100100)B = (1010 0100)B = (A4)H

十六進制轉二進制

二進制轉換成十六進制的反向操作

(A4)H = (1010 0100)B =(10100100)B

3) 不同進制加法

進制不同不能直接相加,需轉換成相同進制再進行相加

二進制相加

//類似十進制相加,不同的是逢二進一
5+9=14
(5)10=(0101)2,(9)10=(1001)20101
+1001
------1110
二進制 1110 轉10進制
(1110)2=1*2^3+1*2^2+1*2^1=14

八進制相加

//類似十進制相加,不同的是逢8進一
5+9=14
(5)10=(5)8,(9)10=(11)205
+11
------16
八進制 16 轉10進制 
(16)8=1*8^1+6*8^0=8+6=14

4) struct 結構體

struct 結構體是由一系列具有相同類型或不同類型的數據構成的數據集合,是一種復合數據類型,結構類型

#include<bits/stdc++.h>
using namespace std;
//定義一個結構體,可以把多個不同的變量 組織在一起 
struct stu{string no;//學號 string name;//姓名 int age;//年齡 
}; int main(){stu stu1;stu1.no="001";//001賦值給stu1的nostu1.name="張三";//張三賦值給stu1的namestu1.age=18;//18賦值給stu1的agecout<<"學號:"<<stu1.no<<endl;//輸出結構體stu1的學號cout<<"姓名:"<<stu1.name<<endl;//輸出結構體stu1的姓名cout<<"年齡:"<<stu1.age;//輸出結構體stu1的年齡return 0;
}

5) union 聯合體

在 C++ 中,union 是一種特殊的數據結構,它允許在相同的內存位置存儲不同的數據類型。union 可以幫助節省內存,因為它們使用相同的內存空間來存儲不同的數據類型,但是只能同時存儲其中一個

在定義 union 時,所有成員共享同一塊內存空間。當為 union 的某個成員賦值時,會覆蓋 union 中已有的值。這也是 union 的一個特點:它不會記錄哪個成員是當前有效的,因此在使用 union 時,需要確保對應的成員是正確的

#include <iostream>
using namespace std;
/*定義union聯合體,聯合體內多個變量共享內存內存大小和占用空間最大的變量相同同一時刻只有一個變量的值是有效的 
*/ 
union MyUnion {int i;double d;char c;
};int main() {MyUnion u;u.i = 42;//給聯合體變量i賦值 cout << "聯合體變量i的值:" << u.i << endl;//輸出42,其他2個變量d和c無效 u.d = 3.14159;//給聯合體變量d賦值cout << "聯合體變量d的值:" << u.d << endl;//輸出3.14159,其他2個變量i和c無效u.c = 'A';//給聯合體變量d賦值cout << "聯合體變量c的值:" << u.c << endl;//輸出A,其他2個變量i和d無效return 0;
}

6) 結構體(struct)和聯合體(union)區別

在 struct 中,每個成員都有自己的內存空間,在 union 中,所有成員共享同一塊內存空間,union 的大小取決于其最大的成員

struct 中的成員可以同時存在,每個成員都有自己的地址,union 中的成員共享相同的內存,同一時刻只能存儲一個成員的值

struct 的大小等于其所有成員大小的總和,每個成員都有獨立的內存空間,union 的大小等于其最大成員的大小,各變量共享內存

#include <iostream>
using namespace std;
/*定義結構體 MyStruct內包括3個變量,這3個變量被組織到一起,可以同時使用 
*/ 
struct MyStruct {//占用空間必須是最大占用空間變量的整數倍 
//i 占用4個字節 需要補4個字節夠8個字節,因為后面夠8個字節 (8) int i;
//d 占用8個字節 (8) double d;
//c 占用1個字節 需要補7個字節到8個字節 (8) char c;
};//所以 MyStruct總共占用24個字節 struct MyStruct1 {//占用空間必須是最大占用空間變量的整數倍 
//i 占用4個字節 需要補4個字節夠8個字節,因為后面夠8個字節 (8) int i;
//d 占用8個字節  (8) double d;
//用4個字節 和后面c一起補足8個字節 (j,c一起再補足3個字節)  (8) int j;
//c 占用1個字節 char c;
};//所以 MyStruct1總共占用24個字節struct MyStruct2 {//占用空間必須是最大占用空間變量的整數倍
//i 占用4個字節 需要補4個字節夠8個字節,因為后面夠8個字節 (8) int i; 
//d 占用8個字節  (8)double d;
//j用4個字節 補足8個字節  (8) int j;
//d1 占用8個字節  (8)double d1;
//c 占用1個字節 補足8個字節  (8)  char c;
};//所以 MyStruct1總共占用40個字節/*定義一個聯合體 MyUnion內包括3個不同類型變量 這3個變量同時只能使用一個 占用空間,聯合體變量占用空間最大的變量 
*/ 
union MyUnion {int i;//i占用4個字節 double d;//d占用8個字節 char c;//c占用1個字節 
};//聯合體占用空間為8個字節 int main() {cout << "struct占用內存空間大小:" << sizeof(MyStruct) << " bytes" << endl;cout << "struct1占用內存空間大小:" << sizeof(MyStruct1) << " bytes" << endl;cout << "struct2占用內存空間大小:" << sizeof(MyStruct2) << " bytes" << endl;cout << "union占用內存空間大小:" << sizeof(MyUnion) << " bytes" << endl;MyStruct s;s.i = 42;s.d = 3.14;s.c = 'A';cout << "Struct的值: " << s.i << ", " << s.d << ", " << s.c << endl;MyUnion u;u.i = 42;cout << "聯合體i的值: " << u.i << endl;u.d = 3.14;cout << "聯合體重新賦值后d的值: " << u.d << endl;return 0;
}

3 思路分析

1 在C++中,下面哪個關鍵字用于聲明一個變量,其值不能被修改?( )

A unsigned

B const

C static

D mutable

答案 B

分析

unsigned 為無符號,只影響數據類型的取值范圍

const 為不可修改關鍵字,const在變量前,此變量為常量,不能修改,修改編譯會報錯

static 為靜態變量,被static關鍵字修飾后,可以在多個對象直接共享此變量,都可以修改

mutable 和const配合使用,在定義為const的函數使用mutable關鍵詞修飾的變量,可以修改

2 八進制數12345670(8) 和07654321(8)的和為( )

A 22222221(8)

B 21111111(8)

C 22111111(8)

D 22222211(8)

答案 D

分析

由于相加的2個數都是8進制,因此可以直接相加,逢八進一

 12345670
+07654321
---------22222211

3 閱讀下述代碼,請問修改data的value成員以存儲3.14,正確的方式是( )。

union Data{int num;    float value;    char symbol;
};
union Data data;

A data.value = 3.14;

B value.data = 3.14;

C data->value = 3.14;

D value->data = 3.14;

答案 A

Union 為聯合體,和 struct 類似,賦值應用.運算符

9 數101010(2)和166(8)的和為( )

A 10110000(2)

B 236(8)

C 158(10)

D A0(16)

答案 D

轉換統一進制后再計算

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

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

相關文章

二叉樹講解升級版

目錄 二叉樹的存儲結構 二叉樹結點的查找和修改 二叉樹結點的插入 二叉樹的創建 二叉樹的遍歷 先序遍歷 中序遍歷 后序遍歷 層序遍歷 重建二叉樹 二叉樹的靜態實現 二叉樹的存儲結構 一般來說&#xff0c;二叉樹使用鏈表來定義。和普通鏈表的區別是&#xff0c;由于…

【Java】解決Java報錯:StackOverflowError

文章目錄 引言1. 錯誤詳解2. 常見的出錯場景2.1 無限遞歸2.2 遞歸深度過大2.3 方法調用層次過深 3. 解決方案3.1 優化遞歸算法3.2 尾遞歸優化3.3 增加調用棧大小3.4 檢查遞歸終止條件 4. 預防措施4.1 使用迭代替代遞歸4.2 尾遞歸優化4.3 合理設計遞歸算法4.4 調整JVM參數4.5 定…

b端系統類管理平臺設計前端開發案例

b端系統類管理平臺設計前端開發案例

二叉樹-堆的詳解

一&#xff0c;樹的概念 1&#xff0c;樹的概念 樹是一種非線性的數據結構&#xff0c;它是由n&#xff08;n>0&#xff09;個有限結點組成一個具有層次關系的集合。 把它叫做樹是因為它看起來像一棵倒掛的樹&#xff0c;也就是說它是根朝上&#xff0c;而葉朝下的。 有…

vue3 + echarts 二次開發百分比餅圖

效果圖&#xff1a; 安裝 pnpm i echarts 公共模塊組件 <divclass"pie"ref"percent"style"width: 100%; height: calc(100% - 48px)"></div> import { ref, onMounted } from vue import * as echarts from echarts const prop…

【JavaScript腳本宇宙】解密前端工具:選擇最佳JavaScript模塊管理工具

精選前端工具匯總&#xff1a;打包器和捆綁器的完整指南 前言 在現代Web開發中&#xff0c;使用適當的工具和庫可以極大地提高開發效率和項目質量。本文將介紹一些常用的Web應用程序捆綁器&#xff0c;這些工具能夠幫助開發人員有效地管理JavaScript模塊和資源。 歡迎訂閱專欄…

SpringBoot項目啟動提示端口號占用

Windows環境下&#xff0c;SpringBoot項目啟動時報端口號占用&#xff1a; *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the proc…

【樂吾樂3D可視化組態編輯器】狀態告警示例

狀態告警的設置方法為兩種&#xff1a; 1.通過數據點號設置&#xff08;推薦&#xff09;&#xff1a; 適用于綁定單一數據點號&#xff0c;設置邏輯簡潔&#xff0c;實現簡單邏輯交互 2.通過交互事件監聽數據點號設置&#xff1a; 適用于綁定多個數據點號&#xff0c;實現復…

LLM大模型AI應用的三階技術

第一階 指令工程&#xff08;Prompt Enginner&#xff09; 設計提示&#xff08;Prompt Design&#xff09; 結果優化&#xff08;Response Optimization&#xff09; 交互設計&#xff08;Interaction Design&#xff09; 模型理解&#xff08;Model Understanding&#…

哈希經典題目(C++)

文章目錄 前言一、兩數之和1.題目解析2.算法原理3.代碼編寫 二、判定是否互為字符重排1.題目解析2.算法原理3.代碼編寫 三、 字?異位詞分組1.題目解析2.算法原理3.代碼編寫 總結 前言 哈希表是一個存儲數據的容器&#xff0c;我們如果想要快速查找某個元素&#xff0c;就可以…

Python驅動下的AI革命:技術賦能與案例解析

在當今這個信息化、數據化的時代&#xff0c;人工智能&#xff08;AI&#xff09;已經成為推動社會發展的重要力量。而Python&#xff0c;作為一種簡單易學、功能強大的編程語言&#xff0c;在AI領域的應用中發揮著至關重要的作用。本文將探討Python在AI領域的應用、其背后的技…

MMUNet:形態學特征增強網絡在結腸癌病理圖像分割中的應用

MMUNet: Morphological feature enhancement network for colon cancer segmentation in pathological images. 發表在&#xff1a;Biomedical Signal Processing and Control2024--影響因子&#xff1a;3.137 南華大學的論文 論文地址&#xff1a;main.pdf (sciencedirecta…

Wakeup Source框架設計與實現

Wakeup Source 為系統組件提供了投票機制&#xff0c;以便低功耗子系統判斷當前是否可以進入休眠。 Wakeup Source(后簡稱&#xff1a;WS) 模塊可與內核中的其他模塊或者上層服務交互&#xff0c;并最終體現在對睡眠鎖的控制上。 1. 模塊功能說明 WS的處理邏輯基本上是圍繞 com…

后端進階-分庫分表

文章目錄 為什么需要分庫為什么需要分表 什么時候需要分庫分表只需要分庫只需要分表 分庫分表解決方案垂直分庫水平分庫垂直分表水平分表 分庫分表常用算法范圍算法hash分片查表分片 分庫分表模式客戶端模式代理模式 今天跟著訓練營學習了分庫分表&#xff0c;整理了學習筆記。…

機器學習模型進行預測和回測

這段代碼是為了并行地處理多個 CSV 文件&#xff0c;并使用機器學習模型進行預測和回測。主要涉及以下步驟&#xff1a; 初始化環境與設置&#xff1a; 引入必要的庫&#xff0c;如 ray 用于并行計算&#xff0c;pandas 用于數據處理&#xff0c;tqdm 用于進度條顯示等。設置一…

golang 不用sleep如何實現實現每隔指定時間執行一次for循環?

今天介紹的是在go語言里面不用time.Sleep&#xff0c; 使用for range 定時器管道 來實現按照我們指定的時間間隔來執行for循環, 即&#xff1a; for range ticker.C { } 這樣就實現了for每隔指定時間執行一次&#xff0c;除非管道被關閉&#xff0c;否則for而且會一直柱塞當前線…

淺說線性DP(下)

聲明 最近博主身體不適&#xff0c;更新較慢&#xff0c;請大家體諒體諒 最大上升子序列 【題目描述】 一個數的序列 你的任務&#xff0c;就是對于給定的序列&#xff0c;求出最大上升子序列和。注意&#xff0c;最長的上升子序列的和不一定是最大的&#xff0c;比如序列(1…

03-3.3.1 棧在括號匹配中的應用

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜歡《數據結構》部分筆記的小伙伴可以訂…

echarts的使用

一 echarts的使用 引入 echarts.js 文件 <script src"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> 準備一個呈現圖表的盒子 <div class"container"><div class"t_header"><span>端午…

東方博宜1760 - 整理抽屜

題目描述 期末考試即將來臨&#xff0c;小T由于同時肩負了學習、競賽、班團活動等多方面的任務&#xff0c;一直沒有時間好好整理他的課桌抽屜&#xff0c;為了更好地復習&#xff0c;小T首先要把課桌抽屜里的書分類整理好。 小T的抽屜里堆著 N 本書&#xff0c;每本書的封面上…