天天看點

c語言程式代碼應縮進幾格,漢諾塔c語言程式代碼

漢諾塔c語言程式代碼(通過vc++6.0驗證)(附講解) 讓我們先看看代碼吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1)

printf("%d->%d\n",a,c); else {t=c; c=b; b=t; hj(a,b,c,i-1); printf("%d->%d\n",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->%d\n",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->%d\n",a,c); else {t=c; c=b;(交換值)

b=t; hj(a,b,c,i-1); printf("%d->%d\n",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

漢諾塔c語言程式代碼(通過vc++6.0驗證)(附講解) 讓我們先看看代碼吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1)

printf("%d->%d\n",a,c); else {t=c; c=b; b=t; hj(a,b,c,i-1); printf("%d->%d\n",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->%d\n",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->%d\n",a,c); else {t=c; c=b;(交換值)

b=t; hj(a,b,c,i-1); printf("%d->%d\n",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

C語言程式設計(漢諾塔設計)

#includevoid main() {void tian(int n,int x,int y,int z);

int m; printf("please enter the number of diskes:\n"); scanf("%d",&m); printf("the step of move %d diskes :",m); tian(m,'A','B','C');

} void tian(int n,int x,int y,int z)

{void move(int x,int y);

if(n==1) move(x,z);

else

{tian(n-1,x,z,y); move(x,y);

tian(n-1,y,x,z); } } void move(int x, int y)

{printf("%c——>%c\n",x,y);

}

C語言 程式代碼編寫規範

(初級程式員 讨論版)

前言

一個好的程式編寫規範是編寫高品質程式的保證。清晰、規範的源程式不僅僅是友善閱讀,更重要的是能夠便于檢查錯誤,提高調試效率,進而最終保證軟體的品質和可維護性。

說明

此文擋還在完善改進中,如有不足,歡迎指正。 本文檔主要适用于剛剛開始接觸程式設計的初學者。

對于具有一定工程項目開發經驗的程式員,建議學習C語言程式代碼編寫規範—進階版。

目錄

1 代碼書寫規範 2 注釋書寫規範 3 命名規範内容

1 代碼書寫規範

1.1函數定義

每個函數的定義和說明應該從第1列開始書寫。函數名(包括參數表)和函數體的花括号(“{”和“}”)應該各占一行。在函數體結尾的括号(“}”)後面應該加上注釋,注釋中應該包括函數名,這樣比較友善進行括号配對檢查,也可以清晰地看出來函數是否結束。

範例1:函數的聲明

void matMyFunction(int n) { …… } 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."); }

2 注釋書寫規範

注釋必須做到清晰,準确地描述内容。對于程式中複雜的部分必須有注釋加以說明。注釋量要适中,過多或過少都易導緻閱讀困難。

2.1注釋風格

語言中使用一組()作為注釋界定符。 注釋内容盡量用英語方式表述。

注釋的基本樣式參考範例4。

注釋應該出現在要說明的内容之前,而不應該出現在其後。

除了說明變量的用途和語言塊末尾使用的注釋,盡量不使用行末的注釋方式。

範例4:幾種注釋樣式

int i; 2.2何時需要注釋

如果變量的名字不能完全說明其用途,應該使用注釋加以說明。

如果為了提高性能而使某些代碼變得難懂,應該使用注釋加以說明。 對于一個比較長的程式段落,應該加注釋予以說明。如果設計文檔中有流程圖,則程式中對應的位置應該加注釋予以說明。

如果程式中使用了某個複雜的算法,建議注明其出處。

如果在調試中發現某段落容易出現錯誤,應該注明。

3 命名規範

3.1常量、變量命名

用#define定義的符号常量全部采用大寫。

變量命名的基本原則:

可以選擇有意義的英文(小寫字母)組成變量名,使人看到該變量就能大緻清 楚其含義。

不要使用人名、地名和漢語拼音。

如果使用縮寫,應該使用那些約定俗成的,而不是自己編造的。

多個單詞組成的變量名,每個單詞的首字母應該大寫。如:dwUserInputValue。

3.2函數命名

函數命名原則與變量命名原則基本相同。對于初學者,函數命名可以采用 “FunctionName”的形式。

長 春 工 業 大 學

課程設計程式代碼

課程設計名稱 運籌學課程設計 專 業 資訊管理與資訊系統 班 級 130506班 學 生 姓 名 于松南、張鑫蕊、

趙改玲、趙海潮

指 導 教 師

王亞君、王忠吉

2015年7月3日

#include#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(" \tCB\tXB\tb\t");

for(i=0; iprintf(" X(%d)\t",i+1);

for(i=0; ix[i]=0;

printf("\n");

while(1) {

q=mincz();

if(q==-1) {

print();

printf("\n所得解已經是最優解!\n");

printf("\n最優解為:\n");

for(j=0; jtemp=num[j]-1;

x[temp]=b[j];

}

for(i=0; iprintf("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; iif(cn[i]>=0)

flag=1;

else {

flag=0;

break;

}

if(flag==1)

return -1;

//進行到此處,說明存在<0的檢驗數

//找到最小的檢驗數,作為換入變量

for(i=0; iif(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; iif(A[i][k]<=0)

flag=1;

else {

flag=0;

break;

}

if(flag==1) {

printf("\n該線性規劃無最優解!\n");

return -1;

}

for(i=0; iif(A[i][k]>0)

seta[i]=b[i]/A[i][k];

else seta[i]=M;

}

min=M;

for(i=0; iif(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; jA[c][j]=A[c][j]/temp1; //主元化為1

for(i=0; iif(i!=c)

if(A[i][l]!=0) {

temp2=A[i][l];

b[i]=b[i]-b[c]*temp2;

//主元所在列,其餘元素化為0

for(j=0; jA[i][j]=A[i][j]-A[c][j]*temp2;

}

}

temp3=cn[l];

for(i=0; icn[i]=cn[i]-A[c][i]*temp3; } void print() {

int i,j=0;

printf("\n------------\n");

for(i=0; iprintf("%8.2f\tX(%d) %8.2f ",CB[i],num[i],b[i]);

for(j=0; jprintf("%8.2f ",A[i][j]);

printf("\n");

}

printf("\n------------\n");

printf("\t\t\t");

for(i=0; iprintf(" %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; ifor(j=0; jscanf("%f",&A[i][j]);

printf("\n請輸入初始基變量的數字代碼矩陣:\n");

for(i=0; iscanf("%d",&num[i]);

printf("\n請輸入方程組右邊的值矩陣b:\n");

for(i=0; iscanf("%f",&b[i]);

printf("\n請輸入目标函數各個變量的系數所構成的系數陣C:\n");

for(i=0; iscanf("%f",&C[i]);

for(i=0; icn[i]=-C[i];

for(i=0; ik=num[i]-1;

CB[i]=C[k];

}

}