分享一个有趣的打印菱形的程序
2012-07-20 21:27 Rollen Holt 阅读(1259) 评论(1) 编辑 收藏 举报想必如果让大家写一个c语言版本的打印菱形的程序,估计都是手到擒来的吧。但是大家请看看下面的这段代码,你是否可以想到呢?
#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”);
指定了字符串输出的宽度。
这个用法平时见得不多,可以了解下。
另外:
有人对这一行
"*******"+2*(line>4? line-4:4-line)
感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。
比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。
最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================