- 博客(246)
- 资源 (1)
- 收藏
- 关注
原创 3.17 内联函数
这个关键字是对编译器的一个建议,建议编译器在编译的时候仅使用函数体中的语句替换函数调用表达式,也就是说有些函数短而简单不值得开销,编译时在调用处用函数体进行替换节省了参数传递,控制转移等开销。来帮我们实现的,当我们编写一个内联函数时,表面看起来像一个内联函数,但在运行过程中编译器并不通过转子函数返回的过程。内联函数是指在调用简单函数时能够提高运行效率的一种机制,内联函数的实现是由。内联函数必须是短小而且简单。内联函数声明时使用关键字。
2025-12-22 17:15:02
293
原创 3.15 引用类型
C++中值传递实现的是值得单向传递,而引用传递实现的是值的双向传递。例:输入两个整数并交换(引用传递)例:输入两个整数并交换(值传递)
2025-12-19 16:34:28
172
原创 3.14 函数的参数传递
此种方式仅仅能够满足函数计算所需要的数据用参数传递的方式给到了函数,函数拿到数据就开始计算,即使在函数体中对参数值有任何修改,也仅仅是修改了函数的形参,并不能改变主调函数的实参。即函数的形参在函数调用时分配内存(定义时仅声明类型 / 名称,无内存),实参→形参的传递过程叫「参数传递」,核心分为值传递(单向)和引用传递(双向,C++ 特有)特点:函数内修改形参,仅改变形参的内存值,实参完全不受影响(单向:实参→形参,形参无法反向影响实参);本质:实参的 “值拷贝” 给形参(形参是独立变量,有自己的内存);
2025-12-19 15:59:04
514
原创 3.12 函数递归调用示例——汉诺塔
有三根针A、B、C。A针上有N个盘子,大的在下,小的在上要求把这N个盘子从A针移到C针,在移动过程中可以借助B针每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。二、从“小数量圆盘”入手,具象理解递推逻辑。这是理解递归的关键,我们可以把圆盘分成“五、举个直观例子(n=4的步数验证)四、通俗总结汉诺塔的递归思想。一、先搞懂汉诺塔的基本规则。三、抽象出递归核心逻辑。
2025-12-08 15:29:38
871
原创 3.10 函数的递归调用
文章摘要: 本文介绍了函数嵌套调用的原理与实现。通过一个求两个整数平方和的C++示例程序,展示了函数嵌套调用的过程:主函数调用squareSum()函数,而squareSum()又调用了mysquare()函数。文中详细分析了函数调用栈的工作原理,并提供了对应的汇编代码展示调用现场保存和返回地址处理机制。这个示例清晰地演示了函数嵌套调用时程序执行的流程控制方式。
2025-12-05 12:04:41
467
原创 3.9 函数的嵌套调用
文章摘要: 本文介绍了函数嵌套调用的原理与实现。通过一个求两个整数平方和的C++示例程序,展示了函数嵌套调用的过程:主函数调用squareSum()函数,而squareSum()又调用了mysquare()函数。文中详细分析了函数调用栈的工作原理,并提供了对应的汇编代码展示调用现场保存和返回地址处理机制。这个示例清晰地演示了函数嵌套调用时程序执行的流程控制方式。
2025-12-05 11:32:18
340
原创 3.8 函数调用示例——投骰子
是指虽然每次产生的随机数是随机的,但是每次运行程序产生的随机数的次序都是不变的。正是因为rand函数产生的是伪随机数,为了解决这个问题C++提出了随机数种子的方案用来解决,即使用srand函数用来种。游戏者在程序开始时数据一个无符号整数,作为产生随机数的种子每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;我们知道投骰子时上面显示的数字是随机说,所以要用到随机函数,这个随机函数是C++库函数。设计一个函数专门用来投骰子过程,主函数只用调用即可。每个骰子有六面,点数分别为1、2、3、4、5、6。
2025-12-04 16:45:35
467
原创 3.5 函数调用示例
但对于“计算arctan级数”这个场景,第一段代码是绝对的最优解——它不仅解决了第二段的所有痛点,还保留了级数计算的核心逻辑,是兼顾效率、稳定性和可读性的最佳实现。但这一点在实际开发中意义不大——第一段代码只要理解“递推缓存”的逻辑(用前一项推导后一项,避免重复计算),可读性反而更高(少了函数跳转的心智负担)。(一次判断终止条件,一次计算项值),栈帧的创建和销毁会带来额外开销;相当于每迭代1次,只做“1次乘法+1次除法”,效率极高。的循环开销可忽略),第二段的“公式直写”特性才有点优势。
2025-12-01 15:12:04
1018
原创 3.3 函数的调用
对于自定义好的函数或C++系统函数,使用的时候直接调用就可以了,这就是模块化程序设计的好处,将一个问题分解成若干个模块,每个模块相对独立,只用处理一小部分问题,每次都先把这些模块定义好,使用的时候直接调用即可,而且可以多次重复的调用。调用函数前需要先声明函数原型,声明的意思是告诉编译器即将调用一个函数。之所以这样做是因为函数的定义和调用往往不在一个程序或者在一个程序中函数定义的位置可能出现在函数调用的位置之后,在这种情况下当程序中使用了函数调用表达式的时候,编译器还没有见过这个函数定义,自然无法做语法检查,
2025-11-28 13:02:56
894
原创 3.2 函数的定义
函数:定义好的可重用的功能模块定义函数:将一个模块的算法用C++语言描述出来,即将我们设计好的算法用C++语言描述出来这个过程就叫做函数的定义,定义一个函数的主要功能是通过函数体语句写成C++语句。函数名:功能模块的名字函数的参数:计算所需要的数据和条件函数的返回值:需要返回的计算结果,当然函数也可以没有返回值,有些函数仅仅是实现了某些功能类型标识符 函数名 (形式参数表)语句序列C++ 函数名的命名没有语法强制的规则(只要符合标识符命名的基础语法),但有。
2025-11-27 16:28:25
538
原创 2.19 程序举例
程序可以计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积的值然后将其显示出来。例:编程计算图形的面积。例:计算1到10的和。
2025-11-26 18:32:55
556
原创 2.18 C++自定义类型
类型别名:为已有类型另外命名我们在写程序的时候需要给类型起一个别名,可以用typedef关键字一、C++ 为什么要有类型别名?类型别名(typedef或 C++11 后的using)的核心价值是“简化复杂类型、提升代码可读性、增强可维护性”,本质是给已有类型起“别名”,不创造新类型。简化复杂/冗长的类型名(最核心用途)C++ 中很多类型名本身很长(比如指针、STL 容器、函数指针、模板类型),用别名替代后,代码会简洁很多,降低书写和阅读成本。示例:简化 STL 容器类型。
2025-11-26 15:40:48
1197
原创 2.17 嵌套的控制结构、其他控制语句
我们可以用循环语句依次处理大批量的数据,但在实践中会出现需要从多个不同的维度重复执行同一个算法,比如处理一个矩阵的数据,需要既要处理每行的数据,还要处理每列的数据。使程序从循环体和Switch语句中跳出,继续执行逻辑上的下一条语句。例:输入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。使程序的执行流程跳转到语句标号所指定的语句。结束本次循环,接着判断是否执行下一次循环。continue语句。
2025-11-25 11:36:15
419
原创 2.3 8086CPU结构
寄存器是CPU执行指令的**“数据舞台”**,指令的执行过程几乎都围绕“将数据放入寄存器→在寄存器中运算→将结果从寄存器输出”展开。简单来说,现代CPU的架构是在8086的基础上,通过数十年的技术迭代,从“单功能、低并行”的16位芯片,发展为“多功能、高并行、高集成”的复杂系统,但核心的“运算-通信”分工逻辑仍有传承。简单来说,现在的CPU早已不是“串行”的工作状态,而是依靠“复杂、高效的指令流水线”实现指令的并行执行,这也是CPU性能不断突破的核心原因之一。现代CPU性能提升的核心设计!
2025-11-25 10:40:08
542
原创 2.16 for语句
如果没有循环,遇到“重复操作”(比如计算1~100的和、遍历数组所有元素、让用户反复输入直到正确),只能重复写无数遍相同代码——不仅麻烦,还容易出错(比如少写/多写一遍),后续修改也需要逐个调整。,同时while语句,do-while语句都可以转化成为for语句执行,for语句是将循环变量的初始化、循环条件的判断,循环控制变量的增值都放在循环头中。),从而实现循环,但会破坏代码的“结构化”(跳转无规律,难维护),仅在极端场景(如多层循环跳出)使用,日常开发禁止滥用。
2025-11-24 12:21:21
912
原创 2.15 do-while 语句
do-while语句也是一个循环语句,这个语句的作用是先做依次循环,不论条件是否成立都要执行依次循环,然后再判断是否进行下一轮循环。例:从键盘输入一个数,将其翻转后输出。表达式为true时,继续执行循环体。先执行循环体语句,后判断条件。
2025-11-24 11:41:51
136
原创 2.2 Intel 8086/8088 CPU的功能结构
总结来说,计算机的运行是**“CPU通过总线指挥内存和I/O接口,不断取指令、读数据、执行操作”的循环**,而开机进入操作系统的过程,就是这个循环从“固件启动”逐步过渡到“操作系统接管”的完整体现。采用指令流水线工作方式的计算机具有较高的工作效率。CPU内部采用了一种先进的指令流水线结构,这种结构可以有效而充分地利用个主要硬件资源。CPU通过系统总线的。指令是构成汇编语言程序的基本单位,就像高级语言中的语句。三、系统总线的“分工协作”(以进入操作系统为例)汇编语言程序是由一些列的指令(指令序列)构成。
2025-11-21 18:24:01
583
原创 2.14 循环结构——while语句
如果没有循环,遇到 “重复操作”(比如计算 1~100 的和、遍历数组所有元素、让用户反复输入直到正确),只能重复写无数遍相同代码 —— 不仅麻烦,还容易出错(比如少写 / 多写一遍),后续修改也需要逐个调整。,就比如累加运算,累加的项也不是一个数列,但是他们解决方法都是同样的数学方法加法,只是处理不同的数据而已,这是大量的相同操作的重复,这种情况下就不用推导数学公式,可以直接用循环结构解决问题。,让程序更简洁、易维护、可扩展(比如要计算 1~1000 的和,只需改循环条件,不用加 900 行代码)。
2025-11-21 18:22:18
385
原创 2.1 IBM-PC计算机基本结构
从传统的并行总线(如早期的 ISA、PCI)发展到如今的高速串行总线(如 PCIe 7.0),总线依然是计算机硬件系统中连接 CPU、内存、I/O 设备的核心 “信息高速公路”。这种 “核心部件直接连总线,I/O 设备通过接口连总线” 的架构,是现代计算机硬件系统的经典设计,既保障了核心通信的效率,又解决了外围设备的兼容性和扩展性问题。比如,你可以把存储器想象成一栋楼,每个存储单元是“房间”,地址就是“房间号”,CPU通过“房间号”(地址)才能准确找到要读写的数据。如显示器、打印机等。
2025-11-20 11:53:51
1563
1
原创 1.6 基本逻辑运算
数表示信息,具有物理实现容易、可靠性高的优点,且由于状态"0"和“1”正好与逻辑运算中的逻辑“真”和“假”对应,因此可以用“0”和“1”来表示逻辑变量的取值,很容易地实现各种复杂的逻辑运算。"异或"运算是指:当A和B相同时(同时为1或同时为0),运算结果为0,不同时,结果为1。"或"运算是指当逻辑变量A和B中,至少有一个为1时,结果为1,其他情况为0。"与"运算:仅当逻辑变量A与B都是1时,运算结果才为1.其他情况都为0。“或"运算也叫逻辑加,用”|“或”+"表示。
2025-11-20 11:50:37
228
原创 1.5 字符的表示
在计算机内部,各种字符(字母、符号、数字码)都是按一定的方式编写成二进制信息。不同的计算机及不同的场合所采用的编码形式可能不同。目前最广泛采用的是ASCII码(American Standard Code for Information Interchange)标准ASCII码为一字节,其中用低七位表示字符编码,用高位表示奇偶数验位。标准ASCII码一共128个,可以分为两类。
2025-11-19 09:20:07
307
原创 1.4 带符号数的表示
用补码表示的机器数,符号位仍然表示数的符号:0为正,1为负。对于正数,补码与原码相同,对于负数需要进行变换。在一般算术表示中使用“+”和“-”来表示正数与负数,而在计算机中使用“0”和“1”来表示正数和负数。8位二进制数源码的最大数为01111111(+127),最小数为11111111(-127)二进制数的最高位表示符号,0表示正,1表示负。0原码有两种表示形式:00000000和10000000(+0和-0)用“+”和“-”来表示正负数叫。用“0”和“1”来表示正负数叫。当位数为8时,最大补码为。
2025-11-19 09:19:15
715
原创 1.3 进位计数制及其相互转换
二进制与8进制、16进制之间有非常简单的转换关系:3位二进制数与一位8进制数对应,4位二进制数与一位16进制数对应。二进制与八进制和十六进制之间的对应关系很简单:三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数。在计算机中数据表示一般采用二进制数,因为它在计算机中最容易表示和存储,且适合于逻辑值的表达与运算。例如:222从右边开始,第一个2表示2个1,第二个2表示有2个10,第三个2表示有2个100.,其余数为二进制数的最低位,再用其商除2,其余数为次低位,反复做下去,直到商为0。
2025-11-18 16:57:07
624
原创 2.13 Switch语句
用switch:当你需要判断一个整数/枚举/字符类型变量是否等于多个固定值(比如星期、月份、状态码);用if-else if:当你需要做范围判断x>5)、多条件组合),或变量是浮点数(doublefloatswitch不支持)。等值多分支用 switch,范围/组合判断用 if-else。两者都是必备语法,根据场景灵活选择即可~
2025-11-18 16:48:39
756
原创 2.12 if语句
在嵌套的多重选择结构中,如果嵌套内值是单选择if语句需要在上级if判断后添加{}将单选择if语句作为一个复合语句。我们在编写程序的时候并不总是按照顺序的步骤写下来的,很多时候需要用到选择,需要分支。二分支选择结构:if(表达式)语句1 else 语句2。例:if(x> y)cout << x;单选择if语句:if(表达式)语句。例:if(x>y)cout<<x;else if (表达式2)语句2。else if (表达式3)语句3。if(表达式1)语句1。
2025-11-17 12:13:49
294
原创 2.11 数据的输入和输出
"<<"是预定义的插入符,作用在流类对象cout上便可以实现向标准输出设备输出cout<<表达式<<表达式…">>"是预定义的提取符,标准输入是将提取符作用在流对象cin上,作用是可以将键盘输入的数据提取出来存放在表达式所指定的空间中去。cin>>表达式>>表达式…提取符可以连续写多个,每个后面跟一个表达式,该表达式通常适用于存放输入值的变量。
2025-11-17 11:00:10
418
原创 2.9 运算优先级、类型转换
在面向对象编程中,父类指针/引用可以指向子类对象(“向上转型”),但如果需要调用子类特有的成员,就必须把父类类型“转换回”子类类型——此时你知道父类指针实际指向的是子类对象,但编译器不知道,需要用转换明确告诉它。在底层开发(如指针操作、内存拷贝)中,可能需要把一个类型的指针转为另一个不相关类型的指针——此时你清楚内存的布局,需要用转换告诉编译器“按我指定的类型解释这段内存”。低————————————————————————————————————————————>高。
2025-11-16 15:05:46
1203
原创 1.2 学习和使用汇编语言的目的
通过用汇编语言编制程序可以更清楚地了解计算机是如何完成各种复杂的工作。在此基础上,程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处。在某些要求节省内存空间和提高程序运行速度的应用场合,如实时过程控制、智能仪器仪表等,常常用汇编语言来编制程序。学习和使用汇编语言可以从根本上认识、理解计算机的工作过程。如:机器自检、系统初始化、实际的输入输出设备的操作等。效率有两个方面的含义:程序的目标代码长度和运行的速度。在计算机系统中,某些功能必须用汇编语言程序来实现。汇编语言程序的效率高于高级语言程序。
2025-11-15 17:36:01
180
原创 2.8 Sizeof运算和位运算
之所以需要这个运算一是有些类型在C++标准中并没有规定它确切的一定占多少字节,比如int类型、double类型,它跟每个实现系统相关,这种情况下我们可以用Sizeof计算一下这个类型所占的字节数;高级语言处理数据都是以字节为单位的,机器语言,汇编语言处理数据是按照位为单位处理的,但C语言诞生时,继承了这一功能能够按位处理信息。操作,只有当两个位对应位都是1的时候,结果的对应位是1;操作,只有当两个位对应位都是1的时候,结果的对应位是1;在 32 位系统是 4 字节,64 位系统可能是 8 字节)。
2025-11-15 17:31:15
739
原创 2.7 逗号运算、关系运算、逻辑运算和条件运算
仅仅利用简单的关系运算符进行关系运算是不足以表示复杂的逻辑关系的,比如判断是否“a>b并且x>y”仅用简单的关系运算符就无法计算。5,a * 4 最终结果为60,赋值运算符的优先级要高于逗号表达式,所以运算过程就是先将3。表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型。关系运算符:<,<=,>,>=,==,!逻辑或运算的短路特性:表达式1||表达式2。逻辑表达式:如(a>b)&&(x>y)&&的短路特性:表达式1&&表达式2。关系表达式是一种最简单的逻辑表达式。
2025-11-14 11:49:54
435
原创 1.1 汇编语言的一般概念
高级语言:高级语言将计算机内部的操作细节屏蔽起来,用户不需要知道计算机内部数据的传送和处理的细节,使用类似于自然语言的一些语句来编制程序,完成指定的任务。机器语言的优点:机器语言最直接的表示了计算机内部的基本操作,用它编制的程序在计算机中运行的效率最高。在32位二进制数表示的机器语言程序代码中,包含了乘法和加法运算操作,其中前16位代码表示了乘法运算,后16位代码表示了加法运算。机器指令中既包含了指示运算功能的代码,又给出了参加运算的操作数据,表示非常详细。汇编语言程序与机器语言程序的关系。
2025-11-14 10:22:41
429
原创 2.6 算术运算符与算术表达式
将值赋给变量,也就是说将一个值装到变量所代表的存储空间中去,赋值操作是通过赋值运算符完成的,也就是=,例如n=5。有十种复合运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=±*/(若整数相除,结果取整,商的小数部分就舍去了)优先级与结合性:先乘除,后加减,同级自左至右。自增自减运算符分为前置和后置。%(取余,操作数为整数)算术运算是最基本的运算。++,–(自增、自减)
2025-11-13 16:13:50
535
搭建Kubernetes(k8s)集群用到的部署CNI网络插件
2023-05-25
数据挖掘在医学领域中的应用及研究
2014-03-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅