通过整编,都可以直接在C语言的软件运行,不同的源文件会有()注释。 

 

简单圣诞树(.c)

通过简单的for循环嵌套,实现简易的圣诞树效果,代码处有注释,可以自行修改大小
#include <stdio.h> int main(void) { int i, j, x; int n = 0; //
a是间隔填充物,这里用空白填充;b是雪花,这里用*表示;c是圣诞树的填充,用'0'表示 char a = ' ', b = '*', c = '0'; //
第一部分,输出树叶 for (x = 0; x < 3; x++) { // 想让圣诞树变高可以将4这个值调高 for (i = 0; i < x + 4;
i++) { for (j = 0; j < 80; j++) { if ((j <= 25 + n) && (j >= 25 - n)) {
printf("%c", c); } else if ((j % (n + 6) == n) && ( (j > 25 + n) || (j < 25 -
n))) { printf("%c", b); } else { printf("%c", a); } } printf("\n"); n = n + 2;
} n = n - 2 * (x + 2); } // 第二部分,输出树干,高度为5 for (i = 0; i < 5; i++) { for (j =
0; j < 80; j++) { if (j >= 22 && j <= 28) { printf("%c", c); } else if ((j % (n
+ 6) == n) && ((j > 25 + n) || (j < 25 - n))) { printf("%c", b); } else {
printf("%c", a); } } n = n + 2; printf("\n"); } // 第三部分,输出地面,高度为3 for (i = 0; i
< 3; i++) { for (j = 0; j < 80; j++) { if (j % 2 == 0) { printf("%c", b); }
else { printf("%c", a); } } printf("\n"); } return 0; }
更加好看的圣诞树 (.c)

通过增加输出元素密度,实现更加细致的圣诞树效果,底层逻辑不变
#include <math.h> #include <stdio.h> #include <stdlib.h> #define PI
3.14159265359 float sx, sy; float sdCircle(float px, float py, float r) { float
dx = px - sx, dy = py - sy; return sqrtf(dx * dx + dy * dy) - r; } float
opUnion(float d1, float d2) { return d1 < d2 ? d1 : d2; } #define T px + scale
* r* cosf(theta), py + scale * r * sin(theta) int ribbon() { float x =
(fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f; return sx >= x - 0.05f && sx <= x +
0.05f; } float f(float px, float py, float theta, float scale, int n) { float d
= 0.0f; for (float r = 0.0f; r < 0.8f; r += 0.02f) d = opUnion(d, sdCircle(T,
0.05f * scale * (0.95f - r))); if (n > 0) for (int t = -1; t <= 1; t += 2) {
float tt = theta + t * 1.8f; float ss = scale * 0.9f; for (float r = 0.2f; r <
0.8f; r += 0.1f) { d = opUnion(d, f(T, tt, ss * 0.5f, n - 1)); ss *= 0.8f; } }
return d; } int main(int argc, char* argv[]) { int n = argc > 1 ? atoi(argv[1])
: 3; float zoom = argc > 2 ? atof(argv[2]) : 1.0f; for (sy = 0.8f; sy > 0.0f;
sy -= 0.02f / zoom, putchar('\n')) for (sx = -0.35f; sx < 0.35f; sx += 0.01f /
zoom) { if (f(0, 0, PI * 0.5f, 1.0f, n) < 0.0f) { if (sy < 0.1f) putchar('.');
else { if (ribbon()) putchar('='); else
putchar("...................................#j&o"[rand() % 32]); } } else
putchar(' '); } }
运行结果 

 

彩色圣诞树 (.cpp)

通过数组和光标实现漂亮的闪烁圣诞树,底层是通过光标的闪烁实现效果,可以自定义显示文字和大小,代码关键部位有注释,自行理解
#include <iostream> #include <windows.h> #include <conio.h> using namespace
std; int len; struct Dot { int x; int y; char c; }a[10000000]; int
vis[10000000]; char c[5] = { 35, 36, 37, 38, 79 }; string s = "/\\"; int n;
string me = "Merry Christmas ^_^ !";//可以自己改名字 string fm = "From
Yukisong";//可以自己改名字 void getcur(short int x, short int y)//移动光标函数 { COORD pos =
COORD{ x,y };//定义一个屏幕上的座标 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle, pos);; } void goprint(int x, int y, char c) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), rand() % 16);
getcur(x, y); printf("%c", c); //getcur(0,row);//消除光标影响 } void del(int x, int
y) { getcur(x, y); printf(" "); } int main() { cout << "请输入你喜欢的一个数字(10 -
17),并将窗口最大化:"; cin >> n; cout << endl; int Layer = 2 * n - 1; int Space = 2 * n
- 2; for (int i = 1; i <= Layer; ++i) { if (i & 1) { for (int j = 0; j < 2 * i;
j += 2) { a[len].x = j + Space + 30, a[len].y = i + 5, a[len++].c = c[rand() %
5]; } Space -= 2; } else { int r = 0; for (int j = 0; j < 2 * i; j += 2) {
a[len].x = j + Space + 31, a[len].y = i + 5, a[len++].c = s[r]; r = (r + 1) %
2; } } } for (int i = 0; i < Layer / 3 + 1; ++i) { a[len].x = Layer + 29,
a[len].y = i + 6 + Layer, a[len++].c = '|'; a[len].x = Layer + 30, a[len].y = i
+ 6 + Layer, a[len++].c = '|'; } for (int i = 0; i < me.length(); ++i) {
a[len].x = Layer - 1 + i + 30; a[len].y = Layer / 3 + 10 + Layer; a[len++].c =
me[i]; } for (int i = 0; i < fm.length(); ++i) { a[len].x = Layer - 1 + i + 30;
a[len].y = Layer / 3 + 11 + Layer; a[len++].c = fm[i]; } while (1) { int i =
rand() % len; if ((a[i].c == '\\' || a[i].c == '/') && vis[i]) { continue; }
goprint(a[i].x, a[i].y, a[i].c); vis[i] = 1; } }
 

爱心 (.c)

分成三部分,利用for循环实现简单爱心效果,可以和闪烁的圣诞树结合,写一个闪烁的爱心,有兴趣的小伙伴,可以研究一下
int main(void) { int i, j, k, l, m; char c = 3; // 黑色爱心符号 for (i = 1; i <= 5;
i++) { printf("\n"); } // 同圣诞树一样,爱心也可以拆成三部分输出 // 第一部分是心冠部分两座小山堆 for (i = 1; i <
4; i++) { for (j = 1; j < 27 - i * 2; j++) { printf(" "); } for (k = 1; k <= i
* 4 + 1; k++) { printf("%c", c); } for (l = 1; l <= 9 - 4 * (i - 1); l++) {
printf(" "); } for (m = 1; m <= i * 4 + 1; m++) { printf("%c", c); }
printf("\n"); } // 第二部分是平平无奇的整行输出,撑起中间区域的长度 for (i = 1; i < 4; i++) { for (j =
1; j < 20; j++) { printf(" "); } for (k = 1; k <= 29; k++) { printf("%c", c); }
printf("\n"); } // 最后部分是个倒三角 for (i = 1; i < 8; i++) { for (j = 1; j < 20 + 2 *
i; j++) { printf(" "); } for (k = 1; k <= 29 - 4 * i; k++) { printf("%c", c); }
printf("\n"); } return 0; }
运行结果 

 

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信