编程比赛中的问题,具体分析一下运行过程

来源:百度知道 编辑:UC知道 时间:2024/06/25 00:29:05
#define _ "****************************************"
#define o_o sizeof(_)-1
main(o,n){printf("%*s\n",o_o+o/2,_+o_o-o,o==1&&scanf("%d",&n)),++o<2*n?main(o+1,n):main(1,n);}

下面printf("%*s\n",o_o+o/2,_+o_o-o,o==1&&scanf("%d",&n))的含义是什么??
是用TC编译

首先将程序简化,包括将宏定义代入,拆开逗号表达式,扩写条件表达式.....
最后:
main(o,n)
{
if (o==1)/*判断是不是重新开始一轮绘制*/
scanf("%d",&n);/*输入要打印几行*/
printf("%*s\n",30+o/2,"******************************"+30-o);/*格式化输出*/
if (++o<2*n)
main(o+1,n);/*没结束就继续递归调用*/
else
main(1,n);/*开始新的一轮*/
}

其中"*******"中*的数目任意,只要printf("%*s\n",30+o/2,"******************************"+30-o);中30等于"***"中*的数目就好了
但是数目最好多些,只要大于要输的行数就好了