题目:输出菱形。
分析:观察规律:因为菱形是对称图形,可以分为上半部分和下半部分。
总体上看,上半部分随着行数的增加,*个数在增加,空格数在减小。下半部分恰好相反,行数增加,*个数减小,空格数增加。
具体来看,上半部分,假设共有7行。第一行*前有6个空格,只有1个*;第二行*前有5个空格,共有3个*;第三行*前有4个空格,共有5个*……所以,第i行*前有(行数-i)个空格,有(2*i-1)个*。每打印完一行即换行。
下半部分恰好和上半部分相反,行数比上半部分少一行,即有6行。第一行*前有1个空格,后有11个*;第二行*前有2个空格,有9个*;第三行*前有3个空格,有7个*……所以,第i行*前有i个空格,后有(2*(下半部分的行数+1-i)-1)个*,即有(2*(7-i)-1)个*。同样,每打印完一行即换行。
现在从键盘上输入行数,设为line。则上半部分第i行*前有(line-i)个空格,有(2*i-1)个*;下半部分共有(line-1)行,第i行*前有i个空格,后有(2*(line-1)-1)个*。则上半部分为line行的菱形程序如下:
#include<stdio.h>
int main( )
{
int line=0,i=0;//line表示上半部分的行数,i控制输出的行数。
printf("请输入行数:");
scanf("%d",&line);
//输出上半部分
for(i=1;i<=line;i++)
{
int j=0,k=0;//j控制输出的空格数,k控制输出的*个数。
//输出空格
for(j=1;j<=line-i;j++)
{
printf(" ");
}
//输出*
for(k=1;k<=2*i-1;k++)
{
printf("*");
}
//换行
printf("\n");
}
//输出下半部分
for(i=1;i<=line-1;i++)//下半部分共有line-1行
{
int j=0,k=0;//j控制输出的空格数,k控制输出的*个数。
//输出空格
for(j=1;j<=i;j++)
{
printf(" ");
}
//输出*
for(k=1;k<=2*(line-i)-1;k++)
{
printf("*");
}
//换行
printf("\n");
}
return 0;
}