目录
系列文章
写在前面
圣诞节
C语言
圣诞树
写在后面
系列文章
序号 | 目录 | 直达链接 |
1 | 爱心代码 | https://want595.blog.csdn.net/article/details/136360684 |
2 | 李峋同款跳动的爱心 | https://want595.blog.csdn.net/article/details/139722249 |
3 | 满屏飘字代码 | https://want595.blog.csdn.net/article/details/136342476 |
4 | 大雪纷飞代码 | https://want595.blog.csdn.net/article/details/140735166 |
5 | 烟花代码 | https://want595.blog.csdn.net/article/details/140813777 |
6 | 黑客帝国字母雨 | https://want595.blog.csdn.net/article/details/139923742 |
7 | 樱花树 | https://want595.blog.csdn.net/article/details/140690893 |
8 | 奥特曼 | https://want595.blog.csdn.net/article/details/141123424 |
9 | 圣诞树 | https://want595.blog.csdn.net/article/details/141207980 |
写在前面
虽然小编是个python大佬(很明显是自封的),但是小编刚接触编程学的第一门语言就是C语言!于是小编决定用C语言实现了一棵圣诞树送给大家,感谢大家的喜欢~
圣诞节
圣诞节是西方的重要节日之一,每年12月25日庆祝。它是基督教的一个节日,用于纪念耶稣基督的诞生。圣诞节的起源可以追溯到古罗马时期的康复节和北欧的冬至节,随着基督教的发展,圣诞节逐渐被定为耶稣基督的诞生纪念日。
圣诞节是一个寓意深刻的节日,它象征着和平、爱和希望。在圣诞节之前,许多家庭会在家里挂上装饰物,如树形装饰、彩灯、装饰花环等,以示庆祝。此外,人们还会在圣诞节期间赠送礼物、烹饪美食、唱圣诞歌曲、参加聚会等庆祝活动。
圣诞节也是商业活动的重要时间。在这个节日之前,商家们会推出各种促销活动,吸引消费者购买礼品、美食、装饰品等。此外,圣诞老人也成为了这个节日的一个重要符号,商家们会将他带到商场,给孩子和成年人带来快乐。
总的来说,圣诞节是一个寓意深刻的节日。不仅它是基督教的一个重要节日,更是一个和平、爱和希望的象征。通过参与圣诞节的各种活动,我们可以感受到这些美好品质的重要性,体验到与家人和朋友在一起的欢乐时光。
C语言
C语言是一种高级编程语言,它于1972年由Dennis Ritchie在贝尔实验室开发。C语言的设计目的是为了开发UNIX操作系统。它是一种通用的、基于过程的编程语言,适用于各种领域的软件开发。C语言的设计理念是简洁、高效、可移植和可扩展。
C语言的特点包括:
1.语法简单:C语言的语法与英语类似,易于学习和记忆。
2.高效:C语言可以直接操作内存,而不需要太多的系统资源和时间。
3.可移植:C语言的源代码可以在不同的计算机平台上进行移植,只需要进行少量的修改。
4.可扩展:C语言程序可以很容易地扩展和修改,因为它的模块化结构使得程序员可以添加、删除和修改程序的各个部分。
C语言的应用广泛,特别是在嵌入式系统、操作系统和编译器开发中。此外,C语言还被广泛用于游戏开发、桌面应用程序、网络编程和科学计算。
C语言的学习对于计算机科学和软件工程的学生来说是很重要的。理解C语言的基础原理和编程范例可以帮助学生更好地理解其他高级计算机语言,如C++、Java和Python等。
总之,C语言是一种非常重要的编程语言,它的设计理念和应用广泛性已经使其成为计算机科学的基础知识之一。
圣诞树
下载链接
点击下载
完整程序
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define PI 3.14159265359
#define T px+scale*r*cosf(theta),py+scale*r*sin(theta)
char love[20][43] = {
"111111111111111111111111111111111111111111",
"111111111111110000111111100001000111111111",
"110000000000000000011111100011000111111111",
"110000111001110001111111000110001111111111",
"111100010000110000111111100011000000000011",
"111100001000100011111110000100011111100011",
"100000000000000000001110000100011111000111",
"100000000000000000011100000000110001000111",
"100011100011111000110000000000110001111111",
"111011100011111100111111000111110001111111",
"111000000000000000111111000110000000001111",
"111111000111111111111111000110000000000111",
"111110001111111111111111000100010001000111",
"111000000000000001111111000000010001100011",
"111000000011000011111111000000110001100001",
"110001110000000111111111000001110001110111",
"100011111000011111111111000111110001111111",
"111110000000000000011111000111000001111111",
"111000000111110000011111000111000011111111",
"111111111111111111111111111111111111111111"
};
void gotoxy(int x, int y) {
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { x,y };
SetConsoleCursorPosition(hout, pos);
}
void SetColor(int color) {
if (color == 0)color = 0x04;
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, color);
}
void showsnow() {
SetColor(rand() % 16);
int x = rand() % 120;
int y = rand() % 40;
gotoxy(x, y);
putchar('*');
}
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;
}
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.95 - 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[]) {
system("mode con cols=120 lines=42");
HWND consoleHandle = GetConsoleWindow();
// 获取系统屏幕分辨率
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
// 获取窗口大小
RECT consoleRect;
GetWindowRect(consoleHandle, &consoleRect);
int consoleWidth = consoleRect.right - consoleRect.left;
int consoleHeight = consoleRect.bottom - consoleRect.top;
// 计算窗口应该出现的位置
int win_x = (screenWidth - consoleWidth) / 2;
int win_y = (screenHeight - consoleHeight) / 2;
// 使用SetWindowPos函数设置新的窗口位置
SetWindowPos(consoleHandle, 0, win_x, win_y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
srand((int)time(NULL));
SetConsoleCP(437);
SetConsoleOutputCP(437);
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) {
SetColor(rand() % 16);
putchar('\3');
} else {
if (ribbon()) {
putchar('=');
} else {
SetColor(rand() % 16);
putchar('\3');
}
}
} else {
putchar(' ');
}
}
}
int i, j;
int x, y = 3;
for (i = 0; i < 19; i++, y++) {
x = 60;
for (j = 0; j < 42; j++, x++) {
gotoxy(x, y);
if (love[i][j] == '1') {
putchar(' ');
} else {
SetColor(0x09);
putchar('*');
}
}
}
for (n = 0; n++ < 365;) {
showsnow();
}
gotoxy(0, 40);
getchar();
return 0;
}
代码分析
这是一个使用C语言编写的圣诞树雪花动画程序。程序的主要功能是在控制台中绘制一个圣诞树图案,并在圣诞树图案下方通过随机生成的雪花效果进行装饰。
程序的主要功能代码如下:
- 通过定义字符数组`love`,在控制台中绘制一个圣诞树图案。
- 通过调用`gotoxy`函数和`putchar`函数,在控制台中输出字符,实现圣诞树图案的显示。
- 通过调用`SetColor`函数和`putchar`函数,设置字符的颜色和输出字符。
程序的主要算法代码如下:
- 定义变量`sx`和`sy`,用于存储当前绘制雪花的位置。
- 定义函数`sdCircle`,用于计算点`(px, py)`到原点`(sx, sy)`的距离减去半径`r`的值。
- 定义函数`opUnion`,用于比较两个值的大小并返回较小的值。
- 定义函数`ribbon`,用于判断当前绘制位置是否在雪花丝带范围内。
- 定义函数`f`,用于递归计算点`(px, py)`在圣诞树图案中的距离。
- 在主函数中,通过循环调用`f`函数和其他函数,绘制圣诞树图案和雪花效果。
程序的运行过程如下:
- 设置控制台窗口的大小和位置。
- 设置控制台的编码格式。
- 解析命令行参数,获取绘制圣诞树图案的次数和缩放比例。
- 通过循环调用`f`函数和其他函数,绘制圣诞树图案和雪花效果。
- 调用`showsnow`函数,随机生成雪花并显示在控制台中。
- 获取用户的输入,并结束程序的运行。
以上是对该程序的详细分析,包括主要功能和算法代码的解释,以及程序的运行过程说明。
运行结果
写在后面
我是一只有趣的兔子,感谢你的喜欢!