【集合與結構體】5.2(課本題)總結代碼

ds老師產物,純為期末復習,自用。

題目1

編寫程序,將一個整型變量右移 4 位,并以二進制數形式輸出該整數在移位前和移位后的數值。
//觀察系統填補空缺的數位情況

代碼解答

#include <iostream>//編寫程序,將一個整型變量右移 4 位,并以二進制數形式輸出該整數在移位前和移位后的數值。
//觀察系統填補空缺的數位情況using namespace std;void bitDisplay(unsigned value);int main()
{unsigned x;cout<<"請輸入一個無符號數:";cin>>x;bitDisplay(x);//右移四位x >>= 4;cout<<"移位后\n";bitDisplay(x);return 0;
}void bitDisplay(unsigned value)
{unsigned c;unsigned bitMask = 1 << 31;  //掩碼,最高位置1cout<<value<<" = \t";for(c=1;c<=32;c++){cout<<(value & bitMask ? '1' : '0'); //輸出value的最高位value <<= 1; //value左移一位if(c%8 == 0)cout<< ' ';}cout <<endl;
}

1. 程序功能總結

核心目標:輸入一個無符號整數,將其右移4位,并以二進制形式輸出移位前和移位后的值,觀察右移時系統如何填補空缺位(高位補0)。

執行流程:

  1. 用戶輸入一個無符號整數(如 10)。
  2. 程序調用 bitDisplay 函數輸出該數的32位二進制表示(如 00000000 00000000 00000000
    00001010)。
  3. 將整數右移4位(x >>= 4)。
  4. 再次調用 bitDisplay 輸出移位后的二進制(如 00000000 00000000 00000000 00000000)。

關鍵觀察:由于是無符號整數,右移時高位補0(邏輯右移)。
例如,10 的二進制是 1010,右移4位后變成 0。

2. 關鍵知識點(考試重點)
位操作運算符:

右移(>>):無符號整數右移時,高位補0(邏輯右移);有符號整數右移時,高位補符號位(算術右移,考試常考區別!)。

左移(<<):低位補0(無論有無符號)。

按位與(&):用于檢查特定位(如 value & bitMask 判斷最高位是否為1)。

無符號整數(unsigned):

范圍:0 到 4,294,967,295(32位系統)。

右移時高位固定補0(區別于有符號整數的符號位填充)。

掩碼(Bitmask)技術:

使用 1 << 31 創建一個最高位為1、其余位為0的掩碼(10000000 00000000 00000000 00000000)。

通過 (value & bitMask) 逐位提取二進制值。

二進制輸出邏輯:

循環32次(32位整數),每次輸出最高位后左移一位(value <<= 1),實現從高位到低位的輸出。

每8位添加空格,符合字節分組習慣(如 00000000 00000000 …)。

移位賦值運算符:x >>= 4 等價于 x = x >> 4。

3. 代碼分析(加深理解)
bitDisplay 函數詳解:

void bitDisplay(unsigned value) {unsigned bitMask = 1 << 31; // 第31位(最高位)設為1for(int c = 1; c <= 32; c++) {cout << (value & bitMask ? '1' : '0'); // 輸出當前最高位value <<= 1; // 左移1位,丟棄當前最高位,次高位成為新最高位if(c % 8 == 0) cout << ' '; // 每8位加空格}
}

為什么左移?

通過 value <<= 1 逐步“暴露”每一位,從最高位(MSB)到最低位(LSB)輸出。

掩碼作用:bitMask 始終固定,與 value 的當前最高位比較。

主函數中的右移:

x >>= 4:將 x 的所有位向右移動4位,左側空位補0。

示例:若輸入 x = 10(二進制 1010),右移4位后變為 0。

4. 記憶與練習建議(考試沖刺)

記憶技巧:
無符號 vs 有符號右移:

unsigned:右移高位補0(邏輯右移)。

signed:右移高位補符號位(算術右移)。考試高頻考點!

掩碼口訣:1 << n 創建第 n 位為1的掩碼(例如 1 << 3 = 00001000)。

移位方向:

<<:向高位移動(數值通常變大)。
“>>”:向低位移動(數值通常變小)。

二進制輸出流程:固定掩碼 + 循環左移(從高位到低位輸出)。

練習題(強化理解):
手動計算:

輸入 x = 255(二進制 11111111),手動計算右移4位后的結果,再運行程序驗證。

若改為有符號整數(int x = -10;),右移4位后的二進制是什么?(提示:高位補1)

代碼修改練習:

擴展功能:修改 bitDisplay 函數,使其能輸出有符號整數的二進制(需處理符號位)。

cpp
void bitDisplay(int value) {unsigned bitMask = 1 << 31;for(int i = 0; i < 32; i++) {cout << (value & bitMask ? '1' : '0');value <<= 1;if((i + 1) % 8 == 0) cout << ' ';}
}

添加十六進制輸出:在 bitDisplay 中加入 cout << hex << value << dec; 輸出十六進制值。

位操作實戰:

編寫函數提取一個數的第 n 位:

cpp
int getBit(unsigned value, int n) {return (value >> n) & 1; // 右移n位后與1按位與
}

考試常見題型:

問:unsigned x = 16; x >>= 2; 后,x 的值是多少?(答案:4)

問:如何用位操作判斷整數是奇數還是偶數?(答案:(x & 1) == 1)

考試重點:無符號/有符號移位的區別、掩碼的應用、二進制輸出邏輯。

題目2

使用結構類型表示復數。設計程序,輸入兩個復數,可以選擇進行復數的+、-、×或÷運算,并輸出結果。

代碼解答

#include <iostream>
#include <iomanip>  //格式化輸出
//使用結構類型表示復數。設計程序,輸入兩個復數,可以選擇進行復數的+、-、×或÷運算,并
//輸出結果。using namespace std;struct Complex
{double real; //實部double imag;  //虛部
};int main()
{Complex a,b,result;char operation;double n1;cout<<"請輸入第一個復數:";cin>>a.real>>a.imag;cout<<"請輸入第二個復數:";cin>>b.real>>b.imag;cout<<"請選擇運算(+,-,*,/):";cin>>operation;switch(operation){case '+':result.real = a.real + b.real;result.imag = a.imag + b.imag;break;case '-':result.real = a.real - b.real;result.imag = a.imag - b.imag;break;case '*':result.real = a.real * b.real - a.imag*b.imag;result.imag = a.real * b.imag + a.imag*b.real;break;case '/':if(b.real * b.real + b.imag*b.imag == 0){cout<<"除數不能為0"<<endl;return 1;}n1 = b.real * b.real + b.imag * b.imag;result.real = (a.real*b.real + a.imag*b.imag)/n1;result.imag = (a.imag*b.real - a.real*b.imag)/n1;break;default:cout<<"請正確輸入運算符"<<endl;return 1;}cout<<"計算結果:";cout<<result.real;if(result.imag >= 0){cout<<"+"<<result.imag<<"i"<<endl;}else{cout<<"-"<<-result.imag<<"i"<<endl;}return 0;
}

這個程序實現了復數的四則運算,是結構體應用的典型示例。以下是針對考試復習的詳細總結:

1. 核心功能

輸入兩個復數的實部和虛部

選擇四種運算(+、-、*、/)

按復數運算規則計算結果

格式化輸出結果(正確處理虛部符號)

2. 關鍵知識點
(1) 結構體定義與使用
cpp
struct Complex {
double real; // 實部
double imag; // 虛部
};
結構體作用:將相關數據(實部/虛部)打包為單一類型

變量聲明:Complex a, b, result; 創建三個復數變量

成員訪問:通過.運算符訪問成員(如a.real, b.imag)

(2) 復數運算規則
運算 公式 代碼實現
加法 (a+bi) + (c+di) = (a+c) + (b+d)i real = a.real+b.real; imag = a.imag+b.imag;
減法 (a+bi) - (c+di) = (a-c) + (b-d)i real = a.real-b.real; imag = a.imag-b.imag;
乘法 (a+bi)(c+di) = (ac-bd) + (ad+bc)i real = a.realb.real - a.imagb.imag;
imag = a.real
b.imag + a.imagb.real;
除法 (a+bi)/(c+di) = [(ac+bd)/(c2+d2)] + [(bc-ad)/(c2+d2)]i
分母計算:n1 = b.real
b.real + b.imagb.imag;
分子實部:(a.real
b.real + a.imagb.imag)/n1
分子虛部:(a.imag
b.real - a.real*b.imag)/n1

3. 代碼亮點分析
(1) 除法運算優化

cpp
n1 = b.real*b.real + b.imag*b.imag; // 計算分母模的平方
result.real = (a.real*b.real + a.imag*b.imag)/n1;
result.imag = (a.imag*b.real - a.real*b.imag)/n1;

(2) 智能輸出處理

cpp
if(result.imag >= 0) {cout<<"+"<<result.imag<<"i";
} else {cout<<"-"<<-result.imag<<"i"; // 負虛部轉換為正數輸出
}

4. 考試重點記憶
必背公式(筆試常考!)
運算 實部公式 虛部公式
乘法 real?·real? - imag?·imag? real?·imag? + imag?·real?
除法 (real?·real? + imag?·imag?)/denom (imag?·real? - real?·imag?)/denom
易錯點警示
除法未檢查分母:必須驗證b.real2 + b.imag2 != 0

乘法公式混淆:注意虛部相乘時符號變化(i2 = -1)

輸出格式錯誤:負虛部需轉換符號輸出

題目3

使用結構表示 X-Y 平面直角坐標系上的點,編寫程序,順序讀入一個四邊形的 4 個頂點坐標,判別由這4個頂點的連線構成的圖形是否為正方形、矩形或其他四邊形。要求:定義求兩個點距離的函數使用結構參數。

代碼解答

#include <iostream>
#include <cmath>//使用結構表示 X-Y 平面直角坐標系上的點,編寫程序,順序讀入一個四邊形的 4 個頂點坐標,判別由這
//個頂點的連線構成的圖形是否為正方形、矩形或其他四邊形。要求:定義求兩個點距離的函數使用結構參數。using namespace std;struct Point
{double x;double y;
};double calculateDistance(Point p1,Point p2)
{return sqrt(pow(p1.x - p2.x , 2) + pow(p1.y - p2.y , 2)); //距離公式
}int main()
{Point vertices[4];for(int i = 0;i<4;i++){cout<<"請輸入第"<<i+1<<"個頂點的橫坐標和縱坐標:";cin>>vertices[i].x>>vertices[i].y;}double side1 = calculateDistance(vertices[0], vertices[1]);double side2 = calculateDistance(vertices[1], vertices[2]);double side3 = calculateDistance(vertices[2], vertices[3]);double side4 = calculateDistance(vertices[3], vertices[0]);double diagonal1 = calculateDistance(vertices[0], vertices[2]);double diagonal2 = calculateDistance(vertices[1], vertices[3]);if(fabs(side1 - side3)<= 1e-8 && fabs(side2 - side4)<= 1e-8){if(fabs(side1 - side2)<= 1e-8){//四條邊相等if(fabs(diagonal1 - diagonal2)<=1e-8){cout<<"四個頂點構成的圖形是正方形"<<endl;}}else if (fabs(diagonal1 - diagonal2)<=1e-8){cout<<"是矩形"<<endl;}}else {cout<<"其他四邊形"<<endl;}return 0;
}

四邊形類型判斷程序總結與分析

這個程序用于判斷四個點構成的四邊形是否為正方形、矩形或其他四邊形。以下是詳細的總結和分析,幫助您準備考試:


1. 程序功能

  • 輸入四個點的坐標(假設按順序連接)
  • 計算四邊形的四條邊和兩條對角線
  • 根據邊和對角線的長度關系判斷四邊形類型:
    • 正方形:四條邊相等且兩條對角線相等
    • 矩形:對邊相等且兩條對角線相等
    • 其他四邊形:不滿足上述條件

2. 關鍵知識點

(1) 結構體表示點
struct Point {double x;double y;
};
  • 將點的x、y坐標打包為單一類型
  • 使用數組存儲多個點:Point vertices[4];
(2) 距離計算函數
double calculateDistance(Point p1, Point p2) {return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
  • 應用歐幾里得距離公式
  • 使用pow()函數計算平方,sqrt()開平方
(3) 浮點數比較技巧
fabs(a - b) <= 1e-8  // 代替 a == b
  • 避免浮點數精度誤差
  • 考試重點:必須掌握這種比較方式
(4) 四邊形判斷邏輯
類型條件
正方形四條邊相等 (side1=side2=side3=side4) + 對角線相等
矩形對邊相等 (side1=side3side2=side4) + 對角線相等
其他不滿足以上條件

3. 考試重點記憶

必背公式
  1. 距離公式
    d = √[(x?-x?)2 + (y?-y?)2]
  2. 浮點數比較
    fabs(a-b) < epsilon (ε取1e-8)
  3. 四邊形性質
    • 正方形:四邊等長 + 四角直角 + 對角線等長
    • 矩形:對邊等長 + 四角直角 + 對角線等長
常見考點
  1. 結構體作為函數參數(值傳遞 vs 引用傳遞)
  2. 數組邊界管理(0-based索引)
  3. 幾何屬性判斷的數學基礎
  4. 浮點數處理的注意事項

總結

  • 核心結構Point結構體封裝坐標
  • 關鍵算法:距離計算 + 幾何屬性判斷
  • 易錯點
    • 數組邊界管理(考試高頻錯誤點!)
    • 浮點數精度處理
    • 幾何條件充分性(如菱形未被識別)
  • 學習建議
    1. 手動實現距離計算函數5次
    2. 練習不同點順序的測試用例
    3. 擴展程序支持更多四邊形類型
    4. 重點記憶浮點數比較方法

考試前務必練習數組邊界檢查!這是編程題常見扣分點。幾何題注意先驗證基本四邊形條件(非共線、封閉圖形)。

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

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

相關文章

16.max/min最大最小值函數

1.基本使用 max/min函數返回滿足where條件的一列的最大/最小值。 select max(column_name)|min(column_name) from table_namewhere where_definition 示例&#xff1a; ①求班級總分的最高分 #求班級總分的最高分 SELECT MAX(math_scorechinese_scoreenglish_score)AS 總分…

需要做一款小程序,用來發券,后端如何進行設計能夠保證足夠安全?

溫馨提示&#xff1a;本文由ai生成&#xff0c;請辨別閱讀&#xff0c;本文僅提供一種思考的方式和設計思路 設計一個安全的后端系統&#xff0c;用于發放優惠券的小程序&#xff0c;需要考慮多個安全層面&#xff0c;包括身份驗證、數據安全、API 安全、以及防止常見攻擊&…

ACM設計平臺-核心模塊解析-趙家康

負責模塊解析-趙家康 一、Login.vue 功能邏輯、數據綁定、表單驗證、與后端交互 Vue 登錄頁面的代碼設計 代碼功能概覽 代碼實現了一個典型的登錄頁功能&#xff0c;核心包括&#xff1a; 表單輸入&#xff08;學號、用戶名、密碼、驗證碼&#xff09; 驗證碼生成與校驗 勾…

在 VMware (WM) 虛擬機上安裝的 Ubuntu 22.04 分配了 20GB 磁盤,但僅使用 10GB 就顯示 “空間已滿“

可能原因及解決方案 虛擬機磁盤未實際擴容&#xff08;僅調整了虛擬大小&#xff09; 現象&#xff1a;在 VMware 里調整了磁盤大小&#xff08;如 20GB → 50GB&#xff09;&#xff0c;但 Ubuntu 內部仍只識別 10GB。 原因&#xff1a;VMware 調整的是虛擬磁盤上限&#xf…

初學STM32全功能按鍵非阻塞式實現和強化

其實筆者以前學51的時候按鍵功能就包含非阻塞式的&#xff0c;而且還包括矩陣按鍵的非組塞式按鍵實現。開關的長短鍵功能筆者在之前的51博文中筆者自己嘗試寫過&#xff0c;功能是有了但寫的其實很混亂&#xff0c;幾乎沒有移植的價值。這次江科大剛好出了新的教程&#xff0c;…

【網絡原理】網絡原理簡單認識 —— 內含網絡通信基礎、五元組、網絡協議(OSI 七層協議、TCP/IP 五層(或四層)協議)、封裝和分用

目錄 1. 網絡互連 1.1 局域網LAN 1.2 廣域網WAN 2 網絡通信基礎 2.1 IP地址 2.2 端口號 2.3 網絡協議 3. 五元組 4. 協議分層 4.1 OSI 七層網絡模型 4.2 TCP/IP 五層&#xff08;或四層&#xff09;網絡模型 4.3 網絡設備所在分層(經典筆試題) 5. 網絡數據傳輸的基…

嵌入式之硬件學習(三)通信方式、串口通信

目錄 一、通信種類 1、并行通信 2、串行通信 3、單工模式(Simplex Communication) 4、半雙工通信(Half-Duplex Communication) 5、全雙工通信(Full-Duplex Communication) 6、串行的異步通信與同步通信 &#xff08;1&#xff09;異步通信 &#xff08;2&#xff09;同…

【微信小程序】3、SpringBoot整合WxJava發送訂閱消息

1、創建消息模板 在公共模板庫里面選擇符合自己業務場景的消息模板&#xff0c;例如&#xff1a; 每個消息模板最多選擇5項&#xff0c;可根據自己業務需求自行選擇&#xff0c;順序也可以自己決定。提交后&#xff0c;我們就得到了屬于自己的消息模板ID 2、文檔閱讀 官方文…

Flask 快速精通:從入門到實戰的輕量級 Web 框架指南

Flask 作為 Python 生態中最受歡迎的輕量級 Web 框架&#xff0c;以其簡潔靈活的設計理念贏得了開發者的青睞。本文將系統梳理 Flask 的核心概念與實戰技巧&#xff0c;幫助你快速掌握這一強大框架。 一、Flask 框架概述 1.1 輕量級框架的核心特性 Flask 誕生于 2010 年&…

Python爬取豆瓣短評并生成詞云分析

一、項目概述 本項目的目標是爬取豆瓣上某部電影的短評數據&#xff0c;并生成詞云進行情感分析。我們將使用Python編程語言&#xff0c;借助爬蟲技術獲取數據&#xff0c;并利用自然語言處理和數據可視化工具進行分析。具體步驟包括&#xff1a; 爬取豆瓣短評數據。數據清洗…

Controller Area Network (CAN) 通信機制簡介

目錄 1. CAN 概述 2. 物理結構與傳輸機制 3. 消息格式與仲裁機制 4. 錯誤檢測與總線狀態 5. 工業用 CAN 接口 6. 本講總結 1. CAN 概述 CAN&#xff08;Controller Area Network&#xff09;是由德國博世&#xff08;Bosch&#xff09;公司于 1983 年提出的串行通信協議…

我有一個想法

我有一個想法 我想為家鄉做點事情&#xff0c;但是又不知道從哪里開始。 也許為家鄉的教育做點事情是比較靠譜的。 于是&#xff0c;我就想到了&#xff0c;是不是可以在高中學校&#xff0c;設立一個“鴻鵠”獎學金&#xff1f; 這個獎學金怎么使用呢&#xff1f; 在每年9月份…

【Pandas】pandas DataFrame stack

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**從 DataFrame 的索引&#xff08;行或列&#xff09;中刪除指定層級&#xff08;level&#xff09;**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

Java 自動關閉資源語法糖 - try-with-resources

文章目錄 Java 自動關閉資源語法糖 - try-with-resources前言優勢1、自動資源管理2、處理多重資源3、異常處理更健壯4、適用條件 總結 Java 自動關閉資源語法糖 - try-with-resources 前言 日常開發中&#xff0c;我們經常會看到如下代碼&#xff1a; try (InputStream is …

MyBatis中的動態SQL是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MyBatis中的動態SQL是什么&#xff1f;】面試題。希望對大家有幫助&#xff1b; MyBatis中的動態SQL是什么&#xff1f; 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; MyBatis中的動態SQL指的是根據不同的條件&#x…

【Java反射】如何新增對象中的屬性,與JavaScript中的直接添加屬性有什么區別?

問&#xff1a; Object obj new Object(); //獲取一個類的class對象 Class<?> objClass Object.class; try { //通過newInstance方法創建一個新的屬性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

java spring boot Swagger安裝及使用

https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本與 Spring Boot 版本不兼容 ? SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能導致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

電商云倉/前置倉的物流高效監控、管理、預警系統,快遞鳥DMS

在電商行業蓬勃發展的當下&#xff0c;電商云倉和前置倉作為物流配送體系的關鍵環節&#xff0c;其高效運作直接影響著消費者體驗與企業競爭力。快遞鳥 DMS 物流交付管理平臺&#xff0c;以其卓越的物流監控、管理及預警功能&#xff0c;成為電商企業優化云倉和前置倉物流管理的…

HarmonyOS Next深度解析:高德定位SDK高效集成與實戰指南

HarmoyOS Next 實現高德定位SDK 注&#xff1a;作者采用版本為 HarmonyOS 5.0.0 Release SDK和DevEco Studio 5.0.0 Release。 1.獲取本地AppID&#xff1a; 在index.pages的abountToAppear( ) 方法中獲取appID、并打印在Log日志&#xff0c;即可在程序運行時獲取本地項目的…

【技術】記一次 Docker 中的 ES 數據遷移,使用 Reindex API

記一次 Docker 中的 ES 數據遷移&#xff0c;使用 Reindex API 環境背景需求背景開始遷移確認老 ES 的訪問地址在新 ES 中創建索引的 Mapping (選配)在新 ES 中配置老 ES 的地址開始遷移數據數據驗證 首先聲明&#xff0c;是因為環境限制&#xff0c;沒有辦法使用同步工具&…