算法第一章作业

一、我选择的是腾讯公司的编码规范,链接 如下:

https://blog.csdn.net/HuYingJie_1995/article/details/88757293

编码规则:

4.1规则:程序块要采用缩进风格编写,缩进的空格数为4个。说明: 
由开发工具自动生成的代码可能不一致,但如果开发工具可以配置,则应该统一配置缩进为4个空格 
4.2规则:缩进或者对齐只能使用空格键,不可使用TAB键。 
使用TAB键需要设置 
4.3规则:相对独立的程序块之间、变量说明之后必须加空行。说明: 
以下情况应该是用空行分开: 
1)函数之间应该用空行分开; 
2)变量声明应尽可能靠近第一次使用处,避免一次性声明一组没有马上使用的变量; 
3)用空行将代码按照逻辑片断划分; 
4)每个类声明之后应该加入空格同其他代码分开。 
4.3规则:相对独立的程序块之间、变量说明之后必须加空行。说明: 
以下情况应该是用空行分开: 
1)函数之间应该用空行分开; 
2)变量声明应尽可能靠近第一次使用处,避免一次性声明一组没有马上使用的变量; 
3)用空行将代码按照逻辑片断划分; 
4)每个类声明之后应该加入空格同其他代码分开示例: 
4.4规则:较长的语句(>80字符)要分成多行书写。说明: 
以下情况应分多行书写: 
1)长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 
2)若函数或过程中的参数较长,则要进行适当的划分。 
3)循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首 
4.5规则:不允许把多个短语句写在一行中 
一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。 
4.6规则:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。 
示例: 
4.7规则:代码行之内应该留有适当的空格说明: 
采用这种松散方式编写代码的目的是使代码更加清晰。代码行内应该适当的使用空 
格,具体如下: 
1)关键字之后要留空格。象const、virtual、inline、case等关键字之后至少要留一个空格,否则无法辨析关键字 象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。   
2)函数名之后不要留空格,紧跟左括号’(’,以与关键字区别。3)‘(’向后紧跟,‘ )’、‘,’、‘;’向前紧跟,紧跟处不留空格 
4)‘,’之后要留空格, 如Function(x,y,z)。如果‘;’不是一行的结束符号,后也要留空格, 
5)值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<、“^”等二元操作符的前后应当加空格。 
6)一元操作符如“!”、“~”、“++”、“–”、“&”(地址运算符)等前后不加空格。 
7)象“[]”、“.”、“->” 这类操作符前后不加空格。 
4.8建议:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。 
5注释 
5.1规则:源文件头部应进行注释,列出:生成日期、作者、模块目的/功能等 
5.2规则:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值等。示例: 
下面这段函数的注释比较标准,可以不局限于此格式,但上述信息要包含在内。 
5.3规则:注释应该和代码同时更新,不再有用的注释要删除。5.4规则:注释的内容要清楚、明了,不能有二义性。说明:错误的注释不但无益反而有害。 
5.5建议:避免在注释中使用非常用的缩写或者术语。 
5.6建议:注释的主要目的应该是解释为什么这么做,而不是正在做什么。如果从上下文不容易看出作者的目的,说明程序的可读性本身存在比较大的问题,应考虑对其重构。5.7建议:避免非必要的注释。 
5.8规则:注释的版式 
说明:注释也需要与代码一样整齐排版 
1)注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。 
2)注释与所描述内容进行同样的缩排。 
3)将注释与其上面的代码用空行隔开。 
4)变量、常量、宏的注释应放在其上方相邻位置或右方。示例:如下例子不符合规范。 
5.9规则:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。 
5.10规则:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释可放在此域的右方。 
5.11建议:对重要变量的定义需编写注释,特别是全局变量,更应有较详细的注释,包括对其功能、取值范围、以及存取时注意事项等的说明。 
5.12建议:分支语句(条件分支、循环语句等)需编写注释。说明: 
这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。 
5.13规则:注释不宜过多,也不能太少,源程序中有效注释量控制在20%~30%之间。 说明: 
注释是对代码的“提示”,而不是文档,不可喧宾夺主,注释太多会让人眼花缭乱。 
6.标识符命名 
6.1规则:命名尽量使用英文单词,力求简单清楚,避免使用引起误解的词汇和模糊的缩写,使人产生误解。 
5.12建议:分支语句(条件分支、循环语句等)需编写注释。说明: 
这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。 
5.13规则:注释不宜过多,也不能太少,源程序中有效注释量控制在20%~30%之间。 
说明:注释是对代码的“提示”,而不是文档,不可喧宾夺主,注释太多会让人眼花缭乱 
6标识符命名 
6.1规则:命名尽量使用英文单词,力求简单清楚,避免使用引起误解的词汇和模糊的缩写,使人产生误解。 
6.2规则:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一。说明 
1)如在UNIX系统,可采用全小写加下划线的风格或大小写混排的方式,但不能使用大小写与下划线混排的方式。 
2)用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。 
6.3建议:变量的命名可参考“匈牙利”标记法(Hungarian Notation) 
6.4规则:常量、宏和模板名采用全大写的方式,每个单词间用下划线分隔。 
6.5建议:枚举类型enum 常量应以大写字母开头或全部大写。 
6.6建议:命名中若使用了特殊约定或缩写,则要有注释说明。 
6.7规则:自己特有的命名风格,要自始至终保持一致,不可来回变化。 
6.8规则:对于变量命名,禁止取单个字符(如i、j、k…),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。 
2)避免使用看上去相似的名称,如“l”、“1”和“I”看上去非常相似。 
6.9建议:函数名以大写字母开头,采用谓-宾结构(动-名),且应反映函数执行什么操作以及返回什么内容。说明: 
函数在表达式中使用,通常用于if子句,因此它们的意图应一目了然 示例: 
不好的命名:if(CheckSize(x)) 
没有帮助作用,因为它没有告诉我们 CheckSize是在出错时返回true 
还是在不出错时返回true 
好的命名:if(ValidSize(x)) 
则使函数的意图很明确 
6.10建议:类、结构、联合、枚举的命名须分别以C、S、U、E开头,其他部分遵从一般变量命名规范。 
7.可读性 
7.1规则:用括号明确表达式的操作顺序,避免使用默认优先级。 
7.2建议:不要编写太复杂 、多用途的复合表达式。  
7.3规则:涉及物理状态或者含有物理意义的常量,避免直接使用数字,必须用有意义的枚举或常量来代替。 
7.4规则:禁止使用难以理解,容易产生歧义的语句。 
8.变量、结构 
8.1建议:尽量少使用全局变量,尽量去掉没必要的公共变量。说明: 
公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。 
8.2规则:变量,特别是指针变量,被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。 
说明:在C/C++中引用未经赋值的指针,经常会引起系统崩溃。 
8.3建议:仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。说明: 
合理排列结构中元素顺序,可节省空间并增加可理解性。 
8.4建议:留心具体语言及编译器处理不同数据类型的原则及有关细节。 
8.5建议:尽量减少没有必要的数据类型默认转换与强制转换。 
8.6规则:当声明用于分布式环境或不同CPU间通信环境的数据结构时,必须考虑机器的字节顺序、使用的位域及字节对齐等问题。 
9.函数、过程 
9.1规则:调用函数要检查所有可能的返回情况,不应该的返回情况要用ASSERT来确认。 
9.2建议:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。说明: 
编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。 
9.3建议:调用公共接口函数时,调用者有保障调用参数符合要求的义务。作为一种防御性的编程风格,被调用函数也应该对传入参数做必要的安全检查。 
9.4建议:函数的规模尽量限制在100行以内。 
说明:不包括注释和空格行。 
9.5建议:一个函数仅完成一件功能。说明: 
多功能集于一身的函数,很可能使函数的理解、测试、维护等变得困难。 
9.6建议:不能用ASSERT代替必要的安全处理代码,确保发布版的程序也能够合理地处理异常情况。 
函数的每种出错返回值的意义要清晰、明了、准确,防止使用者误用、理解错误或忽视错误返回码。 
10.C++专用规范 
10.1规则:在高警告级别下干净地编译。 
使用编译器的最高警告级别。要求干净的(没有警告的)构建(build)并理解所有的警告。通过修改代码来消除警告,而不是通过降低警告级别来消除。对于明确理解其含义,确信不会造成任何问题的警告,则可以局部关闭。 
10.2规则:确保资源为对象所占有,使用显式的RAII和智能指针。 
C++在语言层面强制的构造/析构恰好与资源获取/释放这对函数相对应,在处理需要调用成对的获取/释放函数的资源时,应将该资源封装在对象中,并在对象的析构函数中释放该资源,这样就保证了获取/释放的匹配。 
最好用智能指针来保存动态分配的资源,而不要用原始指针。 
10.3规则:主动使用const,避免使用宏。 

二、数学之美的部分

读完这本书有一点强烈的感受:工具一定要先进。数学是强大的工具,计算机也是。这两种工具结合在一起,造就了强大的google、百度、亚马逊、阿里、京东、腾迅等公司。他们不是百年老店,但他们掌握了先进的工具。然后掌握了先进的工具是不够的,还得掌握算法的设计与分析。在我看来,一个程序的核心在于算法。不如打开一个软件和运行一个软件的速度在计算机硬件性能相同情况下,软件的算法起到了近乎决定性的作用,所有的计算机软件和硬件的编程都是需要算法的。算法是计算机乃至自然界的核心,如果知道人脑的算法,就可以制造出人工智能的软件。

至于期末要设计的软件,我想要设计一个记账的软件,它可以和微信支付宝绑定,在消费之后可以腾出界面让用户备注,设置消费的类别,用户也可以手动添加现金的收支。

 

posted @ 2019-09-02 12:46  陈明欣  阅读(181)  评论(0编辑  收藏  举报