本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
cs:programming:cpp:courses:comp306:start:unit_1_2_3 [2024/08/11 12:11] – [Lvalue & Rvalue] codinghare | cs:programming:cpp:courses:comp306:start:unit_1_2_3 [2024/09/15 13:00] (当前版本) – [Infinite Recursion] codinghare | ||
---|---|---|---|
行 224: | 行 224: | ||
* 两个整数相除依然会得到整数 | * 两个整数相除依然会得到整数 | ||
* 整数除法会将**向下** round。比如结果小于 1,得到的结果为 0(非四舍五入) | * 整数除法会将**向下** round。比如结果小于 1,得到的结果为 0(非四舍五入) | ||
+ | * 整数除法与末除相对应 | ||
===Order of operations=== | ===Order of operations=== | ||
* 取决于 rule of precedene | * 取决于 rule of precedene | ||
行 232: | 行 233: | ||
* Lvalue(左值): | * Lvalue(左值): | ||
* Rvalue(右值):用于初始化 / 覆盖左值的内容,通常在赋值运算符右边 | * Rvalue(右值):用于初始化 / 覆盖左值的内容,通常在赋值运算符右边 | ||
+ | ====Functions==== | ||
+ | ===Floating-point=== | ||
+ | * 声明与赋值的组合通常被称为初始化(// | ||
+ | * 浮点数与整数的运算方式不同 | ||
+ | * 浮点转化为整型都会导致 rounddown,比如 '' | ||
+ | ===Math functions=== | ||
+ | * C++ 提供一系列内置的数学函数,需要使用 ''< | ||
+ | * 输出需要使用 ''< | ||
+ | ===Composition=== | ||
+ | * 表达式可以作为另外的表达式的一部分 | ||
+ | ===自定义函数=== | ||
+ | * 允许需要的功能被反复调用 | ||
+ | * 函数可以嵌套 | ||
+ | ===函数的执行顺序=== | ||
+ | 拥有多个函数时: | ||
+ | * '' | ||
+ | * 当遇到函数调用时,跳转到函数部分进行执行,完毕之后返回 '' | ||
+ | * 嵌套函数时会堆栈,最后调用的函数会先执行。 | ||
+ | ===parameter & argument=== | ||
+ | * argument 是实际传递到函数中的参数 | ||
+ | * parameter 是函数定义时用于告知用户该函数需要什么样类型的参数 | ||
+ | * 两者名字无任何关系 | ||
+ | ==parameter and variable are local== | ||
+ | * parameter 的生命周期与函数一致,是局部变量 | ||
+ | ===函数的结构分析=== | ||
+ | ==伪代码== | ||
+ | 组成部分: | ||
+ | < | ||
+ | -开始: function | ||
+ | -输入: pass in | ||
+ | -输出: pass out | ||
+ | -结束: Endfunction | ||
+ | -调用: call | ||
+ | //example | ||
+ | Function main | ||
+ | Pass In: nothing | ||
+ | Doing some lines of code | ||
+ | Call: clear monitor | ||
+ | Doing some lines of code | ||
+ | Pass Out: value zero to the operating system | ||
+ | Endfunction | ||
+ | </ | ||
+ | ==结构表== | ||
+ | * 作为文档的一部分,用于表示整个程序中函数(模块)的结构 | ||
+ | * 调用某个上层的函数将调用其下一级函数 | ||
+ | {{ : | ||
+ | ===Program Control Functions=== | ||
+ | * Modularization:将大的问题分解为小的,可管理的问题 | ||
+ | ==Program Control Function== | ||
+ | * 用于管理函数之间的信息交流 | ||
+ | * 使用公共区域(global)存储所有功能函数所需变量信息 | ||
+ | * 管理函数没有输入输出(比如 '' | ||
+ | ===Void Data Type=== | ||
+ | * 没有值和类型 | ||
+ | * 用于表示缺乏类型的类型 | ||
+ | ===可读文档的建立=== | ||
+ | * 文档:至于源程序顶部,用于说明程序的详情 | ||
+ | * Vertical Alignment | ||
+ | <code cpp> | ||
+ | //e.g. | ||
+ | //bad | ||
+ | float price_gal_paint; | ||
+ | int coverage_gal_paint; | ||
+ | //good | ||
+ | float price_gal_paint; | ||
+ | int | ||
+ | </ | ||
+ | * 正确使用 comments | ||
+ | * Function Banner | ||
+ | <code cpp> | ||
+ | //e.g. | ||
+ | // | ||
+ | // main | ||
+ | // | ||
+ | </ | ||
+ | * Block Markers | ||
+ | * Indent Block Markers | ||
+ | * Meaningful Identifier | ||
+ | * 正确使用 typedef | ||
+ | ====Conditionals and recursion==== | ||
+ | ===modulus operator=== | ||
+ | * 除整数,生成余数 | ||
+ | * 可判断是否能被整除 / 求整数最右边的几位数 | ||
+ | ===带条件的执行=== | ||
+ | <code cpp> | ||
+ | // condition | ||
+ | if(x > 0) { | ||
+ | cout << " | ||
+ | } | ||
+ | // chained | ||
+ | else if(x < 0) { | ||
+ | cout << " | ||
+ | } | ||
+ | // alternative condition | ||
+ | else { | ||
+ | cout << " | ||
+ | </ | ||
+ | ==nested condition== | ||
+ | * 理解为大分支的小分支 | ||
+ | * 注意缩进 | ||
+ | ===Recursion=== | ||
+ | * 函数调用自身 | ||
+ | * 通过自身参数的变化来进行下一步的处理 | ||
+ | ==Infinite Recursion== | ||
+ | 正常的递归需要 | ||
+ | * base case | ||
+ | * 趋向于 Base case 的条件 | ||
+ | ==更多的递归形式== | ||
+ | * 阶乘 | ||
+ | * base -> '' | ||
+ | * 递归 -> '' | ||
+ | ====Furitful functions==== | ||
+ | ===return value=== | ||
+ | * 返回的类型需要和函数定义的返回类型一致 | ||
+ | * 存在条件语句时,满足条件分支中的 return 会直接跳出函数 | ||
+ | * 另外一部分不会被执行的 code 被称为 //Dead code// | ||
+ | * 这种情况下需要保证所有的分支都存在 return | ||
+ | ===Development=== | ||
+ | ==Incremental development== | ||
+ | * 使用小步骤渐进式的编写程序 | ||
+ | * 使用临时变量测试中间值,保证每一步修改的正确性 | ||
+ | * 移除所有的测试语句(// | ||
+ | ==Composition== | ||
+ | * 使用已有的函数组合生成新的函数 | ||
+ | ===Overloading=== | ||
+ | * 两个函数重名时且**接收的参数不同**,时,同时使用会导致函数的重载(// | ||
+ | * 使用时需要确保调用的函数是希望的版本 | ||
+ | ==Boolean== | ||
+ | * 只有 ture 和 false 两种值 | ||
+ | * 可以被用作 flag | ||
+ | ===Logocal operator=== | ||
+ | * 三种: ''&&'', | ||
+ | ==Bool functions== | ||
+ | * 返回 boolean 的函数 | ||
+ | * 通常用于检测 | ||
+ | ===Main return=== | ||
+ | * '' | ||
+ | * 出问题时通常返回 '' | ||
+ | |||
+ |