利用取绝对值实现变向循环abs
我最近在网上下[C语言程序设计视频教程(曾怡)(30个视频)]在自学C;
我看到第15个视频讲到for语句,有意思的事情就在这时开始发生了,
曾怡讲到这里的时候说如果我们想用for循环实现打印菱形图案无法用这里讲的二重循环完成,她一讲到这里,我马上就想到了利用取绝对值可以实现变向循环,这样就还是只使用for的二重循环实现打印菱形,下面是我的实现方法。这里需要注意的是++运算符是放在变量的前面还是后面,row=5-abs(5-++row2)这个地方如果把++放在row2后面前面两行都只会只打印一个*号,因为row=5-abs(5-row2++)这样第一次算到的时候row值为1; row=5-abs(5-++row2)这样第一次算到的时候row值为2。
#include "stdio.h"
#include "math.h"
void main()
/*下面是第一种实现方法*/
{int row=1,col,row2=1;
for(;row2<=9;row=5-abs(5-++row2))
{for(col=1;col<=20-row;col++)printf(" ");
for(col=1;col<=2*row-1;col++)printf("*");
printf("\n");
}
}
/*下面是第二种实现方法*/
{int row=1,col;
for(;row<=9;row++)
{for(col=1;col<=abs(5-row)+15;col++)printf(" ");
for(col=1;col<=9-abs(10-2*row);col++)printf("*");
printf("\n");
}
}
/*下面是我猜想的曾怡所想的其中的一种实现方法*/
{int row=1,col;
for(;row<=5;row++)
{for(col=1;col<=20-row;col++)printf(" ");
for(col=1;col<=2*row-1;col++)printf("*");
printf("\n");
}
for(row=1;row<=5;row++)
{for(col=1;col<=row+15;col++)printf(" ");
for(col=1;col<=9-2*row;col++)printf("*");
printf("\n");
}
}
效果图
我觉得证明有编程方法能实现某一种特定功能很容易,因为你只要找到一种方法就已经证明了。
如果要证明任何编程方法都不能实现某种特定功能太难,或者说不现实,因为没有人能够把每种编程方法都试完后来告诉你任何编程方法都不能实现这种特定功能。
[解决办法]
学有所悟