当前位置: 首页 > java >正文

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

文章目录

    • 0. 前言
    • 1. 🌈 彩虹文字生成器
      • 1.1 程序效果展示
      • 1.2 完整代码解析
      • 1.3 关键技术详解
        • 1.3.1 Windows控制台API
        • 1.3.2 颜色编码
        • 1.3.3 安全输入
        • 1.3.4 跨平台考虑
    • 2. 🎵 简易音乐播放器
      • 2.1 程序效果展示
      • 2.2 完整代码解析
      • 2.3 关键技术详解
        • 2.3.1 Windows Beep函数
        • 2.3.2 音乐理论基础
        • 2.3.3 数组应用
        • 2.3.4 跨平台替代方案
    • 3. 🧮 斐波那契数列可视化
      • 3.1 程序效果展示
      • 3.2 完整代码解析
      • 3.3 关键技术详解
        • 3.3.1 斐波那契算法
        • 3.3.2 格式化输出
        • 3.3.3 大数处理
        • 3.3.4 可视化技巧
    • 4. 总结

0. 前言

📣按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

本文仍然是通过实例学习C语言,避免枯燥无味地学习。

1. 🌈 彩虹文字生成器

1.1 程序效果展示

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

1.2 完整代码解析

#include <stdio.h>
#include <windows.h>void printRainbowText(const char* text) {int colors[] = {4,12,14,10,9,13,5}; // 红、浅红、黄、绿、蓝、紫、粉for(int i = 0; text[i] != '\0'; i++) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors[i%7]);putchar(text[i]);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); // 恢复默认颜色
}int main() {char text[100];printf("输入要变成彩虹色的文字:");fgets(text, sizeof(text), stdin);printRainbowText(text);return 0;
}

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 完整代码解析

#include <stdio.h>
#include <windows.h>// 音符频率定义
#define C4 262
#define D4 294
#define E4 330
#define F4 349
#define G4 392
#define A4 440
#define B4 494void playNote(int frequency, int duration) {Beep(frequency, duration);
}int main() {// 小星星旋律int melody[] = {C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4};int durations[] = {500,500,500,500,500,500,1000,500,500,500,500,500,500,1000};printf("正在播放:小星星\n");for(int i = 0; i < 14; i++) {playNote(melody[i], durations[i]);}return 0;
}

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 完整代码解析

#include <stdio.h>void printSpaces(int n) {for(int i = 0; i < n; i++) {printf(" ");}
}int main() {int n;printf("输入斐波那契数列项数:");scanf("%d", &n);long long a = 0, b = 1;for(int i = 1; i <= n; i++) {printSpaces((n - i) * 3);for(int j = 0; j < i; j++) {printf("%6lld", b);long long next = a + b;a = b;b = next;}printf("\n");}return 0;
}

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语言的多个核心概念:

  1. 系统API调用:控制台颜色控制、声音播放
  2. 数据结构:数组的应用与多维数据处理
  3. 算法设计:斐波那契数列的迭代实现
  4. 格式化输出:精确控制输出布局
  5. 类型选择:根据需求选择合适的变量类型
http://www.xdnf.cn/news/9992.html

相关文章:

  • CIO大会, AI课笔记手稿分享
  • VScode ios 模拟器安装cocoapods
  • Java Spring Boot 自定义注解详解与实践
  • `docker commit` 和 `docker save`区别
  • 每日c/c++题 备战蓝桥杯(P1011 [NOIP 1998 提高组] 车站)
  • 论文速读《UAV-Flow Colosseo: 自然语言控制无人机系统》
  • If possible, you should set the Secure flag for these cookies 修复方案
  • 操作系统原理第8章:文件管理 重点内容
  • 2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)
  • split_conversion将json转成yolo训练用的txt,在直接按照8:1:1的比例分成训练集,测试集,验证集
  • RuoYi前后端分离框架集成手机短信验证码(二)之前端篇
  • 学习vue3阶段性复习(插槽,Pinia,生命周期)
  • VSCode+Cline 安装配置及使用说明
  • vue+threeJs 绘制3D圆形
  • Linux 的主要时钟类型
  • 菜鸟之路Day36一一Web开发综合案例(部门管理)
  • ARXML解析与可视化工具
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)
  • AI科技前沿动态:5.26 - 5.30 一周速览
  • Jetson Orin Nano - SONY imx415 camera驱动开发
  • 2025年5月24号高项综合知识真题以及答案解析(第1批次)
  • redis未授权(CVE-2022-0543)
  • Jvm 元空间大小分配原则
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 下
  • SolidWorks 文件打开时电脑卡顿问题分析与解决
  • 脱发因素机器学习数据分析
  • Windows10下使用QEMU安装Ubuntu20.04虚拟机,并启用硬件加速
  • Numpy 数组操作:高效的数据处理利器
  • 【AI赋能,视界升级】智微智能S134 AI OPS,重构智慧大屏未来