如何更好地用c語言如何輸出菱形

引導語;不少考生疑惑如何才能更好c語言如何輸出菱形,以下是本站小編推薦給大家的c語言如何輸出菱形,歡迎閱讀!

如何更好地用c語言如何輸出菱形

題目:輸出行列都相等的菱形,如5行5列:

行列 12345

1 *

2 ***

3 *****

4 ***

5 *

分析:

當行數等於總行數的一半時,'*'是遞增的,遞增爲2。

當行數大於總行數的一半時,'*'是遞減的,遞增爲2。

設有一個行列爲n的菱形,

我們用變量i作爲行數,以0開始,i

k作爲n菱第i行要輸出的'*'個數。

則i<=n的中值(用m表示,m=(n-1)/2)時,k遞增,i>m時,k遞減。

因爲k相對於m行對稱,所以:

當i>m時,i每增加i-m時的k值就和第m-i行的k值相等,即第i-m行和第m-(i-m)相對稱。

所以得出結果:

當i<=m時,k=2i+1

當i>m時,k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1

由於我們只需要輸出'*'左邊的'空格即可,所以每行'*'左邊的空格的個數爲:(n-每行的k)/2。

每行循環輸出空格,再循環輸出每行的'*',再輸出回車,結束一行。

這樣我們就可以開始編程了。

#include

int main()

{

int i,j,k,n;//定義四個變量:i是行,j每行*號前的空格數,k每行的*號數

printf("please input odd n:");

scanf("%d",&n); //輸入奇數n

for (i=0;i

{

if(n>=2*i+1) //判斷k值

k=2*i+1;

else

k=2*n-2*i-1;

for(j=(n-k)/2;j>0;j--) //循環輸出空格

printf(" ");

for(;k>0;k--) //循環輸出*號

printf("*");

printf("n"); //輸出回車結束一行

}

本來呢題目就到止結束了,但上面的程序還不夠完美

比如說,別人輸入n值爲偶數怎麼辦?輸入非數值呢?

我們加一點東西進去:

#include

int main()

{

int i,j,k,n=0; //這裏給n賦初值,即使輸入非數值,n也可有確切的值。

do{ //增加一個大循環,可以令n可以輸入多次以觀察不同的結果。

printf("please input odd n, 0 to exit:");//當輸入0的時候,退出大循環,結束程序。

scanf("%d",&n);

if (!(n%2)) //增加對輸入偶數的判斷。

{

printf("you input a even, please input again.n");

continue;

}

for (i=0;i

{

if(n>=2*i+1)

k=2*i+1;

else

k=2*n-2*i-1;

j=(n-k)/2;

for(;j>0;j--)

printf(" ");

for(;k>0;k--)

printf("*");

printf("n");

}

}while(n);

return 0;

}