C语言创意编程:用趣味实例玩转底子语法(4)

[复制链接]
发表于 2025-7-7 20:17:11 | 显示全部楼层 |阅读模式
0. 媒介

   📣按照国际惯例,首先声明:本文只是我自己学习的理解,固然参考了他人的宝贵见解及成果,但是内容大概存在不精确的地方。如果发现文中错误,盼望品评指正,共同进步。
  本文仍然是通过实例学习C语言,制止枯燥无味地学习。
1. 🌈 彩虹笔墨生成器

1.1 程序效果展示

这个程序能够在控制台中输出彩色笔墨,模仿彩虹效果,为普通的命令行界面增添视觉吸引力。

1.2 完整代码

  1. #include <stdio.h>   
  2. #include <windows.h>  
  3. // 定义一个函数:打印彩虹色文本
  4. void printRainbowText(const char* text)
  5. {
  6.     // 定义一组颜色代码(前景色):
  7.     // 红、浅红、黄、绿、蓝、紫、粉
  8.     int colors[] = { 4,12,14,10,9,13,5 };
  9.     for (int i = 0; text[i] != '\0'; i++)
  10.     {
  11.         // 获取控制台句柄,并设置当前字符的颜色,循环上面7种颜色
  12.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors[i % 7]);
  13.         putchar(text[i]);
  14.     }
  15. }
  16. int main()
  17. {
  18.     // 定义一个字符数组,用于存储用户输入的文本(最大长度为 99)
  19.     char text[100];
  20.     printf("输入想要变成彩虹色的文字:");
  21.     // 使用 fgets 读取一行输入,最多读取 sizeof(text) - 1 个字符
  22.     // stdin 表示标准输入(键盘输入)
  23.     fgets(text, sizeof(text), stdin);
  24.     printRainbowText(text);
  25.     return 0;
  26. }
复制代码
1.3 关键技术详解

1.3.1 Windows控制台API

SetConsoleTextAttribute()是Windows API提供的控制台文本属性设置函数,可以改变文本颜色和背景色。我们通过GetStdHandle(STD_OUTPUT_HANDLE)获取标准输出句柄来操纵控制台。
1.3.2 颜色编码

Windows控制台使用特定的颜色编码:


  • 4:红色
  • 12:浅红色
  • 14:黄色
  • 10:绿色
  • 9:蓝色
  • 13:紫色
  • 5:粉红色
通过循环使用这些颜色代码,我们实现了彩虹效果。
1.3.3 安全输入

使用fgets()而非scanf()读取用户输入,可以制止缓冲区溢出问题,是更安全的输入方式。
1.3.4 跨平台考虑

在Linux/macOS系统中,可以使用ANSI转义序列来实现类似效果,如\033[31m表示红色。
2. 🎵 浅易音乐播放器

2.1 程序效果展示

这个程序能够播放简单的音乐旋律,通过控制蜂鸣器频率来模仿不同音高的音符。

2.2 完整代码

  1. #include<stdio.h>
  2. #include<windows.h>
  3. #define C4 262
  4. #define D4 294
  5. #define E4 330
  6. #define F4 349
  7. #define G4 392
  8. #define A4 440
  9. #define B4 494
  10. void playNote(int frequency, int duration)
  11. {
  12.         Beep(frequency, duration);
  13. }
  14. int main()
  15. {
  16.         //小星星
  17.         int melody[] = { C4,C4,G4,G4,A4,A4,C4,F4,F4,E4,E4,D4,D4,C4 };
  18.         int durations[] = { 500,500,500,500,500,500,800,500,500,500,500,500,500,500 };
  19.         printf("正在播放:小星星\n");
  20.         for (int i = 0; i < 14; i++)
  21.         {
  22.                 playNote(melody[i], durations[i]);
  23.         }
  24.         return 0;
  25. }
复制代码
2.3 关键技术详解

2.3.1 Windows Beep函数

Beep()是Windows API提供的简单声音函数,担当频率(Hz)和持续时间(ms)两个参数。它可以驱动主板蜂鸣器发出指定音高的声音。
2.3.2 音乐理论底子

程序中界说了基本音阶的频率:


  • C4 (中音Do): 262Hz
  • D4 (Re): 294Hz
  • E4 (Mi): 330Hz
  • F4 (Fa): 349Hz
  • G4 (Sol): 392Hz
  • A4 (La): 440Hz
  • B4 (Si): 494Hz
2.3.3 数组应用

使用两个数组分别存储音符频率和持续时间,通过索引对应,实现了旋律和节奏的组合。
2.3.4 跨平台替换方案

在非Windows平台,可以使用sound()函数或第三方库如PortAudio来实现类似功能
3. 🧮 斐波那契数列可视化

3.1 程序效果展示

这个程序不但计算斐波那契数列,还能以金字塔形式可视化数列的增长模式。

3.2 完整代码剖析

  1. #include <stdio.h>
  2. void printSpaces(int n) {
  3.     for(int i = 0; i < n; i++) {
  4.         printf(" ");
  5.     }
  6. }
  7. int main() {
  8.     int n;
  9.     printf("输入斐波那契数列项数:");
  10.     scanf("%d", &n);
  11.    
  12.     long long a = 0, b = 1;
  13.     for(int i = 1; i <= n; i++) {
  14.         printSpaces((n - i) * 3);
  15.         for(int j = 0; j < i; j++) {
  16.             printf("%6lld", b);
  17.             long long next = a + b;
  18.             a = b;
  19.             b = next;
  20.         }
  21.         printf("\n");
  22.     }
  23.     return 0;
  24. }
复制代码
3.3 关键技术详解

3.3.1 斐波那契算法

斐波那契数列界说为:F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)。程序使用迭代法计算,制止了递归的低效问题。
3.3.2 格式化输出

使用%6lld确保每个数字占据6个字符宽度,保持金字塔外形整洁。printSpaces()函数控制每行的缩进量。
3.3.3 大数处理

使用long long类型存储数列项,可以支持更大的数值范围,制止整数溢出。
3.3.4 可视化技巧

通过计算每行前的空格数目,实现了金字塔外形的排列,直观展示了数列的增长模式。
4. 总结

通过这三个全新的实例,我们学习了C语言的多个焦点概念:

  • 系统API调用:控制台颜色控制、声音播放
  • 数据结构:数组的应用与多维数据处理
  • 算法计划:斐波那契数列的迭代实现
  • 格式化输出:准确控制输出布局
  • 类型选择:根据需求选择符合的变量类型

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

快速回复 返回顶部 返回列表