c语言使用for循环和坐标法来打印三角等符号

c语言使用for循环和坐标法来打印三角等符号,第1张

c语言使用for循环和坐标法来打印三角等符号

首先我们来实现for循环打印三角

   *
  * *
 *   *
*     *

我们需要用到三个循环来打印

第一个循环控制行数以及换行的 *** 作

有上图可知我们需要打印5行内容 所以 i 的值从0-4

第二个循环打印星号前的空格

第三个循环需要打印星号

下面我们开码

首先我们先写出第一个循环

#include
int main()
{
    int i = 0, j = 0;
    for(i = 0; i < 4; i++)
    {
        printf("n");
    }
    return 0;
}

接着实现第二个循环 空格

我们由开始的那张图可以知道我们需要打印的空格分别是 3个 2个 1个 0个

所以 我们 j 的范围 0 到 2 - i

#include
int main()
{
	int i,j;
	for(i = 0; i < 4; i++)			
	{
		for(j = 0; j <= 2 - i; j++)
		{
			printf(" ");
		}
		printf("n");
	}

最后我们来实现第三个循环 星号

也是由最上面的图可知 每层星号和之间的空格的关系即为 j 的范围

分别是 1 3 5 7 由于我们的循环初始化是从0开始,所以要减一,也更方便我们计算

即 (j = 0; j < 2 * i; j++)

接着我们看星号,可以发现每一层的星号都为开头一个,结束一个

所以我们需要用到 if 来排除一下

#include
int main()
{
	int i,j;
	for(i = 0; i < 4; i++)			//外层循环控制行(行数,换行)
	{
		for(j = 0; j <= 2 - i; j++)
		{
			printf(" ");
		}
		for(j = 0; j <= 2 * i; j++)	//内层循环控制列(列数,列的符号)
		{
			if(j == 0||j == 2 * i)
				printf("*");
			else
				printf(" ");
		}
		printf("n");
	}

至此,我们可以得到一个三角形。

由此我们也可以打印出一个菱形,方法就是将上面的三角形倒过来在打印一边就好,由4行减少到3行,如下图

*   *            最后的成品:        *
 * *                               * *
  *                               *   *
                                 *     *
                                  *   *
                                   * *
                                    *

代码如下

#include
int main()
{
	int i,j;
	for(i = 0; i < 4; i++)			//外层循环控制行(行数,换行)
	{
		for(j = 0; j <= 2 - i; j++)
		{
			printf(" ");
		}
		for(j = 0; j <= 2 * i; j++)	//内层循环控制列(列数,列的符号)
		{
			if(j == 0||j == 2 * i)
				printf("*");
			else
				printf(" ");
		}
		printf("n");
	}
	for(i = 0; i < 3; i++)
	{
		for(j = 0;j <= i; j++)
		{
			printf(" ");
		}
		for(j = 0;j <= 4 - i * 2; j++)
		{
			if(j == 0||j == 4 - i * 2)
				printf("*");
			else
				printf(" ");
		}
		printf("n");
	}
	return 0;
}

第二个打印空格的循环很好理解,需要的值和i对应

我解释一下第三个循环 j 的范围

由第一个三角我们知道 j 的最大值是2 * i

将 i 带入分别是 0 2 4 6 对应着每一行星号和之间的空格

所以我们这里要打三行 只需要将第三行对应的结果减去 2 * i 就好,即 4 - 2 * i 

(以上要是由错误希望指出,上面是我的个人理解,有错误请见谅)

最后是用下标的方法我也放在下面

这个要好理解一些,大概看一边代码就能理解了

#include
int main()
{
    char arr[] = "*****";
    char arr1[] = "     ";
    char arr2[] = " ";
    //int sz = sizeof(arr) / sizeof(arr[0]);要是使用sizeof则下面的sz要减2
    int sz = strlen(arr);
    int lift = 0;
    int right = sz - 1;
    while(lift <= right)
    {
        arr1[lift] = arr[lift];
        arr1[right] = arr[right];
        lift++;
        right--;
        printf("%sn", arr1);
        arr1[lift - 1] = arr2[0];
        arr1[right + 1] = arr2[0];
    }
    return 0;
}

这里就是用两个数组分别用左下标和右下标进行替换,让后使用第三个空格数组来将之前的替换过的初始化掉就行,要是这个要打印出菱形也是一样的 将while反过来在打印一遍就好,我偷个懒就不打了hhh

以上就是我对这两种方法打印星号的理解,这两种方法都比较适用于打很多星号那种,毕竟少的话都那printf打了hhh,由什么问题希望指出

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存