當前位置:編程學習大全網 - 編程語言 - C語言編程--楊輝三角找錯誤 滿意追加50分

C語言編程--楊輝三角找錯誤 滿意追加50分

#include <stdio.h>

int main()

{int m[j][i],i,j; // 不能用變量定義數組長度,而且i,j大小未知

for(i=0;i<=5;i++)

{m[i][0]=1 // 這裏掉了個分號;

m[i][i]=1;}

for(i=2;i<=5;i++)

for(j=1;j=i-1;j++) // 註意這裏j = i - 1將會造成死循環,掉了個!吧,應該是!=才對,而且如幻冰所說應該

// 把i - 1改為i才對

m[i][j]=m[i-1][j-1]+m[i-1][j];

for(i=0;i<=5;i++)

{for(j=0;j<=i;j++)

printf("%5d",m[i][j]);

printf("\n");

}}

改正後

#include <stdio.h>

int main( )

{

int i,j,m[10][10];

for(i = 0; i <= 5; ++i){

m[i][0] = 1;

m[i][i] = 1;

}

for(i = 2; i <= 5; ++i)

for(j = 1; j != i; ++j)

m[i][j] = m[i-1][j-1] + m[i-1][j];

for(i = 0; i <= 5; ++i){

for(j = 0; j <= i; ++j)

printf("%5d",m[i][j]);

printf("\n");

}

}

另外獻上我原來用C++編的楊輝三角函數代碼,我把它改成了C,只不過多用了幾個函數控制輸出格式,而且打印多個空格顯得冗長乏味,但它卻是我初學之時的得意之作。輸出的時候妳要把妳的控制臺窗口(那個黑框)的屏幕緩沖區寬度調大點,不然顯示會和下壹行重疊,造成很混亂的輸出:

// 楊輝三角函數

void YH_triangle( )

{

int h,n,a,m,x,y,c;

int tempA[20] = {1};

int tempB[20];

y = 0;

printf("Enter the number of the triangle's height(1~20): ");

scanf("%d",&n);

h = n;

for (a = 2; n > 0; --n,++a){

for (m = n; m > 0; --m)

//cout << " ";

h_space(h);

++y;

for (x = 0; x < y; ++x){

if (0 == a % 2){

format_out(h,tempA[x]);

for (c = 0; c < y; ++c)

tempB[c+1] = tempA[c] + tempA[c+1];

tempB[0] = tempB[y] = 1;

}

else {

format_out(h,tempB[x]);

for (c = 0;c < y; ++c)

tempA[c+1] = tempB[c] + tempB[c+1];

tempA[0] = tempA[y] = 1;

}

}

printf("\n");

}

}

// 每行打印數字之前的控制空白打印函數

void h_space(int ht)

{

if (ht < 6)

printf(" ");

else if ( ht >= 6 && ht < 10)

printf(" ");

else if (ht >=10 && ht < 14)

printf(" ");

else if (ht >=14 && ht < 16)

printf(" ");

else if (ht >=16 && ht <= 20)

printf(" ");

}

// 格式化輸出打印函數(數字之間的空格)

void format_out(int ht,int X)

{

if (ht < 6)

printf("%d ",X);

else if ( ht >= 6 && ht < 10){

if (X < 10)

printf(" %d ",X);

else

printf(" %d ",X);

}

else if (ht >=10 && ht < 14){

if (X < 10)

printf(" %d ",X);

else if (X >= 10 && X <= 100)

printf(" %d ",X);

else

printf(" %d ",X);

}

else if (ht >=14 && ht < 16){

if (X < 10)

printf(" %d ",X);

else if (X >= 10 && X <= 100)

printf(" %d ",X);

else if (X >=100 && X < 1000)

printf(" %d ",X);

else

printf(" %d ",X);

}

else if (ht >=16 && ht <= 20){

if (X < 10)

printf(" %d ",X);

else if (X >= 10 && X <= 100)

printf(" %d ",X);

else if (X >=100 && X < 1000)

printf(" %d ",X);

else if (X >=1000 && X < 10000)

printf(" %d ",X);

else

printf("%d ",X);

}

}

int main( ){

YH_triangle( );

}

for循環裏的更新條件不是特殊需要的話用前自增比較好,雖然++a和a++的在循環更新中效果相同,但從效率上來考慮用++a較好。

++a就是a += 1;程序先生成壹個temp量來存儲a + 1,然後在把這個temp值賦給a;

a++則不大相同,程序要先生成二個temp量來存儲,第壹個假設叫temp1用來存儲a,第二個假設叫temp2用來存儲++a也就是 a += 1。而作為for的更新部分,除了在特殊情況下需要獲取a的當前值而用a++,比如:

#include <stdio.h>

int main( ){

int i,j;

for(i = 0,j = 0; i < 5;j = i++)

printf("%d",j);

printf("\n");

for(i = 0,j = 0; i < 5;j = ++i)

printf("%d",j);

}

第壹個for打出00123,第二個for打出01234,這個時候++i和i++才有所不同。

其他時候由第壹個temp1存儲的a始終不起什麽作用,而且還白白浪費了壹個臨時變量的存儲空間,這對於小程序來說可能不算什麽,但是在大型程序中將會加大對存儲空間的需求,是很不劃算的。

學編程壹方面要註重思想,另壹方面要註重效率,像這種由++a和a++所引起的微小變化往往很容易被人們所忽略,而有時候恰恰是細小的地方才能真正體現壹個程序員的品質。

PS:寫完了之後怎麽自我感覺有點孔乙己

  • 上一篇:編程啦~跪求答案!
  • 下一篇:賈斯汀的《我的愛》的中英文歌詞是什麽?
  • copyright 2024編程學習大全網