哇,原来C语言输出简易图案这么简单呀,保姆级教程在此!!!


前言

大家好,今天为大家分享一下利用循环控制流程输出简易的图案,讲解非常清晰,快来看看吧!


一、循环控制的原理

合理的利用好for循环可以完成很多图案操作。比如:菱形、杨辉三角、金字塔、上三角、正方形等等,只需要弄清楚哪一行该怎样控制输出,该输出几个,什么地方该加空格,加几个空格,我们就可以较为熟练的掌握循环控制输出简易图案的精髓!!!

二、简易图案举例

1.内部充实正方形

这是最基本的图案了,我们先拿他来练手,图案如下:
在这里插入图片描述
由这个图案我们可以看出,他就是每行输出一定数量的星号加空格组成的,并且一定要保证行数和列数相同,代码展示如下:

#include <stdio.h>
int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
   {
        int i = 0;
        //确定行数
        for(i=0; i<n; i++)
       {
            int j = 0;
            //每一行的打印,打印n组*+空格
            for(j=0; j<n; j++)
           {
                printf("* ");
           }
            printf("\n");
       }
   }
    return 0;    
}

作者在里面还添加了多组输入,让我们输入一个数字,然后输出该数字的大小的正方形
代码运行如下:
在这里插入图片描述
输入5,就输出了5*5的正方形

2.正着的直角三角形

图案如下:
在这里插入图片描述
这个图案我们可以看到他每行输出的个数和他的行数是紧密相连的,所以我们可以用他的行数为输出控制,代码如下:

#include<stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        //控制行数
        for (i = 1; i <= n; i++)
        {
            //每一行
            int j = 0;
            for (j = 1; j <= i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

这个我们仍然采用多组输入,方便我们得到多个图案
运行如下:
在这里插入图片描述
我们输入6,就为我们输出了6行大小的直角三角形

3.反方向的直接三角形

图案如下:
在这里插入图片描述
这个图案我们可以看出,他每行在输出星号之前都有不同数量的空格输出,所以这个就需要我们将空格的控制输出也考虑进去,每行空格的数量和星号的数量变化是刚好相反的,并且星号也是连同空格一起输出的,他们每行数量的变化还是和行数紧密联系,代码如下:

#include <stdio.h>
int main() {
    int n=0;
    while(~scanf("%d",&n))
    {
        int i=0;
        //控制总行数
        for(i=1;i<=n;i++)
        {
            //控制输出空格
            for(int j=i;j<n;j++)
            {
                printf("  ");//这里是两个空格
            }
            //控制输出星号
            for(int k=1;k<=i;k++)
            {
                printf("* ");
            }
            printf("\n");//一行完了得换行
        }
    }
    return 0;
}

运行结果如下:
在这里插入图片描述

4.正着的金字塔图案

图形如下:
在这里插入图片描述
金字塔图形每行星号输出前都有一定数量的空格,并且随着行数的变化星号和空格的数量也在随之变化,但都是与行数密切相关的。
代码如下:

int main()
{
    int n = 0;
    while(scanf("%d", &n) != EOF)
   {
        int i = 0;
        for(i=0; i<n; i++)
       {
            //一行
            int j = 0;
            //空格
            for(j=0; j<n-1-i; j++)
           {
                printf(" ");
           }
            //*
            for(j=0; j<=i; j++)
           {
                printf("* ");
           }
            printf("\n");
       }
     }
    return 0;
}

运行如下:
在这里插入图片描述
这个金字塔只要掌握好每行的空格和星号输出个数,便可轻松完成,每行的空格和星号输出个数都是与行数的变化密切相关的,我们可以根据图形轻松得出结论。

5.空心正方形

图形如下:
在这里插入图片描述
这个不同于第一个的正方形,就是他的内部存在一定数量的空格,大家先看代码:

#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
       
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    if (i == 0 || i == n - 1)
                        printf("* ");
                    else if (j == 0 || j == n - 1)
                        printf("* ");
                    else
                        printf("  ");
                }
                printf("\n");
            }
    }
    return 0;
}

大家应该会好奇为什么是在满足一定条件下输出空格和星号,在这里解释一下:
根据图案可以得到:第一行和最后一行都有星号输出,所以第一个 if()里面的条件就是第一行和最后一行的情况,else if()里面就是第一列和最后一列的情况,其余位置都输出空格,这样就完美控制了对应位置输出对应的字符。
运行如下:
在这里插入图片描述

6.箭形图案

图案如下:
在这里插入图片描述
这个分上半部分和下半部分来控制,作者的将中间那行划分给上半部分了(分给下半部分也可以滴),每次输出空格时需要输出两个才能达到效果,否则无法完成,然后就是搞清楚行数变化、列数变化和n之间的逻辑关系即可,代码如下:

int main() {
    int n = 0;
    while (~scanf("%d", &n)) {
        int i = 0, j = 0, k = 0;
        //行数
        for (i = 0; i <= n; i++) {
            //空格
            for (j = i; j < n; j++) {
                printf("  ");
            }
            for (k = 0; k <= i; k++) {
                printf("*");
            }
            printf("\n");
        }
        for (i = 0; i < n; i++) {
            //空格
            for (j = 0; j <=i; j++) {
                printf("  ");
            }
            for (k = i; k <n; k++) {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}

运行如下:
在这里插入图片描述

7.菱形

菱形也要分为上下两部分来控制输出
先来看代码展示如下:

int main()
{
	int i = 0, j = 0, k = 0, l = 0;;
	//行数
	int n = 0;
	scanf("%d", &n);
	//控制输出上半部分
	for (i = 0; i<=n; i++)
	{
		//控制输出空格
		for (j = i; j < n; j++)
		{
			printf(" ");
		}
		//控制输出星号
		for (k = 0; k <= i; k++)
		{
			printf("*");
		}
		for (l = 0; l < i; l++)
		{//这个循环是控制输出每行之间那个星号之后的星号,和中间之前的那部分数量是相同的
			printf("*");
		}
		
		printf("\n");
	}
//下面这里是控制下半部分
	for (i = 0; i < n; i++)
	{
		//控制输出空格
		for (j = 0; j <=i; j++)
		{
			printf(" ");
		}
		//控制输出星号
		for (k = i; k <= n-1; k++)
		{
			printf("*");
		}
		for (l = i; l < n-1; l++)
		{
			printf("*");
		}

		printf("\n");
	}
	return 0;
}

具体控制情况在代码中都很清楚的标识啦,大家可以查看!
运行如下:
在这里插入图片描述

总结

各种简易图案的控制无非就是在循环里面合理的控制行数列数和变化量之间的关系。今天的分享就到这里啦,相信我们都会有很多的收获,大家喜欢的话可以点赞点关注呀,点赞的大家都拿好offer呀!!!

  • 57
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值