python abs函数打印空心菱形_C或C++语言打印一个空心的菱形?

本文介绍了使用C语言编写的两种方法来打印空心菱形图案。方法一是通过字符遍历控制空格输出,方法二是通过指针移动动态调整字符位置。代码中详细解释了每一步的操作,并对输入的行数做了奇数校验。
摘要由CSDN通过智能技术生成

展开全部

c语言编写,两种思路:

方法一:循环输出n行,每行62616964757a686964616fe4b893e5b19e31333433633461分5个部分。

分别是:左边的空格,字符1,中间的空格,字符2,右边的空格。

循环控制空格输出个数,实现打印效果。

方法二:根据行数,定义一个字符串表示一行最大宽度(动态申请)。

定义2指针,初始指向字符串中间位置。

循环,两指针先往两边移动,到头就往回移动。

每次循环,指针指向的位置为符号,其余都是空格。并打印输出字符串。

下面是代码(两方法对应两函数):

#include

#include //该头文件只用于方法2

#include //该头文件只用于方法2

#define CR '*'//用于填充的字符

int show1(int row);//方法1

int show2(int row);//正常打印菱形,异常返回-1

int main()

{

int row;

printf("请输入行数(奇数):"),scanf("%d",&row);

printf("方法一:通过字符遍历打印图形\n");

show1(row);

printf("\n方法二:通过指针移动打印图形\n");

show2(row);

return 1;

}

int show1(int row)//方法1

{

int i,j,len,lk=0,mk=0,rk=0,flag=1;//lk,mk,rk每行左边中间右边的空格数量

if(row%2==0)

{

printf("错误!行数必须为奇数!");

return -1;

}

len=1+(row/2)*2;

lk=rk=len/2,mk=0;

for(i=0;i

{

for(j=0;j

printf("%c",CR);

for(j=0;j

if(mk>0)printf("%c",CR);

for(j=0;j

printf("\n");

if(lk==0)flag=0;

if(flag)

{

lk--,rk--;

if(mk>=1)mk+=2;

else mk++;

}

if(!flag)

{

lk++,rk++;

if(mk>2)mk-=2;

else mk--;

}

}

return 1;

}

int show2(int row)//方法2

{

int len,flag=1;//标识,flag=1两指针往两边移动。flag=0向中间汇合

char *rStr=NULL,*p1=NULL,*p2=NULL;

if(row%2==0)

{

printf("错误!行数必须为奇数!");

return -1;

}

len=1+(row/2)*2;

rStr=(char *)malloc(sizeof(char)*(len+1));//根据行数申请最大行字符串地址

if(!rStr)return -1;

p1=p2=&rStr[len/2];

while(p1<=p2)

{

memset(rStr,' ',len);//填充空格

rStr[len]=0;

*p1=*p2=CR;

printf("%s\n",rStr);

if(p1==rStr) flag=0;//指针移动到两头,反向移动

if(flag)p1--,p2++;

if(!flag)p1++,p2--;

}

free(rStr);

return 1;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值