.net网站开发代码,环保网站建设情况报告,互联网销售公司,1688网站可以自己做吗“可可爱爱”的圣诞树代码 直接上图第一步#xff1a;设计圣诞树第二步#xff1a;找到每层通用的规律第三步#xff1a;设计程序结构第四步#xff1a;写出原版程序第五步#xff1a;代码艺术化与数字替代第六步#xff1a;将变量名替换为纯下划线第七步#xff1a;函数… “可可爱爱”的圣诞树代码 直接上图第一步设计圣诞树第二步找到每层通用的规律第三步设计程序结构第四步写出原版程序第五步代码艺术化与数字替代第六步将变量名替换为纯下划线第七步函数名与保留字替换第八步快乐压行第九步拼个爱心代码在这里 直接上图 第一步设计圣诞树
简单地用星号和空格构造以下圣诞树
由七层构成五层树冠、一层树根、一层地面从上到下奇数层占4行偶数层占6行。避免圣诞树显得死板并使得树根和地面比例融洽。对于第i层树冠该层内每行星号数目为2x1。其中x分别为{i,i2,i4,i7,i12,i14}。令图纸宽度为49圣诞树居中对称。树根层宽度为11地面层宽度为49。
第二步找到每层通用的规律
对于每行 for (k从0到48)用putchar输出星号或者空格。那么我们需要一个表达式来判断这个位置是星号还是空格。图纸正中为24不妨比较|k-24|与x的大小。若|k-24|x则输出空格。否则输出星号。很容易想到对于地面层只要第七层“树冠”的最短一行长度都超过49那么自然会被截断成长为49的方块。因此不需要特判。对于树根层特判并使x5即可。
第三步设计程序结构
简单地使用三层循环的结构。最外面的循环为层数由i控制从第一层到第七层。中间的循环为行数由j控制从一到四行或一到六行。四还是六可以通过42*(i%2)得到。我们不妨将其写做4(i1)1。最内层的循环为每一行的输出由k控制。
第四步写出原版程序
将星号、空格和换行分别用0x20 0x2A和0x0A表示以使得代码美观。循环变量 i 从0到6以产生魔法。for (int i-1;i5;)并在循环内第一次用到变量 i 的地方 使用i即可i先自增1再返回自增后i的☞每层第一行的 x4*i1不妨写作x(i1)*4-41;层内每到下一行x 增加2。若 j 2、4则再加一。若j 4则又再加一。不妨写作x(j%20)(j%4 0)2。增加树根层特判if (i 5) x5; 这真是太巧了所以不妨写作 x (i 5)?(i5):x; 为了使代码“丰富”我们定义变量H并改作 x (H((i5)?(i5):x)) ? H : x; 并去除其中所有不必要的括号以使代码更加抽象。 代码如下
#includecstdio
using namespace std;
int main()
{int i-1,H0,x0;for (;i5;){x(i111)-(1(11))1;for (int j1;j(111)((i1)1);j){x(H(i5?(i5):0))?H:x;for (int k0;k1632;k) putchar((24-k)x||(k-24)x?0x20:0x2A);putchar(0x0A);x(j%20)(j%40)2;}}getchar();
} 第五步代码艺术化与数字替代
稍后去除using namespace std;并在每个函数前使用std::的表达形式将所有数字用“1的二进制左移”、“1的二进制左移”的嵌套以及“1的二进制左移”的加减来表示。例如 32(1(101))((1(101)1)) 16(1(101))((1(101)1))1 483216(1(101))((1(101)1))(1(101))((1(101)1))1 2448÷2((1(101))((1(101)1))(1(101))((1(101)1))1)1 4111 5(111)1利用(j1)将先给j赋值为1再返回1的性质将每个for循环的初始化和迭代条件都尽可能放在奇怪的地方。 此时代码如下
#includecstdio
int i-1,H0,x0,j;
//32(1(101))((1(101)1))
//16(1(101))((1(101)1))1
int main()
{ for (;i(111)1;){x(i111)-(1(11))(j1);for (;j(111)((i1)1);){x(Hi((111)1)?(i(111)1):0)?H:x;for (int k0;k(1(101))((1(101)1));k) std::putchar((((1(101))((1(101)1))1)-k)x||(k-((1(101))((1(101)1))1))x?0x20:0x2A);std::putchar(0x0A);x(j%(11)0)(j%(111)0)(11);}}getchar();
}第六步将变量名替换为纯下划线
是的一个下划线、两个下划线到五个下划线它们是五个不同的变量。 然后就变成了这样
#includecstdio
int _-1,_____,____,__,___;
int main()
{ for (;_(111)1;){__(_111)-(1(11))(___1);for (;___(111)((_1)1);){__(______((111)1)?(_(111)1):0)?_____:__;for (;____(1(101))((1(101)1));____) std::putchar((((1(101))((1(101)1))1)-____)__||(____-((1(101))((1(101)1))1))__?0x20:0x2A);std::putchar(0x0A);__(___%(11)0)(___%(111)0)(11)(____0);}}std::getchar();
}第七步函数名与保留字替换
通过预编译指令#define将main、int、getchar之类的单词都替换为意义不明的奇怪东西。 效果如下
#define _O_ getchar
#define OO putchar
#define O_O main
#define OOO std
#define O int
#includecstdio
O _____,__,___,____,_-1;
O O_O()
{for (;_(111)1;){__(_111)-(1(11))(___1);for (;___(111)((_1)1);){__(______((111)1)?(_(111)1):0)?_____:__;for (;____(1(101))((1(101)1));____) OOO::OO((((1(101))((1(101)1))1)-____)__||(____-((1(101))((1(101)1))1))__?0x20:0x2A);OOO::OO(0x0A);__(___%(11)0)(___%(111)0)(11)(____0);}}_O_();
}第八步快乐压行
#define _O_ getchar
#define OO putchar
#define O_O main
#define OOO std
#define O int
#includecstdio
O _____,__, ___,____,_-1;O O_O(){for (;_(111)1;){__(_111)-(1(11))(___1);for (;___(111)((_1)1);){__(______((111)1)?(_(111)1):0)?_____:__;for (;____(1(101))((1(101)1));____) OOO::OO((((1(101))((1(101)1))1)-____)__||(____-((1(101))((1(101)1))1))__?0x20:0x2A);OOO::OO(0x0A);__(___%(11)0)(___%(111)0)(11)(____0);}}_O_();}大部分空格和换行都不影响编译C真好!
第九步拼个爱心代码在这里
这一步花了一些时间多调整了几次。
//This is for my best friends.
#define _O_ getchar
#define OO putchar
#define O_O main
#define OOO std
#define O int
#includecstdio O _____,__, ___,____,_-1;O O_O() {for (;_(111)1;){__ (_111)-(1(11))(___ 1);for (;___(111)((_1)1) ;){__(______((111)1)?(_(111)1):0)?_____:__;for (;____(1(101))((1(101)1));____) OOO::OO((((1(101))((1(101)1))1)-____)__||(____-((1(101))((1(101)1))1))__?0x20:0x2A);OOO::OO(0x0A);__(___%(11)0)(___%(111)0)(11)(____0);}}_O_();}最后祝大家圣诞节快乐祝亲爱的兄弟姐妹们身体健康平安顺遂