分享一个有趣的打印菱形的程序

本文介绍了一个使用C语言递归实现打印菱形的巧妙方法。通过解析代码中%*s的用法和字符串指针操作,揭示了如何仅用几行代码就能输出菱形图案的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想必如果让大家写一个c语言版本的打印菱形的程序,估计都是手到擒来的吧。但是大家请看看下面的这段代码,你是否可以想到呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int  line = 1;
int  main()
{
         printf ( "%*s\n" ,
                 7-(line>4? line-4: 4-line),
                 "*******" +2*(line>4? line-4:4-line)
         );
         if (++line != 8)
                 main();
         return  0;
}

  

首先说一下”%*s”的用法,论坛里前几天可可余香童鞋已经写过了一篇总结:
http://www.cppleyuan.com/viewthread.php?tid=9351
即*是用一个int参数来代替,比如:
printf(“%*s\n”, 5, “def”);

就相当于printf(“%5s\n”, “def”);
指定了字符串输出的宽度。
这个用法平时见得不多,可以了解下。

另外:
有人对这一行

1
"*******" +2*(line>4? line-4:4-line)

  

感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。

比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。

最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值