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)/(c²+d²)] + [(bc-ad)/(c²+d²)]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.real² + b.imag² != 0

乘法公式混淆:注意虚部相乘时符号变化(i² = -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₁)² + (y₂-y₁)²]
  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;没有办法使用同步工具&…