有一天,C语言老师突然布置了很多关于C语言打印各种图形的题目,觉得很有意思
拿出来跟大家分享一下
第一种:
最中间的一行为减号
效果图如下
代码如下:
#include <stdio.h>
int main()
{
int lines = 0;
int i = 0;
int j = 0;
scanf("%d",&lines);
if(lines % 2 == 0)
{
printf("input error");
}
int up_lines = lines / 2;
//打印上半行*
for(i = 0;i < up_lines;i ++ )
{
for(j = 0;j < up_lines * 2 - i * 2;j ++)
{
printf(" ");
}
for(j = 0;j < 2 * i + 1;j ++)
{
printf("* ");
}
printf("\n");
}
//打印中间一行-
for(i = 0;i < lines;i ++)
{
printf("- ");
}
printf("\n");
//打印下半行*
for(i = 0;i < up_lines;i ++)
{
for(j = 0;j < 2 + 2 * i;j ++)
{
printf(" ");
}
for(j = 0;j < up_lines * 2 - 2 * i - 1;j ++)
{
printf("* ");
}
printf("\n");
}
return 0;
}
第二种:
菱形的周围被“+”包围
效果图如下
代码如下:
跟第一种类似,把最开始的循环和最后的循环改一下即可
#include <stdio.h>
int main()
{
int lines = 0;
int i = 0;
int j = 0;
scanf("%d",&lines);
if(lines % 2 == 0)
{
printf("input error");
}
int up_lines = lines / 2;
//打印上半行*
for(i = 0;i < up_lines;i ++ )
{
for(j = 0;j < up_lines * 2 - i * 2;j ++)
{
printf(" ");
}
for(j = 0;j < 2 * i + 1;j ++)
{
//原理很简单,只要在循环开始时和循环结束时改变即可
if(j == 0){
printf("+ ");
continue;
}
if(j == (2 * i)){
printf("+ ");
continue;
}
printf("* ");
}
printf("\n");
}
//打印中间一行-
for(i = 0;i < lines;i ++)
{
if(i == 0){
printf("+ ");
continue;
}
if(i == (lines - 1)){
printf("+ ");
continue;
}
printf("* ");
}
printf("\n");
//打印下半行*
for(i = 0;i < up_lines;i ++)
{
for(j = 0;j < 2 + 2 * i;j ++)
{
printf(" ");
}
for(j = 0;j < up_lines * 2 - 2 * i - 1;j ++)
{
if(j == 0){
printf("+ ");
continue;
}
if(j == (up_lines * 2 - 2 * i - 2)){
printf("+ ");
continue;
}
printf("* ");
}
printf("\n");
}
return 0;
}
第三种:
把*改成交替的数字
效果图如下
代码如下:
关键还是要分布打印,不能着急,慢慢来,加油
#include <stdio.h>
int main()
{
int lines = 0;
int i = 0;
int j = 0;
int n = 1;
scanf("%d",&lines);
if(lines % 2 == 0){
printf("input error");
}
int up_lines = lines / 2;
//打印上半部分
for(i = 0;i < up_lines;i ++ )
{
for(j = 0;j < up_lines * 2 - i * 2;j ++)
{
printf(" ");
}
//这里我们引入一个中间变量n,使得最后能出现递减的情况
for(j = 0,n = 1;j < 2 * i + 1;j ++ )
{
if(j < i + 1)
{
printf("%d ",j + 1);
}else {
printf("%d ",j - n);
n = n + 2;
}
}
printf("\n");
}
//打印中间部分
for(i = 0,n = 1;i < lines;i ++)
{
if(i < lines / 2 + 1)
{
printf("%d ",i + 1);
}else
{
printf("%d ",i - n);
n += 2;
}
}
printf("\n");
//打印下半部分
for(i = 0;i < up_lines;i ++)
{
for(j = 0;j < 2 * i + 2;j ++)
{
printf(" ");
}
for(j = 0,n = 1;j < up_lines * 2 - 2 * i - 1;j ++)
{
if(j < (up_lines - i))
{
printf("%d ",j + 1);
}else {
printf("%d ",j - n);
n += 2;
}
}
printf("\n");
}
return 0;
}