1. 伪码是什么
伪码(Pseudocode)是一种算法描述语言。
使用伪码的目的是使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java等)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。
介于自然语言与编程语言之间。以编程语言的书写形式指明算法职能。
使用伪代码, 不用拘泥于具体实现。相比程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。
它是半角式化、不标准的语言。可以将整个算法运行过程的结构用接近自然语言的形式(可以使用任何一种你熟悉的文字,关键是把程序的意思表达出来)描述出来。
2. c语言伪码书写的规范是什么
伪码书写可以参考C代码规范。
1. 1.1符号命名规则 1.1.1符号名包括模块名、常量名、标号名、子程序名等。这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能够见名知义,有助于对程序功能的理解。
命名采用匈牙利命名法。规则如下: (1)所有宏定义、枚举常数和const变量,用大写字母命名。
在复合词里用下划线隔开每个词。 (2)复合词中每个单词的第一个字母大写。
除了规则5.1.1.1以外,避免使用下划线。 (3)类、类型定义和枚举型名的第一个字母大写。
(4)函数名是复合词的,第一个词采用全部小写,随后每个单词采用第一个字母大写,其它字母小写方式;如果是单个词的,采用全部小写方式。 (5)循环变量可采用i, j, k等,不受上述规则限制。
(6) 类的成员变量应采用m_开头。 (7) 全局变量词头为g_ 。
(8) 临时变量词头为tmp_ 。 (9) 对结构体内的变量命名, 遵循变量的具体含义命名原则 (10)用小写字母的前缀表示变量的类型,前缀的下一个字母用大写。
表 1 词头 类型 词头 类型 ch char l long i integer u unsigned b boolean p pointer f float lp long pointer d double s string st structure sz ASCII string by byte n short int H handle x,y 分别为x,y坐标 dw DWORD fn function 表 2 词头 变量名 词头 变量名 task task sig signal sb binary semaphores wd watchdog sm mutual exclusion tm timer sc counting semaphores msg message pipe pipe 例: #define ARRAY_SIZE 24 /*规则5.1.1.1*/ int g_iFlag; class MyClass /*规则5.1.1.3*/ { }; void someFunc( ) /*规则5.1.1.2和5.1.1.4*/ { int nArray[ARRAY_SIZE]; unsigned char uchByte; char szName[ ]; char *pszName = szName; } (11)有些词头(如p和u)可以和其它词头组合。 例:WDOG_ID wdId; WDOG_ID g_wdId; /*全局watchdog Id,故以g_开头*/ 1.1.2名字的长度一般不要过长或过短。
过长的名字会增加工作量,使程序逻辑流程变得模糊;过短的名字无法表达符号的实际意义。约定长度范围:3-31; 1.2数据和函数说明 1.2.1数据说明次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。
说明的先后次序应固定,应按逻辑功能排序,逻辑功能块内建议采用下列顺序:整型说明、实型说明、字符说明、逻辑量说明。 1.2.2如果设计了一个复杂的数据结构,应当通过注释对其变量的含义、用途进行说明。
1.2.3在函数的声明中使用异常声明。 如:void f() throw(toobig, toosmall, divzero); 在声明一个函数时,将它所抛出的异常列出,便于函数的使用者了解可能会发生哪些异常。
1.3 程序注释 1.3.1程序注释是程序员与日后的程序读者之间通信的重要手段之一,注释分为文件注释、函数注释和功能注释。 1.3.2正规程序的注释应注意: ——注释行的数量占到整个源程序的1/3到1/2。
1.3.3文件注释位于整个源程序的最开始部分,注释后空两行开始程序正文。它包括: ——程序标题。
——目的、功能说明。 ——文件作者、最后修改日期等说明。
例: ./******************************************************************** (空一行) 标题: Demo.c 功能: 测试VxWorks的各种系统调用. 说明: 该程序测试各种VxWorks的系统调用函数。包括任务(taks)的创建、挂起及任务间通过信号灯实现同步,通过消息队列 进行通讯。
程序创建了两个任务:一个高优先级的任务和一个低优先级的任务。两个任务间通过一个二进制的信号灯进行同步,通过消息队列进行通讯。
当前版本: x.x 修改信息: 2000.06.05 John, Initial Version 2000.07.05 Tom, Bug xxxx fixed **************************************************************/ (空2行,开始程序正文) 1.3.4 函数注释通常置于每函数或过程的开头部分,它应当给出函数或过程的整体说明对于理解程序本身具有引导作用。一般包括如下条目: ——模块标题。
——有关本模块功能和目的的说明。 ——调用格式 ——接口说明:包括输入、输出、返回值、异常。
——算法。如果模块中采用了一些复杂的算法。
例: file://(/注释开头应和上一函数空两行) (注释开头与上一函数最后一行间隔两行) /******************************************************************** 标题:assignmentComplete 功能:BSC=>MSC消息生成函数,生成assignment_complete指配完成消息(BSMAP消息) . 格式: int assignmentComplete(int iCellId, int iServiceChannnelNum, char *pszMSGData) throw(exception1, exception2) 输入: int iCellId: MS所在的小区识别 iCellId取值:0x00-——0xff int iServiceChannnelNum:MS所占的业务信道号码 输出: char * pszMSGData:指配完成消息数据 返回值: 0x00正常 异常:exception1异常情况1, exception2异常情况2 ********************************************************************/ ( 注释后直接开始程序正文,不空行。) 1.3.5功能性注释嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。
而不要解释下面怎么做,因为解释怎么做常常与程序本身是重复的。 例: /*把 amount 加到 total中*/ total = amount + total; 。