样图示例:
一.基本思路
该问题的主要难点时是如何使用循环通过人为输入的指定长度来确定空格和星号的输出,我的想法是将图形以中间最长的一条线分为上下部分,然后分别用不同的变量来表示空格和星号的输出,最后通过c语言来实现对图形颜色和闪烁的控制。
二.具体实现
1.上半部分
首先我们先实现上半部分图形的打印
- - - *
- - * * *
- * * * * *
* * * * * * *
首先我们先要有规律的打印出空格,我在上图中用下划线代替了空格,用变量 i 和变量 j 来分别表示输出的行数和列数,用变量 n 来表示图形的阶数,首先空格的个数由上往下依次是3,2,1,0,而空格的行数 i 从上往下依次是0,1,2,3,由此可知 i<n/2+1(因为想要输出第四行因此加一),空格的列数 j 由上往下则是3,2,1,0,因此由观察可得j<n/2-i。由此上半部分空格输出的代码实现为:
for(i=0;i<n/2+1;i++)
{
for(j=0;j<n/2-i;j++)
{
printf("_ ");
}
printf("\n\n");
}
为了图形美观于是我加入了两个换行符,而打印出的结果应该为:
- - -
- -
-
接下来着手打印星号,由第一个图可知由上往下星号的数量分别为1,3,5,7,与打印空格的逻辑一样只不过这里 j 的范围由观察可得j<2*i+1,由此可的代码如下:
for(i=0;i<n/2;i++)
{
for(j=0;j<n/2-i;j++)
{
printf(" _");
}
for(j=0;j<2*i+1:j++)
{
printf(" *");
}
printf("\n\n");
}
其打印出来的效果应该该如下:
- - - *
- - * * *
- * * * * *
* * * * * * *
2.下半部分
然后我们开始下半部分的图形输出,还是先打印空格设空格由上至下依次为1,2,3,行数 i 依旧为i<n/2,列数 j 为1,2.,3,由观察可得j<i+1,由此可得代码如下:
for(i=0;i<n/2+1;i++)
{
for(j=0;j<n/2-i;j++)
{
printf(" _");
}
for(j=0;j<2*i+1;j++)
{
printf(" *");
}
printf("\n\n");
}
for(i=0;i<n/2;i++)
{
for(j=0;j<i+1;j++)
{
printf(" _");
}
printf("\n\n");
}
其输出的结果应该为:
- - - *
- - * * *
- * * * * *
* * * * * * *
-
- -
- - -
由图像可知星号由上至下依次为5,3,1,行数 i 的范围不变,j 的范围变为j<n-2-2*i,由此完整的代码应该为:
for(i=0;i<n/2;i++)
{
for(j=0;j<i+1;j++)
{
printf(" _");
}
for(j=0;j<n-2-2*i)
{
printf(" *"):
}
printf("\n\n");
}
可的到的图形输出为:
- - - *
- - * * *
- * * * * *
* * * * * * *
- * * * * *
- - * * *
- - - *
3.对图形颜色和闪烁的控制
若要实现对图形我们就要使用到printf的设置属性的功能:
设置文本颜色(30~37) | 重置文本所有属性:\033[0m |
黑色:\033[30m | 设置粗体:\033[1m |
红色:\033[31m | 设置斜体:\033[3m |
绿色:\033[32m | 设置下划线:\033[4m |
黄色:\033[33m | 设置闪烁\033[5m |
蓝色:\033[34m | 设置反显:\033[7m |
洋红:\033[35m | |
青色:\033[36m | |
白色:\033[37m |
由此完整代码应该如下:
#include <stdio.h>
int main()
{
int n ;
scanf_s("%d", &n);
int i, j;
printf("\033[5m\033[36m");
for (i = 0; i < n / 2 + 1; i++)
{
for (j = 0; j < n / 2 - i; j++)
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++)
{
printf(" *");
}
printf("\n\n");
}
for (i = 0; i < n / 2; i++)
{
for (j = 0; j < i + 1; j++)
{
printf(" ");
}
for (j = 0; j < n - 2 - 2 * i; j++)
{
printf(" *");
}
printf("\n\n");
}
printf("\033[0m");
return 0;
}
注意在使用颜色控制和设置文本属性的时候最后一定要重置所用文本属性。
这就是我所分享的内容如有错误敬请指出
标签:奇数,++,打印,C语言,空格,printf,033,图形,实心 From: https://blog.csdn.net/syfds/article/details/140968812