打印菱形星号组合

#include<stdio.h>
void pxo(int n,int ih)                    //第一个输出*
{
	int i,j,t,xi=0,ki=0,x=0,k=0;   //xi用来计数i行*号个数,ki用来计数i行空格个数,x用来计数*号个数,k用来计数空格个数
	t=(n-1)/2;                     //输出空格初始化
	for(j=0;j<(n-1)/2;j++)         //前(n-1)/2-1行
	{
		for(i=t--;i>0;i--)
		{
			printf(" ");
			k++;
		}
		for(i=0;i<2*j+1;i++)
		{
			printf("*");
			x++;
		}
		printf("\n");
	}
	t=(n-1)/2;                     //输出*号初始化
	for(j=(n-1)/2;j<n;j++)         //后(n-1)/2+1行
	{
		for(i=0;i<j-(n-1)/2;i++)
		{
			printf(" ");
			k++;
		}
		for(i=1+2*(t--);i>0;i--)
		{
			printf("*");
			x++;
		}
		printf("\n");
	}
	printf("numo(*)=%d,numo( )=%d\n",x,k); //输出*与空格的个数
	if(ih<=(n-1)/2&&ih>0)                   //前(n-1)/2-1行
	{
		xi=2*ih-1;
		ki=(n+1-xi)/2;
	}	
	if(ih>(n-1)/2&&ih<n+1)                 //后(n-1)/2+1行
	{
		ki=ih-(n-1)/2-1;
		xi=n-2*ki;
	}
	printf("numoi(*)=%d,numoi( )=%d\n",xi,ki); //输出每行*与空格的个数
}
void pxt(int n,int ih)                    //第二个输出
{
	int i,j,t,xi=0,ki=0,x=0,k=0;
	t=(n-1)/2;                     //输出空格初始化
	for(j=0;j<(n-1)/2;j++)          //前(n-1)/2-1行
	{
		for(i=t--;i>0;i--)
		{
			printf(" ");
			k++;
		}
		printf("*");
		x++;
		if(j>0)                    //限制第一行
		{
			for(i=0;i<2*(j-1)+1;i++)
			{
				printf(" ");
				k++;
			}	
			printf("*");
			x++;
	    }
		
		printf("\n");
	}
	t=(n-1)/2-1;                   //输出*号初始化
	for(j=(n-1)/2;j<n;j++)         //后(n-1)/2+1行
	{
		for(i=0;i<j-(n-1)/2;i++)
		{
			printf(" ");
			k++;
		}
		printf("*");
		x++;
		if(j<n-1)                //限制最后一行
		{
			for(i=1+2*(t--);i>0;i--)
			{
				printf(" ");
				k++;
			}
			printf("*");
			x++;
		}
		printf("\n");
	}
	printf("numt(*)=%d,numt( )=%d\n",x,k);//输出*与空格的个数
	
	if(ih>1&&ih<=(n-1)/2)                //2到(n-1)/2行
	{
		ki=(n-1)/2+ih-2;
		xi=2;
	}
	else if(ih<n&&ih>(n-1)/2)          //(n-1)/2到n-1行
	{
		ki=n-2-(ih-(n-1)/2-1);
		xi=2;
	}
	else if(ih==1||ih==n)              //第一行与最后一行
	{
		ki=(n-1)/2;
		xi=1;
	}
	printf("numti(*)=%d,numti( )=%d\n",xi,ki); //输出每行*与空格的个数
}
void main()
{
	//int i,j,t,n,x=0,k=0;
	int n,ih;
	while(1)
	{
	printf("please enter n(odd number) line and number of *and of the line of i:\n");
	scanf_s("%d%d",&n,&ih);//输入想要输出的行数
	printf("test\n");
	
	pxo(n,ih);       //第一个输出*
	pxt(n,ih);       //第二个输出*	
	}
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值