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:寫完了之後怎麽自我感覺有點孔乙己