c语言中打印各式各样的菱形

有一天,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;
		
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值