天天看點

分享一個有趣的列印菱形的程式

想必如果讓大家寫一個c語言版本的列印菱形的程式,估計都是手到擒來的吧。但是大家請看看下面的這段代碼,你是否可以想到呢?

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>#include &lt;stdio.h&gt;</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&gt;4? line-4: 4-line),</code>

<code>                </code><code>"*******"</code><code>+2*(line&gt;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&gt;4? line-4:4-line)</code>

感到疑惑,其實認真看一下,就是一個字元串指針加上一個int整數,也就是指針的平移了。

比如line=1第一行時,2*(line&gt;4? line-4:4-line)即為6,也就是7個星号的字元串指針平移6個,是以輸出一個星号了。

最後這個程式用到了main函數的遞歸調用,注意一定要寫上退出條件,否則就無限循環了。

繼續閱讀