想必如果讓大家寫一個c語言版本的列印菱形的程式,估計都是手到擒來的吧。但是大家請看看下面的這段代碼,你是否可以想到呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>#include <stdio.h></code>
<code>int</code> <code>line = 1;</code>
<code>int</code> <code>main()</code>
<code>{</code>
<code> </code><code>printf</code><code>(</code><code>"%*s\n"</code><code>,</code>
<code> </code><code>7-(line>4? line-4: 4-line),</code>
<code> </code><code>"*******"</code><code>+2*(line>4? line-4:4-line)</code>
<code> </code><code>);</code>
<code> </code><code>if</code><code>(++line != 8)</code>
<code> </code><code>main();</code>
<code> </code><code>return</code> <code>0;</code>
<code>}</code>
首先說一下”%*s”的用法,論壇裡前幾天可可餘香童鞋已經寫過了一篇總結:
<a href="http://www.cppleyuan.com/viewthread.php?tid=9351" target="_blank">http://www.cppleyuan.com/viewthread.php?tid=9351</a>
即*是用一個int參數來代替,比如:
printf(“%*s\n”, 5, “def”);
就相當于printf(“%5s\n”, “def”);
指定了字元串輸出的寬度。
這個用法平時見得不多,可以了解下。
另外:
有人對這一行
<code>"*******"</code><code>+2*(line>4? line-4:4-line)</code>
感到疑惑,其實認真看一下,就是一個字元串指針加上一個int整數,也就是指針的平移了。
比如line=1第一行時,2*(line>4? line-4:4-line)即為6,也就是7個星号的字元串指針平移6個,是以輸出一個星号了。
最後這個程式用到了main函數的遞歸調用,注意一定要寫上退出條件,否則就無限循環了。