- 相關(guān)推薦
C語(yǔ)言怎樣輸出菱形
C語(yǔ)言怎樣輸出菱形你知道嗎?上網(wǎng)搜索一下,但網(wǎng)上的方法都是分為上下部分用兩個(gè)嵌套for循環(huán)輸出。下面是小編為大家?guī)?lái)的C語(yǔ)言怎樣輸出菱形的知識(shí),歡迎閱讀。
C語(yǔ)言怎樣輸出菱形
適有同學(xué)問(wèn)起一些C語(yǔ)言題目,本想上網(wǎng)搜索了事,但網(wǎng)上的方法都是分為上下部分用兩個(gè)嵌套for循環(huán)輸出。我想有沒(méi)有合起來(lái)輸出的呢,這樣符合簡(jiǎn)潔又美觀的要求呢?答案是有的。
題目:輸出行列都相等的菱形,如5行5列:
行列 12345
1 *
2 ***
3 *****
4 ***
5 *
分析:
當(dāng)行數(shù)等于總行數(shù)的一半時(shí),'*'是遞增的,遞增為2。
當(dāng)行數(shù)大于總行數(shù)的一半時(shí),'*'是遞減的,遞增為2。
設(shè)有一個(gè)行列為n的菱形,
我們用變量i作為行數(shù),以0開(kāi)始,i
k作為n菱第i行要輸出的'*'個(gè)數(shù)。
則i<=n的中值(用m表示,m=(n-1)/2)時(shí),k遞增,i>m時(shí),k遞減。
因?yàn)閗相對(duì)于m行對(duì)稱(chēng),所以:
當(dāng)i>m時(shí),i每增加i-m時(shí)的`k值就和第m-i行的k值相等,即第i-m行和第m-(i-m)相對(duì)稱(chēng)。
所以得出結(jié)果:
當(dāng)i<=m時(shí),k=2i+1
當(dāng)i>m時(shí),k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1
由于我們只需要輸出'*'左邊的空格即可,所以每行'*'左邊的空格的個(gè)數(shù)為:(n-每行的k)/2。
每行循環(huán)輸出空格,再循環(huán)輸出每行的'*',再輸出回車(chē),結(jié)束一行。
這樣我們就可以開(kāi)始編程了。
#include
int main()
{
int i,j,k,n;//定義四個(gè)變量:i是行,j每行*號(hào)前的空格數(shù),k每行的*號(hào)數(shù)
printf("please input odd n:");
scanf("%d",&n); //輸入奇數(shù)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--) //循環(huán)輸出空格
printf(" ");
for(;k>0;k--) //循環(huán)輸出*號(hào)
printf("*");
printf("n"); //輸出回車(chē)結(jié)束一行
}
本來(lái)呢題目就到止結(jié)束了,但上面的程序還不夠完美
比如說(shuō),別人輸入n值為偶數(shù)怎么辦?輸入非數(shù)值呢?
我們加一點(diǎn)東西進(jìn)去:
#include
int main()
{
int i,j,k,n=0; //這里給n賦初值,即使輸入非數(shù)值,n也可有確切的值。
do{ //增加一個(gè)大循環(huán),可以令n可以輸入多次以觀察不同的結(jié)果。
printf("please input odd n, 0 to exit:");//當(dāng)輸入0的時(shí)候,退出大循環(huán),結(jié)束程序。
scanf("%d",&n);
if (!(n%2)) //增加對(duì)輸入偶數(shù)的判斷。
{
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;
}
【C語(yǔ)言怎樣輸出菱形】相關(guān)文章:
C語(yǔ)言如何輸出菱形10-16
C語(yǔ)言輸出菱形的方法07-31
C語(yǔ)言怎么輸出一個(gè)菱形09-27
如何更好地用c語(yǔ)言如何輸出菱形08-30
C語(yǔ)言數(shù)據(jù)輸出及輕量進(jìn)階10-13
C語(yǔ)言數(shù)據(jù)的輸入輸出復(fù)習(xí)08-11
關(guān)于c語(yǔ)言約瑟夫問(wèn)題輸出序號(hào)算法10-16