C语言打印图形

打印图形可以说是每个c语言学习者都绕不开的一座“大山”,其不仅仅是对c语言基础的考验,更是对观察力和总结规律的能力的考验。

  • 最简单的就是给定一个数n或者输入一个数n,然后在屏幕上打印出n个“*”。

代码如下:

#include <stdio.h>
int main()
{
	int n = 0, i = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

  • 给定一个数n或者输入一个数n,然后在屏幕上打印出由“* ”组成的n*n的方阵。

代码如下:

#include <stdio.h>

int main()
{
	int i = 0, n = 0, j = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{			
			for (j = 0; j < n; j++)
			{
				printf("* ");
			}
			printf("\n");
		}
	}
	return 0;
}
  • 给定一个数n或者输入一个数n,然后在屏幕上打印与n有关的三角形。

 首先要知道一些有关矩阵的知识(因为在打印一些特殊三角形时,是以矩阵为基础的):主对角线上(即左上到右下)行数=列数、副对角线上(即左下到右上)行数+列数=n-1(行数、列数从0开始)。

直角三角形: 斜边上行数=列数

代码如下: 

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j <= i; j++)//主对角线上行数=列数
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

 翻转直角三角形:

斜边上行数 +列数=n-1

代码如下: 

#include <stdio.h>
int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j <=n - 1 - i; j++)//副对角线上行数+列数=n-1
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

 左侧有空格的直角三角形

左侧有空格,先打印左侧空格,再打印“*”                                                               斜边上行数+列数=n-1

代码如下: 

#include <stdio.h>
int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n - 1 - i; j++)//先打印左边的空格
				printf("  ");//双空格
			for (j = n-1; j >= n - 1 - i; j--)//打印右边的 *
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

金字塔三角形:

左侧有空格的先打印空格再打印“*”,打印空格时必须单个循环打印 ,因为当n为偶数时,偶数行空格数为奇数,当n为奇数时,奇数行空格数为奇数。

 代码如下:

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n - i-1; j++)//i越大,空格数越少
				printf(" ");//单空格
			for (j = 0; j <= i; j++)//在打印* 
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

翻转金字塔三角形

打印空格时必须单个打印,因为无论n是奇数还是偶数,图形的偶数行的空格数都为奇数。 

代码如下: 

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = n - 1; j > n - 1 - i; j--)//i越大,空格数越多
				printf(" ");//单空格
			for (j = n - 1; j >= i; j--)
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

 数字三角形:可以发现每一列都与对应的列数相同,因此打印时,打印对应的列数即可(若列数j从0开始,则打印j+1)。也可以是每一行与对应行数相同或者从1开始,每打印一个就加1...都是相同原理

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j <= i; j++)
			{
				printf("%d ", j + 1);
			}
			printf("\n");
		}
	}
	return 0;
}
  •  给定一个数n或者输入一个数n,然后在屏幕上打印出与n有关的复杂图形。

 菱形:

可以看做是由上下两个三角形组成的,中间一行可以单独打印,也可以归属于上三角或下三角。

代码如下: 

#include <stdio.h>
int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		//打印上三角
		for (i = 0; i <= n; i++)
		{			
			for (j = 0; j <= n - 1 - i; j++)
				printf(" ");
			for (j = 0; j <= i; j++)
				printf("* ");
			printf("\n");
		}
		//打印中间一行
		//for (i = 0; i <= n; i++)
		//	printf("* ");
		//printf("\n");
		//打印下三角
		for (i = 0; i < n; i++)
		{
			for (j = 0; j <=i; j++)
				printf(" ");
			for (j = n - 1; j >= i; j--)
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

K形:同样可以看做是由两个三角形组成的

代码如下: 

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		//上半部分
		for (i = 0; i < n; i++)
		{
			for (j = n; j >= i; j--)
				printf("* ");
			printf("\n");
		}
		//下半部分
		for (i = 0; i <= n; i++)
		{
			for (j = 0; j < i + 1; j++)
				printf("* ");
			printf("\n");
		}
	}
	return 0;
}

 箭形:同样可以看做是两个三角形,分开打印即可,在打印左侧空格时,可以打印双空格,因为每一行的空格数都是偶数。

代码如下: 

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		//上半部分
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n - i; j++)
				printf("  ");			
			for (j = 0; j <= i; j++)
				printf("*");
			printf("\n");
		}
		//下半部分
		for (i = 0; i <= n; i++)
		{
			for (j = n; j > n - i; j--)
				printf("  ");
			for (j = 0; j < n + 1 - i; j++)
				printf("*");
			printf("\n");
		}
		
	}
	return 0;
}

 X形:可以看做一个矩阵在主对角线和副对角线位置打印“*”,其余位置打印空格。

代码如下: 

#include <stdio.h>

int main()
{
	int i = 0, j = 0, n = 0;
	while (~scanf("%d", &n))
	{
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n; j++)
			{
				if ((i == j)||(i + j == n - 1))
					printf("*");
				else
					printf(" ");
			}
			printf("\n");
		}
	}
	return 0;
}

 以上是一些比较简单的图形打印,解题时一定要注意题目要求是打印“*”还是打印“* ”,熟练掌握之后可以去牛客或者力扣等平台,找相关的题目进行练习。一些特别复杂的题目,要求有极强的观察力和总结规律的能力,解题时一定要细心冷静分析题目,综合所学知识,一步步讲题目拆解细化,一步步解决问题,切不可急躁。

以上就是本期全部内容,如果觉得对你有帮助的话,就点个赞点个关注吧!

  • 16
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值