第一篇:C語言 程序代碼編寫規(guī)范
C語言 程序代碼編寫規(guī)范
(初級(jí)程序員 討論版)
前言
一個(gè)好的程序編寫規(guī)范是編寫高質(zhì)量程序的保證。清晰、規(guī)范的源程序不僅僅是方便閱讀,更重要的是能夠便于檢查錯(cuò)誤,提高調(diào)試效率,從而最終保證軟件的質(zhì)量和可維護(hù)性。
說明
此文擋還在完善改進(jìn)中,如有不足,歡迎指正。本文檔主要適用于剛剛開始接觸編程的初學(xué)者。
對(duì)于具有一定工程項(xiàng)目開發(fā)經(jīng)驗(yàn)的程序員,建議學(xué)習(xí)C語言程序代碼編寫規(guī)范—高級(jí)版。
目錄 代碼書寫規(guī)范 2 注釋書寫規(guī)范 3 命名規(guī)范內(nèi)容代碼書寫規(guī)范
1.1函數(shù)定義
每個(gè)函數(shù)的定義和說明應(yīng)該從第1列開始書寫。函數(shù)名(包括參數(shù)表)和函數(shù)體的花括號(hào)(“{”和“}”)應(yīng)該各占一行。在函數(shù)體結(jié)尾的括號(hào)(“}”)后面應(yīng)該加上注釋,注釋中應(yīng)該包括函數(shù)名,這樣比較方便進(jìn)行括號(hào)配對(duì)檢查,也可以清晰地看出來函數(shù)是否結(jié)束。
范例1:函數(shù)的聲明
void matMyFunction(int n){ …… } /* matMyFunction*/ 1.2空格的使用
使用空格分割所有演算符號(hào)和操作數(shù)。
這條規(guī)則的例外是“->”,““.”, “()”和“[]”,這些操作符和操作數(shù)之間不空格。當(dāng)需要把一個(gè)程序行的內(nèi)容分成幾行寫時(shí),操作符號(hào)應(yīng)該放在行末,而不是下一行的開頭。
1.3縮進(jìn)的設(shè)置
代碼書寫應(yīng)該遵從結(jié)構(gòu)化的要求,采用縮進(jìn)的格式。最小縮進(jìn)量為4個(gè)空格,整個(gè)文件內(nèi)部應(yīng)該統(tǒng)一,不要混用Tab鍵和4個(gè)空格這兩種情況,因?yàn)椴煌木庉嬈鲗?duì)Tab鍵的處理方法不同。
1.4折行的使用
每行的長度不要超過80個(gè)字符,當(dāng)程序行太長時(shí),應(yīng)該分行書寫。分行時(shí)應(yīng)該按照自然的邏輯關(guān)系進(jìn)行,例如:不要把一個(gè)簡單的邏輯判斷寫在兩行上。
分行后的縮進(jìn)應(yīng)該按照程序的邏輯關(guān)系進(jìn)行對(duì)齊。例如:參數(shù)表折行后,下面的行應(yīng)該在參數(shù)表左括號(hào)的下方。
范例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嵌套語句(語句塊)的格式
對(duì)于嵌套式的語句--即語句塊(如,if、while、switch等)應(yīng)該包括在花括號(hào)中?;ɡㄌ?hào)的左括號(hào)應(yīng)該單獨(dú)占一行,并與關(guān)鍵字對(duì)齊。建議即使語句塊中只有一條語句,也應(yīng)該使用花括號(hào)包括,這樣可以使程序結(jié)構(gòu)更清晰,也可以避免出錯(cuò)。建議對(duì)比較長的塊,在末尾的花括號(hào)后加上注釋以表明該語言塊結(jié)束。
范例3:嵌套語句格式 if(value < max){
if(value!= 0)
{
func(value);
} } } else {
error(“The value is too big.”);} /* if(value < max)*/ 注釋書寫規(guī)范
注釋必須做到清晰,準(zhǔn)確地描述內(nèi)容。對(duì)于程序中復(fù)雜的部分必須有注釋加以說明。注釋量要適中,過多或過少都易導(dǎo)致閱讀困難。
2.1注釋風(fēng)格
語言中使用一組(/* … */)作為注釋界定符。注釋內(nèi)容盡量用英語方式表述。
注釋的基本樣式參考范例4。
注釋應(yīng)該出現(xiàn)在要說明的內(nèi)容之前,而不應(yīng)該出現(xiàn)在其后。
除了說明變量的用途和語言塊末尾使用的注釋,盡量不使用行末的注釋方式。
范例4:幾種注釋樣式
/*
* ************************************************* 強(qiáng)調(diào)注釋
* ************************************************ */ /* * 塊注釋 */
/* 單行注釋 */
int i;/*行末注釋*/ 2.2何時(shí)需要注釋
如果變量的名字不能完全說明其用途,應(yīng)該使用注釋加以說明。
如果為了提高性能而使某些代碼變得難懂,應(yīng)該使用注釋加以說明。對(duì)于一個(gè)比較長的程序段落,應(yīng)該加注釋予以說明。如果設(shè)計(jì)文檔中有流程圖,則程序中對(duì)應(yīng)的位置應(yīng)該加注釋予以說明。
如果程序中使用了某個(gè)復(fù)雜的算法,建議注明其出處。
如果在調(diào)試中發(fā)現(xiàn)某段落容易出現(xiàn)錯(cuò)誤,應(yīng)該注明。命名規(guī)范
3.1常量、變量命名
用#define定義的符號(hào)常量全部采用大寫。
變量命名的基本原則:
可以選擇有意義的英文(小寫字母)組成變量名,使人看到該變量就能大致清 楚其含義。
不要使用人名、地名和漢語拼音。
如果使用縮寫,應(yīng)該使用那些約定俗成的,而不是自己編造的。
多個(gè)單詞組成的變量名,每個(gè)單詞的首字母應(yīng)該大寫。如:dwUserInputValue。
3.2函數(shù)命名
函數(shù)命名原則與變量命名原則基本相同。對(duì)于初學(xué)者,函數(shù)命名可以采用 “FunctionName”的形式。
第二篇:程序代碼注釋編寫規(guī)范
程序代碼注釋編寫規(guī)范
為提高控制程序的閱讀性與可理解性,現(xiàn)制定相關(guān)代碼程序代碼注釋編寫的編寫規(guī)范。一般情況下,源程序有效注釋量必須在20%以上,注釋的原則是有助于對(duì)程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語言必須準(zhǔn)確、易懂、簡潔。常規(guī)注釋有以下兩種方式。
單行:以“//”符號(hào)開始,任何位于該符號(hào)之后的本行文字都視為注釋。
多行:以“/*”符號(hào)開始,以“*/”結(jié)束。任何介于這對(duì)符號(hào)之間的文字都視為注釋。
一、說明性文件
說明性文件(如頭文件.h文件、.inc文件、.def文件、編譯說明文件.cfg等)頭部應(yīng)進(jìn)行注釋,注釋必須列出:版權(quán)說明、版本號(hào)、生成日期、作者、內(nèi)容、功能、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)功能簡要說明。
示例:下面這段頭文件的頭注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。
/************************************************* COPYRIGHT(C), MicTiVo International.Co., Ltd.File NAME: // 文件 Author: Version: Date:
// 作者、版本及完成日期
DESCRIPTION: // 用于詳細(xì)說明此程序文件完成的主要功能,與其他模塊
// 或函數(shù)的接口,輸出值、取值范圍、含義及參數(shù)間的控
// 制、順序、獨(dú)立或依賴等關(guān)系 Others:
// 其它內(nèi)容的說明
Function List: // 主要函數(shù)列表,每條記錄應(yīng)包括函數(shù)名及功能簡要說明 1....History: // 修改歷史記錄列表,每條修改記錄應(yīng)包括修改日期、修改
// 者及修改內(nèi)容簡述 1.Date: Author: Modification: 2...*************************************************/
二、源文件頭
源文件頭部應(yīng)進(jìn)行注釋,列出:版權(quán)說明、版本號(hào)、生成日期、作者、模塊目的/功能、主要函數(shù)及其功能、修改日志等。
示例:下面這段源文件的頭注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。
/************************************************************ COPYRIGHT(C), MicTiVo International.Co., Ltd.FileName: Author: Version : Date: DESCRIPTION: // 模塊描述,描述本文件的內(nèi)容、功能、內(nèi)部各部分之間的關(guān)系及
//本文件與其它文件關(guān)系等 Version:
// 版本信息
Function List:
// 主要函數(shù)及其功能 1.-------History:
// 歷史修改記錄
**********************************************************/
三、函數(shù)
函數(shù)頭部應(yīng)進(jìn)行注釋,列出:函數(shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、返回值、調(diào)用關(guān)系(函數(shù)、表)等。
示例:下面這段函數(shù)的注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。
/************************************************* Function:
// 函數(shù)名稱
DESCRIPTION: // 函數(shù)功能、性能等的描述 Calls:
// 被本函數(shù)調(diào)用的函數(shù)清單 Called By:
// 調(diào)用本函數(shù)的函數(shù)清單
Table Accessed: // 被訪問的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序)Table Updated: // 被修改的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序)Input:
// 輸入?yún)?shù)說明,包括每個(gè)參數(shù)的作
// 用、取值說明及參數(shù)間關(guān)系。OUTPUT:
// 對(duì)輸出參數(shù)的說明。Return:
// 函數(shù)返回值的說明 Others:
// 其它說明
*************************************************/
四、變量寄存器
標(biāo)志變量要有較詳細(xì)的注釋,包括對(duì)其功能、取值范圍、哪些函數(shù)或過程存取它以及存取時(shí)注意事項(xiàng)等的說明。示例:
Unsigned char receive_floag;//接收標(biāo)志;
/* 0—接收失敗, 1—接收成功, 2—…….*/
/*
receive _process()
*/
//調(diào)用函數(shù)
Unsigned char receive_data[10];//數(shù)據(jù)接收存儲(chǔ)器;
/*在 receive _bit()中對(duì)其賦值*/
//調(diào)用函數(shù)
五、控制寄存器
在對(duì)控制器控制寄存器進(jìn)行操作時(shí),需注明該寄存器功能,配置參數(shù)作用,以及配置時(shí)的注意事項(xiàng)等的說明。示例:(PIC單片機(jī)定時(shí)器控制)void time0_init(void){ T0CON=0X09;
//設(shè)定TMR0工作于16位定時(shí)器方式,內(nèi)部時(shí)鐘,不分頻 INTCON=INTCON|0X20;//TMR0中斷允許
INTCON=INTCON&0Xfb;//清除TMR0的中斷標(biāo)志
INTCON=INTCON|0xc0;//* 開總中斷、開外圍接口中斷
TMR0H= 0xaa;
TMR0L= 0xaa;}
// 對(duì)TMR0寫入初值.注意:與溢出中斷寫初值不同
第三篇:單純形法C語言程序代碼
長 春 工 業(yè) 大 學(xué)
課程設(shè)計(jì)程序代碼
課程設(shè)計(jì)名稱 運(yùn)籌學(xué)課程設(shè)計(jì) 專 業(yè) 信息管理與信息系統(tǒng) 班 級(jí) 130506班 學(xué) 生 姓 名 于松南、張?chǎng)稳?、趙改玲、趙海潮
指 導(dǎo) 教 師
王亞君、王忠吉
2015年7月3日
#include
int m;//記錄約束條件方程組的個(gè)數(shù) int n;//記錄未知量的個(gè)數(shù) float M=1000000.0;float A[100][100];
//用于記錄方程組的數(shù)目和系數(shù)
float C[100];
//用于存儲(chǔ)目標(biāo)函數(shù)中各個(gè)變量的系數(shù) float b[100];
//用于存儲(chǔ)常約束條件中的常數(shù) float CB[100];
//用于存儲(chǔ)基變量的系數(shù) float seta[100];
//存放出基與入基的變化情況 float cn[100];
//存儲(chǔ)檢驗(yàn)數(shù)矩陣 float x[100];int num[100];
//用于存放出基與進(jìn)基變量的情況 float Z=0;
//記錄目標(biāo)函數(shù)值
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所得解已經(jīng)是最優(yōu)解!n”); printf(“n最優(yōu)解為: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;//檢驗(yàn)數(shù)標(biāo)記 float min=0; for(i=0;i if(cn[i]>=0) flag=1; else { flag=0; break; } if(flag==1) return-1; //進(jìn)行到此處,說明存在<0的檢驗(yàn)數(shù) //找到最小的檢驗(yàn)數(shù),作為換入變量 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該線性規(guī)劃無最優(yōu)解!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;//行號(hào),換出 l=q;//列號(hào),換入 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;//循環(huán)變量 int k; printf(“請(qǐng)輸入線性規(guī)劃問題的約束條件個(gè)數(shù)M:”); scanf(“%d”,&m); printf(“請(qǐng)輸入線性規(guī)劃問題的決策變量個(gè)數(shù)N:”); scanf(“%d”,&n); printf(“n請(qǐng)輸入方程組的系數(shù)矩陣A(%d行%d列):n”,m,n); for(i=0;i for(j=0;j scanf(“%f”,&A[i][j]); printf(“n請(qǐng)輸入初始基變量的數(shù)字代碼矩陣:n”); for(i=0;i scanf(“%d”,&num[i]); printf(“n請(qǐng)輸入方程組右邊的值矩陣b:n”); for(i=0;i scanf(“%f”,&b[i]); printf(“n請(qǐng)輸入目標(biāo)函數(shù)各個(gè)變量的系數(shù)所構(gòu)成的系數(shù)陣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驗(yàn)證)(附講解)讓我們先看看代碼吧 #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(“請(qǐng)輸入漢諾塔的盤數(shù)”);scanf(“%d”,&i);hj(a,b,c,i);return 0;} 以上是漢諾塔的代碼,該程序主要是運(yùn)用了遞歸的思想,比如數(shù)學(xué)中的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);也就是說,我們?cè)谶@個(gè)函數(shù)中再次調(diào)用這個(gè)函數(shù),相當(dāng)于一個(gè)循環(huán),而在再次調(diào)用的過程中,i的值變成i-1,就類似于f(x-1),這樣層層調(diào)用,最終就變成當(dāng)i=1的時(shí)候的值,然后通過運(yùn)算,計(jì)算出想要得到的值。漢諾塔的數(shù)值分析: 我們可以發(fā)現(xiàn),當(dāng)只有一個(gè)盤的時(shí)候,我們只需要做1->3(就是把第一個(gè)柱子上的最頂端的盤移動(dòng)到第三根柱子,以下不再解釋)當(dāng)有兩個(gè)盤的時(shí)候,是1->2 1->3 2->3 三個(gè)盤子是:1->3 1->2 3->2 1->3 2->1 2->3 分析一下可以得出以下結(jié)論: 初始值a=1 b=2 c=3 一個(gè)盤子就是a->c 兩個(gè)盤子與一個(gè)盤子的關(guān)系是: 第一步:b與c交換值,然后打印a->c 第二步:打印a->b 第三步:a與c交換值,b與c交換值,打印a->c 進(jìn)一步分析,便可以得出以下結(jié)論 只要盤子數(shù)量為i(i大于1),那么它就有三部分 第一部分,b與c交換值,然后運(yùn)行i-1 第二部分,打印a->b 第三部分,a與c交換值,b與c交換值,然后運(yùn)行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(請(qǐng)寫清備注) 1->3 項(xiàng)目報(bào)告撰寫規(guī)范 1頁邊距設(shè)置 項(xiàng)目報(bào)告文頁邊距按以下標(biāo)準(zhǔn)設(shè)置:上邊距(天頭)為:30 mm;下邊距(地腳)25mm;左邊距和右邊距為:25mm;裝訂線:10mm;頁眉:16mm;頁腳:15mm。2.頁眉 頁眉從摘要頁開始到報(bào)告最后一頁,均需設(shè)置。頁眉內(nèi)容:左對(duì)齊為“成都凱天電子股份有限公司”,右對(duì)齊為各章章名;打印字號(hào)為5號(hào)宋體,頁眉之下有一條下劃線。3.頁腳 從報(bào)告主體部開始,用阿拉伯?dāng)?shù)字連續(xù)編頁,頁碼位于每頁頁腳的中部。4.字體與間距 項(xiàng)目報(bào)告字體為小四號(hào)宋體,字間距設(shè)置為標(biāo)準(zhǔn)字間距,行間距設(shè)置為固定值20磅。5.封面設(shè)置 成都凱天電子股份有限公司(小二號(hào)黑體,居中)報(bào)告題名(二號(hào)黑體,居中) 報(bào)告提交(完成)時(shí)間(四號(hào)黑體,居中)6.正文設(shè)置 6.1報(bào)告各章應(yīng)有序號(hào),序號(hào)用阿拉伯?dāng)?shù)字編碼,層次格式為: 1××××(三號(hào)黑體,居中) ××××××××××××××××××××××(內(nèi)容用小四號(hào)宋體)。1.1××××(小三號(hào)黑體,居左) ×××××××××××××××××××××(內(nèi)容用小四號(hào)宋體)。1.1.1××××(四號(hào)黑體,居左) ××××××××××××××××××××(內(nèi)容用小四號(hào)宋體)。 ①××××(用與內(nèi)容同樣大小的宋體) 1)××××(用與內(nèi)容同樣大小的宋體) a.××××(用與內(nèi)容同樣大小的宋體) 6.2報(bào)告中的圖、表、公式、算式等,一律用阿拉伯?dāng)?shù)字分別依序連續(xù)編排序號(hào)。序號(hào)分章依序編碼,其標(biāo)注形式應(yīng)便于互相區(qū)別,可分別為:圖2.1、表3.2,式(3.5)等 每一圖應(yīng)有簡短確切的題名,連同圖號(hào)置于圖下。中文宋體五號(hào)。6.3曲線圖的縱橫坐標(biāo)必須標(biāo)注“量、標(biāo)準(zhǔn)規(guī)定符號(hào)、單位”。此三者只有在不必要標(biāo)明(如無量鋼等)的情況下方可省略。坐標(biāo)上標(biāo)注的量的符號(hào)和縮略詞必須與正文中一致。6.4照片圖要求主題和主要顯示部分的輪廓鮮明,便于制版,如用放大縮小的復(fù)制品,必須清晰,反差適中。照片上應(yīng)該有表示目的物尺寸的標(biāo)度。第四篇:漢諾塔c語言程序代碼
第五篇:報(bào)告編寫規(guī)范