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.pswp.cn/news/907659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】神经网络期末复习资料(题库)

神经网络期末复习资料&#xff08;题库&#xff09; 链接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【测试】 Th…

Python训练营打卡 Day41

简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 → Batch…

leetcode216.组合总和III:回溯算法中多条件约束下的状态管理

一、题目深度解析与组合约束条件 题目描述 找出所有相加之和为n的k个数的组合&#xff0c;且满足以下条件&#xff1a; 每个数只能使用一次&#xff08;范围为1到9&#xff09;所有数字均为唯一的正整数组合中的数字按升序排列 例如&#xff0c;当k3&#xff0c;n9时&#…

Java面试实战:从Spring到大数据的全栈挑战

Java面试实战&#xff1a;从Spring到大数据的全栈挑战 在某家知名互联网大厂&#xff0c;严肃的面试官正在面试一位名叫谢飞机的程序员。谢飞机以其搞笑的回答和对Java技术栈的独特见解而闻名。 第一轮&#xff1a;Spring与微服务的探索 面试官&#xff1a;“请你谈谈Spring…

基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;饲养员,健康登记,工作进度,动物信息,进食信息,动物健康,动物医治,饲料信息,工作留言 开题报告内容 基于Vue框架的动物园饲养管理系统开题报告 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着城市化进程加快和公众对生…

docker镜像与dockerfile

一、docker镜像 1.什么是镜像 容器解决应用开发、测试和部署的问题&#xff0c;而镜像解决应用部署环境问题。镜像是一个只读的容器模板&#xff0c; 打包了应用程序和应用程序所依赖的文件系统以及启动容器的配置文件&#xff0c;是启动容器的基础。镜像所打 包的文件内容就是…

流媒体基础解析:音视频封装格式与传输协议

在视频处理与传输的完整流程中&#xff0c;音视频封装格式和传输协议扮演着至关重要的角色。它们不仅决定了视频文件的存储方式&#xff0c;还影响着视频在网络上的传输效率和播放体验。今天&#xff0c;我们将深入探讨音视频封装格式和传输协议的相关知识。 音视频封装格式 什…

普中STM32F103ZET6开发攻略(一)

各位看官老爷们&#xff0c;点击关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 目录 普中STM32F103ZET6开发攻略 1. GPIO端口实验——点亮LED灯 1.1 实验目的 1.2 实验原理 1.3 实验环境和器材…

AWS API Gateway 配置WAF(中国区)

问题 需要给AWS API Gateway配置WAF。 AWS WAF设置 打开AWS WAF首页&#xff0c;开始创建和配置WAF&#xff0c;如下图&#xff1a; 设置web acl名称&#xff0c;然后开始添加aws相关资源&#xff0c;如下图&#xff1a; 选择资源类型&#xff0c;但是&#xff0c;我这里出…

测试分类详解

测试分类 一、按测试对象分类 1. 界面测试 1.1 测试内容介绍 界面测试验证用户界面(UI)的视觉呈现和交互逻辑&#xff0c;确保符合设计规范并提供良好的用户体验。测试内容包括&#xff1a; 页面布局和元素对齐字体、颜色和图标一致性交互反馈&#xff08;悬停、点击状态&a…

打开NRODIC SDK编译不过怎么处理,keil与segger studio

打开NRODIC SDK编译不过怎么处理,以下是keil处理. 1,如图,不要安装安装也不会过 2. 不要安装点击否 3.点击确定后进来这个样子 4.这里选择这个勾,OK后就不会再有后面的pack_license 5.去掉勾后这里要选择自己SDK对应的pack版本,我的是8.27.0 6.OK后弹出个界面也要反复选择…

HarmonyOS ArkUI-X开发中的常见问题及解决方案

一、跨平台编译与适配问题 1. 平台特定API不兼容 ‌问题现象‌&#xff1a;使用Router模块的replaceUrl或startAbility等鸿蒙专属API时&#xff0c;编译跨平台工程报错cant support crossplatform application。 ‌解决方案‌&#xff1a; 改用ohos.router的跨平台封装API&a…

CSS篇-2

4. position 的值分别是相对于哪个位置定位的&#xff1f; position 属性是 CSS 布局中一个非常核心的概念&#xff0c;它允许我们精确控制元素在文档中的定位方式&#xff0c;从而脱离或部分脱离正常的文档流。理解 position 的不同值以及它们各自的定位基准&#xff0c;是实…

设计模式:观察者模式 - 实战

一、观察者模式场景 1.1 什么是观察者模式&#xff1f; 观察者模式&#xff08;Observer Pattern&#xff09;观察者模式是一种行为型设计模式&#xff0c;用于定义一种一对多的依赖关系&#xff0c;当对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更…

Axure中继器交互完全指南:核心函数解析×场景实战×避坑策略(懂得才能应用)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 主要内容:中继器核心函数解析、场景方法详解、注意事项、特殊函数区别 课程目标:提高中继器的掌握…

【设计模式-4.5】行为型——迭代器模式

说明&#xff1a;本文介绍设计模式中&#xff0c;行为型设计模式之一的迭代器模式。 定义 迭代器模式&#xff08;Iterator Pattern&#xff09;&#xff0c;也叫作游标模式&#xff08;Cursor Pattern&#xff09;&#xff0c;它提供一种按顺序访问集合/容器对象元素的方法&…

鸿蒙OSUniApp自定义手势识别与操作控制实践#三方框架 #Uniapp

UniApp自定义手势识别与操作控制实践 引言 在移动应用开发中&#xff0c;手势交互已经成为提升用户体验的重要组成部分。本文将深入探讨如何在UniApp框架中实现自定义手势识别与操作控制&#xff0c;通过实际案例帮助开发者掌握这一关键技术。我们将以一个图片查看器为例&…

【数据结构】树形结构--二叉树

【数据结构】树形结构--二叉树 一.知识补充1.什么是树2.树的常见概念 二.二叉树&#xff08;Binary Tree&#xff09;1.二叉树的定义2.二叉树的分类3.二叉树的性质 三.二叉树的实现1.二叉树的存储2.二叉树的遍历①.先序遍历②.中序遍历③.后序遍历④.层序遍历 一.知识补充 1.什…

从认识AI开始-----解密LSTM:RNN的进化之路

前言 我在上一篇文章中介绍了 RNN&#xff0c;它是一个隐变量模型&#xff0c;主要通过隐藏状态连接时间序列&#xff0c;实现了序列信息的记忆与建模。然而&#xff0c;RNN在实践中面临严重的“梯度消失”与“长期依赖建模困难”问题&#xff1a; 难以捕捉相隔很远的时间步之…