黑马程序员技术交流社区
标题:
没事的时候做的正方形的输出
[打印本页]
作者:
流转少年
时间:
2015-4-7 22:40
标题:
没事的时候做的正方形的输出
#include <stdio.h>
int main()
{
//空心菱形
int n = 0;
while(n <= 0 )
{
printf("请输入一个正整数:\n");
scanf("%d",&n);
}
for(int i = 0 ; i < n ; i++) //控制行数
{
int number = 2 * (n - i - 1);//每行前面应该空多少个空格,经查看规律,每增加一行,减少两个空格,第一行的空格数是总行数减该行数的二倍,此处ni初始值为0,所以要再减去1;
for(int j = 0 ; j < number ; j++)//控制每行前段应该输出的空格数
{
printf(" ");
}
printf("*");//输出一个*
int count = 4 * i + 1 ;//定义一个count变量,存放中间空格数,中间空格数是行数减1的四倍,再加1.但此处行数初始化值是0,所以不再减1
for(int k = 0; k < count - 2 ; k++)//输出每行中间的空格数
{
printf(" ");
}
if(i > 0)//首行不输入最后一个*
printf("*");//输出最后的*
printf("\n");//换行
}
for(int i = 0 ; i < n -1 ;i++)//控制行数,要比上面的少一行
{
for(int j = 0 ; j < 2 * i + 2 ; j++)//控制每行前段应该输出多少空格,第一行输出2个,第二行输出4个,此处i初始值为0所以要加2.
{
printf(" ");
}
printf("*");//输出一个*
int count = 4 * ((n - (i + 1)) - 1 ) + 1;//定义一个变量存放每行总的*个数,每行*的个数是该行行数减1的四倍再加1.此处i的初始值为0,i+1代表第几行,而图形是反着的,所以n-(i+1)代表倒过来的行数。行数减1的四倍再加1,即为该行的*的个数
for(int k = count - 2 ; k > 0 ; k--)//count-2代表把每一行首尾的*去掉
{
printf(" ");
}
if(i < n - 2 )//末行不输出最后一个*
printf("*");//输出最后一个*
printf("\n");
}
//实心菱形
// int n = 0;
// while(n <= 0 )
// {
// printf("请输入一个正整数:\n");
// scanf("%d",&n);
// }
for(int i = 0; i < n ; i++)//控制上半部分行数
{
for(int j = 2 * ( n - i - 1 ) ; j > 0 ; j--)//控制每行前端要输出的空格数,应该输出空格数是总行数减去对应行数的2倍,此处i初始值为0,所以要减去1
{
printf(" ");
}
int count = 4 * i + 1;//每行有行数的4倍减去1个*,此处i的初始值为1
for(int k = 1; k <= count ; k++)
{
printf("*");
}
printf("\n");
}
for(int i = 0 ;i < n - 1; i++)//控制下半部分行数
{
for(int j = 1 ; j <= 2 * (i + 1) ; j++)//控制每行前端输出的空格数,第一行输出2个空格,第二行输出4个空格,是行数的2倍,此处i的初始值为0,所以要加1
{
printf(" ");
}
int count = 4 * ( (n - (i + 1)) - 1 ) + 1;//定义一个变量存放每行总的*个数,每行*的个数是该行行数减1的四倍再加1.此处i的初始值为0,i+1代表第几行,而图形是反着的,所以n-(i+1)代表倒过来的行数。行数减1的四倍再加1,即为该行的*的个数
for(int k = 0; k < count ; k++)
{
printf("*");
}
printf("\n");
}
// 间隔菱形
//
// int n = 0;
// while(n <= 0 )
// {
// printf("请输入一个正整数:\n");
// scanf("%d",&n);
// }
for(int i = 0; i < n; i++)//控制上半部分行数
{
for(int j = 2 * (n - i - 1); j > 0 ; j--)
{
printf(" ");
}
int count = (4 * i + 1)/2;//定义一个变量,存放应该输出的*和空格数,因为对于实心菱形来说每行有行数减1的四倍加1个*,此处i初始值为0;因为多出一个空格,所以要加1除以2.
for(int k = 0; k <= count; k++)//控制输出的*和空格的个数
{
printf("*");
printf(" ");
}
printf("\n");
}
for(int i = 0; i < n - 1 ;i++ )//控制下半部分图形
{
for(int j = 0; j < 2 * (i + 1); j++)//控制每行前端输出的空格数,第一行输出两个,第二行输出4个,i的初始值为0
{
printf(" ");
}
int count = (4 * ( (n - (i + 1)) - 1) + 1 + 1) / 2;//控制每行输出*和空格的个数:行数减去1的四倍加上1是全部为*的个数,然后再加上1,结果再除以2就是*和空格的个数
for(int k = 0 ; k < count; k++)//控制每行中间输出的*和空格的个数,
{
printf("*");
printf(" ");
}
printf("\n");
}
return 0;
}
复制代码
作者:
流转少年
时间:
2015-4-7 22:44
附图运行结果。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2