不过,人总是会犯错误的,当然我知道也不能以此作为借口,我们还是要尽量的避免这样的错误发生,希望老师可以相信我的悔过之心。“人有失手,马有失蹄”。我的不良行为不是向老师。绝对是失误,老师说的话很正确,就是想要犯错误也不应该再您的面前犯错误,我感到真的是很惭愧,怎么可以这么的......
相信老师看到我的这个态度也可以知道我对这次的事件有很深刻的悔过态度,我这样如此的重视这次的事件,希望老师可以原谅我的错误,我可以向老师保证今后一定不会忘记划线了。
这几天我真的是很深刻的认识到了我的错误,知道了老师说的话不能够装做没有听见,老师说的话就要听从,老师说的话也绝对会实现她的诺言,老师要我们划线一定是为了我们学生好,所以我们一定要铭记,我们还是学生,没有能力对老师说出来的话产生不听从的想法,我们学生唯一可以做的事情就是好好的听从老师的话,好好的学习好,让老师可以放心,让老师可以信任。
犯了这样的错误,对于家长对我的期望也是一种很大的打击,家长辛苦的赚钱,让我们可以生活的好一点,让我们可以全身心的投入到学习当中,可是,我却违背了家长的心意,我犯了这样的错误,简直是对于家长心血的否定,我对此也感到很惭愧,家长的劳累是我们所不知道的,每天为了生存而忙碌,为了家庭而承受着巨大的压力,这一切的一切都是我们所不能够了解的,我们唯一可以做的就是做他们的乖孩子,听从家长的话,家长是我们最亲的人,也是我们在现在这个社会上最可以信任的人,所以我们就要尽量的避免家长生气,不给他们带来不必要的烦恼。而我们作为他们最亲的人也不能够惹他们生气,这个都是相互的,当我们伤害到他们的心时,也是对于自己心的伤害,因为我们是最亲的人。没有任何人可以取代。
这次的事件我真的感到抱歉,希望老师可以原谅我,可以认可我认错的态度,我真的已经深刻的反省到我的错误了,希望老师再给我知错就改的机会。
噢,是件 C 艺术品。艺术品总是让我们看到平时忽略了的东西。谢谢鬼火狼烟和我们分享。
那个下划线是跟任何单字母变量名一样合法的变量名,因为 C 视下划线为字母。
分析前我把程序里那个唯一的变量(脚注#1)改名为 sole,
然后做代码编排,让程序的结构变得清晰:
#include <stdio.h>
int main( sole ) {
sole++ <10
&&
main(
sole
,
printf(
"%*s\n"
,
sole <6 ?
sole + 3 :
15 - sole
,
"*********" + (
sole <6 ?
12 - 2 * sole :
2 * sole - 12
)
)
)
}
其实这个程序是以 main 的尾递归(脚注#2)重复调用 printf 打印出菱形。
程序里 &&这个二目短路运算符把 sole++ <10 化作 main 的递归条件。
执行这程序时若没有命令行参数,sole 的始值是 1(脚注#3),终值是 11,
但 printf 看到的 sole 的始值是 2,终值是 10。
任何尾递归都可以在不改变程序语义的情况下被直接转换成迭代。
该程序(不带命令行参数执行时)的 for 迭代版本如下:
#include <stdio.h>
int main( ) {
int sole
for( sole = 2sole <= 10sole++ )
printf(
"%*s\n"
,
sole <6 ?
sole + 3 :
15 - sole
,
"*********" + (
sole <6 ?
12 - 2 * sole :
2 * sole - 12
)
)
}
printf 的格式控制字符串里的星号是特别的最小宽度指定符。
星号将被 printf 的第二个参数代替,所以第一个三目运算的结果指定最小宽度。
C 里的字符串皆为字符指针。指针与整数相加产生新的指针,
所以 printf 的第三个参数是妥当的。
printf 打印那 9 颗星的时候必须跳过前面多少颗?
第二个三目的运算结果是直接的答案。
运行。。。
sole 等于 2。 最小宽度是 5。 跳过前面 8 颗星,即打印 1 颗星,
但最小宽度是 5,所以打印时左补 4 个空格。
sole 等于 3。 最小宽度是 6。 跳过前面 6 颗星,即打印 3 颗星,
但最小宽度是 6,所以打印时左补 3 个空格。
sole 等于 4。 最小宽度是 7。 跳过前面 4 颗星,即打印 5 颗星,
但最小宽度是 7,所以打印时左补 2 个空格。
。
。
。
脚注:
#1)
声明函数时若没有声明参数的类型,则参数将被默认为 int 类,
而且该函数被调用时所接收到的参数的个数和类型都不会被检察
(所以 main 被递归的时候多一个 int 参数也无所谓)。
#2)
把递归调用作为函数体里的最后一件事即造就了尾递归。
#3)
main 这个应该只被操作系统调用的特殊函数的第一个参数如果有声明的话,
不管声明时类型和名字为何,程序执行时该参数的始值都将会是命令行参数的个数。
由于 C 把程序的全路径当作第一个“命令行参数”,所以程序执行时若没有命令行参数,
main 的第一个参数的始值便是 1。