第一篇:C语言 程序代码编写规范
C语言 程序代码编写规范
(初级程序员 讨论版)
前言
一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。
说明
此文挡还在完善改进中,如有不足,欢迎指正。本文档主要适用于刚刚开始接触编程的初学者。
对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。
目录 代码书写规范 2 注释书写规范 3 命名规范内容代码书写规范
1.1函数定义
每个函数的定义和说明应该从第1列开始书写。函数名(包括参数表)和函数体的花括号(“{”和“}”)应该各占一行。在函数体结尾的括号(“}”)后面应该加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。
范例1:函数的声明
void matMyFunction(int n){ …… } /* matMyFunction*/ 1.2空格的使用
使用空格分割所有演算符号和操作数。
这条规则的例外是“->”,““.”, “()”和“[]”,这些操作符和操作数之间不空格。当需要把一个程序行的内容分成几行写时,操作符号应该放在行末,而不是下一行的开头。
1.3缩进的设置
代码书写应该遵从结构化的要求,采用缩进的格式。最小缩进量为4个空格,整个文件内部应该统一,不要混用Tab键和4个空格这两种情况,因为不同的编辑器对Tab键的处理方法不同。
1.4折行的使用
每行的长度不要超过80个字符,当程序行太长时,应该分行书写。分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。
分行后的缩进应该按照程序的逻辑关系进行对齐。例如:参数表折行后,下面的行应该在参数表左括号的下方。
范例2:折行的格式dwNewShape = matAffineTransform(coords, translation,rotation);
if(((new_shape.x > left_border)&&
(new_shape.x < right_border))&&
((new_shape.y > bottom_border)&&
(new_shape.y < top_border))){
draw(new_shape);}
1.5嵌套语句(语句块)的格式
对于嵌套式的语句--即语句块(如,if、while、switch等)应该包括在花括号中。花括号的左括号应该单独占一行,并与关键字对齐。建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。
范例3:嵌套语句格式 if(value < max){
if(value!= 0)
{
func(value);
} } } else {
error(“The value is too big.”);} /* if(value < max)*/ 注释书写规范
注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。
2.1注释风格
语言中使用一组(/* … */)作为注释界定符。注释内容尽量用英语方式表述。
注释的基本样式参考范例4。
注释应该出现在要说明的内容之前,而不应该出现在其后。
除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。
范例4:几种注释样式
/*
* ************************************************* 强调注释
* ************************************************ */ /* * 块注释 */
/* 单行注释 */
int i;/*行末注释*/ 2.2何时需要注释
如果变量的名字不能完全说明其用途,应该使用注释加以说明。
如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。对于一个比较长的程序段落,应该加注释予以说明。如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。
如果程序中使用了某个复杂的算法,建议注明其出处。
如果在调试中发现某段落容易出现错误,应该注明。命名规范
3.1常量、变量命名
用#define定义的符号常量全部采用大写。
变量命名的基本原则:
可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清 楚其含义。
不要使用人名、地名和汉语拼音。
如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。
多个单词组成的变量名,每个单词的首字母应该大写。如:dwUserInputValue。
3.2函数命名
函数命名原则与变量命名原则基本相同。对于初学者,函数命名可以采用 “FunctionName”的形式。
第二篇:程序代码注释编写规范
程序代码注释编写规范
为提高控制程序的阅读性与可理解性,现制定相关代码程序代码注释编写的编写规范。一般情况下,源程序有效注释量必须在20%以上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。常规注释有以下两种方式。
单行:以“//”符号开始,任何位于该符号之后的本行文字都视为注释。
多行:以“/*”符号开始,以“*/”结束。任何介于这对符号之间的文字都视为注释。
一、说明性文件
说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/************************************************* COPYRIGHT(C), MicTiVo International.Co., Ltd.File NAME: // 文件 Author: Version: Date:
// 作者、版本及完成日期
DESCRIPTION: // 用于详细说明此程序文件完成的主要功能,与其他模块
// 或函数的接口,输出值、取值范围、含义及参数间的控
// 制、顺序、独立或依赖等关系 Others:
// 其它内容的说明
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明 1....History: // 修改历史记录列表,每条修改记录应包括修改日期、修改
// 者及修改内容简述 1.Date: Author: Modification: 2...*************************************************/
二、源文件头
源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/************************************************************ COPYRIGHT(C), MicTiVo International.Co., Ltd.FileName: Author: Version : Date: DESCRIPTION: // 模块描述,描述本文件的内容、功能、内部各部分之间的关系及
//本文件与其它文件关系等 Version:
// 版本信息
Function List:
// 主要函数及其功能 1.-------History:
// 历史修改记录
**********************************************************/
三、函数
函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/************************************************* Function:
// 函数名称
DESCRIPTION: // 函数功能、性能等的描述 Calls:
// 被本函数调用的函数清单 Called By:
// 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)Input:
// 输入参数说明,包括每个参数的作
// 用、取值说明及参数间关系。OUTPUT:
// 对输出参数的说明。Return:
// 函数返回值的说明 Others:
// 其它说明
*************************************************/
四、变量寄存器
标志变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。示例:
Unsigned char receive_floag;//接收标志;
/* 0—接收失败, 1—接收成功, 2—…….*/
/*
receive _process()
*/
//调用函数
Unsigned char receive_data[10];//数据接收存储器;
/*在 receive _bit()中对其赋值*/
//调用函数
五、控制寄存器
在对控制器控制寄存器进行操作时,需注明该寄存器功能,配置参数作用,以及配置时的注意事项等的说明。示例:(PIC单片机定时器控制)void time0_init(void){ T0CON=0X09;
//设定TMR0工作于16位定时器方式,内部时钟,不分频 INTCON=INTCON|0X20;//TMR0中断允许
INTCON=INTCON&0Xfb;//清除TMR0的中断标志
INTCON=INTCON|0xc0;//* 开总中断、开外围接口中断
TMR0H= 0xaa;
TMR0L= 0xaa;}
// 对TMR0写入初值.注意:与溢出中断写初值不同
第三篇:单纯形法C语言程序代码
长 春 工 业 大 学
课程设计程序代码
课程设计名称 运筹学课程设计 专 业 信息管理与信息系统 班 级 130506班 学 生 姓 名 于松南、张鑫蕊、赵改玲、赵海潮
指 导 教 师
王亚君、王忠吉
2015年7月3日
#include
int m;//记录约束条件方程组的个数 int n;//记录未知量的个数 float M=1000000.0;float A[100][100];
//用于记录方程组的数目和系数
float C[100];
//用于存储目标函数中各个变量的系数 float b[100];
//用于存储常约束条件中的常数 float CB[100];
//用于存储基变量的系数 float seta[100];
//存放出基与入基的变化情况 float cn[100];
//存储检验数矩阵 float x[100];int num[100];
//用于存放出基与进基变量的情况 float Z=0;
//记录目标函数值
void shuru();void print();int mincz();int find_line(int a);void exchange(int a,int b);int main(){
int i,j=0;
int p,q,temp;//q:换入,p:换出
shuru();
printf(“n------------n”);
printf(“ tCBtXBtbt”);
for(i=0;i printf(“ X(%d)t”,i+1); for(i=0;i x[i]=0; printf(“n”); while(1){ q=mincz(); if(q==-1){ print(); printf(“n所得解已经是最优解!n”); printf(“n最优解为:n”); for(j=0;j temp=num[j]-1; x[temp]=b[j]; } for(i=0;i printf(“x%d=%.2f ”,i+1,x[i]); Z=Z+x[i]*C[i]; } printf(“Z=%.2f”,Z); break; } print(); p=find_line(q); printf(“np=%d,q=%d”,p,q); if(q==-1)break; exchange(p,q); } return 0;} int mincz(){ int i,k=0; int flag=0;//检验数标记 float min=0; for(i=0;i if(cn[i]>=0) flag=1; else { flag=0; break; } if(flag==1) return-1; //进行到此处,说明存在<0的检验数 //找到最小的检验数,作为换入变量 for(i=0;i if(min>cn[i]){ min=cn[i]; k=i; } } return k;} int find_line(int a){ int i,k,j; int flag=0; float min; k=a; for(i=0;i if(A[i][k]<=0) flag=1; else { flag=0; break; } if(flag==1){ printf(“n该线性规划无最优解!n”); return-1; } for(i=0;i if(A[i][k]>0) seta[i]=b[i]/A[i][k]; else seta[i]=M; } min=M; for(i=0;i if(min>=seta[i]){ min=seta[i]; j=i; } } num[j]=k+1; CB[j]=C[k]; return j;} void exchange(int p,int q){ int i,j,c,l; float temp1,temp2,temp3; c=p;//行号,换出 l=q;//列号,换入 temp1=A[c][l];//A[c][l]主元 b[c]=b[c]/temp1; for(j=0;j A[c][j]=A[c][j]/temp1;//主元化为1 for(i=0;i if(i!=c) if(A[i][l]!=0){ temp2=A[i][l]; b[i]=b[i]-b[c]*temp2; //主元所在列,其余元素化为0 for(j=0;j A[i][j]=A[i][j]-A[c][j]*temp2; } } temp3=cn[l]; for(i=0;i cn[i]=cn[i]-A[c][i]*temp3;} void print(){ int i,j=0; printf(“n------------n”); for(i=0;i printf(“%8.2ftX(%d)%8.2f ”,CB[i],num[i],b[i]); for(j=0;j printf(“%8.2f ”,A[i][j]); printf(“n”); } printf(“n------------n”); printf(“ttt”); for(i=0;i printf(“ %8.2f”,cn[i]); printf(“n------------n”);} void shuru(){ int i,j;//循环变量 int k; printf(“请输入线性规划问题的约束条件个数M:”); scanf(“%d”,&m); printf(“请输入线性规划问题的决策变量个数N:”); scanf(“%d”,&n); printf(“n请输入方程组的系数矩阵A(%d行%d列):n”,m,n); for(i=0;i for(j=0;j scanf(“%f”,&A[i][j]); printf(“n请输入初始基变量的数字代码矩阵:n”); for(i=0;i scanf(“%d”,&num[i]); printf(“n请输入方程组右边的值矩阵b:n”); for(i=0;i scanf(“%f”,&b[i]); printf(“n请输入目标函数各个变量的系数所构成的系数阵C:n”); for(i=0;i scanf(“%f”,&C[i]); for(i=0;i cn[i]=-C[i]; for(i=0;i k=num[i]-1; CB[i]=C[k]; } } 汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解)让我们先看看代码吧 #include printf(“%d->%dn”,a,c);else {t=c;c=b;b=t;hj(a,b,c,i-1);printf(“%d->%dn”,a,b);t=a;a=c;c=t;t=b;b=c;c=t;hj(a,b,c,i-1);return 0;} } main(){ int a,b,c,i;a=1;b=2;c=3;printf(“请输入汉诺塔的盘数”);scanf(“%d”,&i);hj(a,b,c,i);return 0;} 以上是汉诺塔的代码,该程序主要是运用了递归的思想,比如数学中的f(x)=f(x-1)+f(x-2),在本程序中为:int hj(int a,int b, int c,int i){ int t;if(i==1) printf(“%d->%dn”,a,c);else {t=c;c=b;b=t;hj(a,b,c,i-1);也就是说,我们在这个函数中再次调用这个函数,相当于一个循环,而在再次调用的过程中,i的值变成i-1,就类似于f(x-1),这样层层调用,最终就变成当i=1的时候的值,然后通过运算,计算出想要得到的值。汉诺塔的数值分析: 我们可以发现,当只有一个盘的时候,我们只需要做1->3(就是把第一个柱子上的最顶端的盘移动到第三根柱子,以下不再解释)当有两个盘的时候,是1->2 1->3 2->3 三个盘子是:1->3 1->2 3->2 1->3 2->1 2->3 分析一下可以得出以下结论: 初始值a=1 b=2 c=3 一个盘子就是a->c 两个盘子与一个盘子的关系是: 第一步:b与c交换值,然后打印a->c 第二步:打印a->b 第三步:a与c交换值,b与c交换值,打印a->c 进一步分析,便可以得出以下结论 只要盘子数量为i(i大于1),那么它就有三部分 第一部分,b与c交换值,然后运行i-1 第二部分,打印a->b 第三部分,a与c交换值,b与c交换值,然后运行i-1 程序表示便是: if(i==1) printf(“%d->%dn”,a,c);else {t=c;c=b;(交换值) b=t;hj(a,b,c,i-1);printf(“%d->%dn”,a,b);t=a;a=c;c=t;(a c交换) t=b;b=c;c=t;(b c交换) hj(a,b,c,i-1);不明加QQ765233918(请写清备注) 1->3 项目报告撰写规范 1页边距设置 项目报告文页边距按以下标准设置:上边距(天头)为:30 mm;下边距(地脚)25mm;左边距和右边距为:25mm;装订线:10mm;页眉:16mm;页脚:15mm。2.页眉 页眉从摘要页开始到报告最后一页,均需设置。页眉内容:左对齐为“成都凯天电子股份有限公司”,右对齐为各章章名;打印字号为5号宋体,页眉之下有一条下划线。3.页脚 从报告主体部开始,用阿拉伯数字连续编页,页码位于每页页脚的中部。4.字体与间距 项目报告字体为小四号宋体,字间距设置为标准字间距,行间距设置为固定值20磅。5.封面设置 成都凯天电子股份有限公司(小二号黑体,居中)报告题名(二号黑体,居中) 报告提交(完成)时间(四号黑体,居中)6.正文设置 6.1报告各章应有序号,序号用阿拉伯数字编码,层次格式为: 1××××(三号黑体,居中) ××××××××××××××××××××××(内容用小四号宋体)。1.1××××(小三号黑体,居左) ×××××××××××××××××××××(内容用小四号宋体)。1.1.1××××(四号黑体,居左) ××××××××××××××××××××(内容用小四号宋体)。 ①××××(用与内容同样大小的宋体) 1)××××(用与内容同样大小的宋体) a.××××(用与内容同样大小的宋体) 6.2报告中的图、表、公式、算式等,一律用阿拉伯数字分别依序连续编排序号。序号分章依序编码,其标注形式应便于互相区别,可分别为:图2.1、表3.2,式(3.5)等 每一图应有简短确切的题名,连同图号置于图下。中文宋体五号。6.3曲线图的纵横坐标必须标注“量、标准规定符号、单位”。此三者只有在不必要标明(如无量钢等)的情况下方可省略。坐标上标注的量的符号和缩略词必须与正文中一致。6.4照片图要求主题和主要显示部分的轮廓鲜明,便于制版,如用放大缩小的复制品,必须清晰,反差适中。照片上应该有表示目的物尺寸的标度。第四篇:汉诺塔c语言程序代码
第五篇:报告编写规范