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

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

文章目录

    • 0. 前言
    • 1. 📊 动态条形图
      • 1.1 程序效果展示
      • 1.2 完整代码解析
      • 1.3 关键技术详解
        • 1.3.1 Unicode字符应用
        • 1.3.2 函数封装思想
        • 1.3.3 输入处理
        • 1.3.4 跨平台考虑
    • 2. 🔤 字母金字塔
      • 2.1 程序效果展示
      • 2.2 完整代码解析
      • 2.3 关键技术详解
        • 2.3.1 嵌套循环结构
        • 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 程序效果展示

动态条形图是一种直观的数据可视化方式,在我们的程序中,使用Unicode字符"█"来构建条形图。用户输入条形长度后,程序会立即生成对应的条形图。

动态条形图演示

1.2 完整代码解析

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>void draw_bar(int length)
{for (int i=0; i < length; i++)printf("\u2588"); // \u2588代表 █
}int main()
{int bar_length;printf("输入条形长度:");scanf("%d", &bar_length);draw_bar(bar_length);return 0;
}

1.3 关键技术详解

1.3.1 Unicode字符应用

程序中使用了\u2588来表示"█"字符,这是Unicode中的全块字符。Unicode为各种符号提供了统一的编码标准,在终端显示中能够呈现完整的方块效果,非常适合用于构建条形图。

1.3.2 函数封装思想

draw_bar()函数将条形图的绘制逻辑封装起来,体现了模块化编程的思想。这种封装使得:

  • 主函数更加简洁清晰
  • 条形图绘制逻辑可以复用
  • 便于后期维护和扩展
1.3.3 输入处理

使用scanf()函数获取用户输入,虽然简单但存在安全隐患。在实际项目中,建议添加输入验证,确保输入的是有效数字。

1.3.4 跨平台考虑

Unicode字符在不同平台上的显示可能有所差异。在开发跨平台应用时,需要测试在各个终端中的显示效果。

2. 🔤 字母金字塔

2.1 程序效果展示

字母金字塔是一个经典的编程练习题,它展示了如何通过嵌套循环控制字符输出,形成美观的对称图案。

字母金字塔演示

2.2 完整代码解析

#define _CRT_SECURE_NO_WARNINGS  
#include <stdio.h>               int main()
{int rows;  printf("输入金字塔层数:");  scanf("%d", &rows);         for (int i = 0; i < rows; i++){for (int j = 0; j < rows - i - 1; j++)printf(" ");for (char c = 'A'; c < 'A' + i; c++)printf("%c", c);for (char c = 'A' + i; c >= 'A'; c--)printf("%c", c);printf("\n"); }return 0;  
}

2.3 关键技术详解

2.3.1 嵌套循环结构

程序使用了三层嵌套循环:

  1. 外层循环控制金字塔的行数
  2. 第一个内层循环控制每行前面的空格数量
  3. 后两个内层循环分别处理字母的升序和降序输出
2.3.2 字符运算技巧

'A' + i利用了ASCII码的特性,通过整数运算得到对应的字母字符。这种技巧在生成序列字符时非常有用。

2.3.3 对称输出算法

字母金字塔的关键在于对称输出:

  1. 先输出从’A’开始的升序字母(不包含顶点)
  2. 然后输出从当前字母开始的降序字母(包含顶点)
    这种算法保证了金字塔的对称性。
2.3.4 格式化输出

通过精确控制空格和字符的输出数量,实现了金字塔的居中对齐效果。这种格式化输出技巧在文本界面编程中非常重要。

3. 🔄 指针魔术:变量交换

3.1 程序效果展示

指针是C语言的精髓所在。这个实例展示了如何通过指针操作实现两个变量的交换,而无需使用临时变量。

变量交换演示

3.2 完整代码解析

#include <stdio.h>               void swap(int* a, int* b)
{*a = *a + *b;*b = *a - *b;*a = *a - *b;
}int main()
{int x = 10; int y = 20;printf("交换前x=%d,y=%d\n", x, y);swap(&x, &y);printf("交换后x=%d,y=%d\n", x, y);
}

3.3 关键技术详解

3.3.1 指针基础

指针是存储内存地址的变量。在这个例子中:

  • int* a声明了一个指向整数的指针
  • &x获取变量x的内存地址
  • *a解引用指针,访问指针指向的值
3.3.2 无临时变量交换算法

交换过程分为三步:

  1. *a = *a + *b:将两数之和存入a指向的内存
  2. *b = *a - *b:用和减去原始b值,得到原始a值存入b
  3. *a = *a - *b:用和减去现在的b值(原始a),得到原始b值存入a
3.3.3 潜在问题

虽然这种交换方法很巧妙,但存在两个潜在问题:

  1. 整数溢出:当a和b值很大时,相加可能超出int的范围
  2. 同一地址:如果a和b指向同一内存,会导致错误结果
3.3.4 指针参数传递

函数通过指针参数修改外部变量的值,这是C语言中实现"引用传递"效果的方式。理解这一点对掌握C函数调用机制至关重要。

4. 总结

通过这三个实例,我们学习了C语言的多个核心概念:

  1. 基础语法:变量、循环、条件判断
  2. 核心概念:函数、指针、内存管理
  3. 实用技巧:Unicode字符、格式化输出、算法设计
  4. 编程思想:模块化设计、代码复用、问题分解
http://www.xdnf.cn/news/9221.html

相关文章:

  • ES 在大查询场景下导致 GC 频繁,如何定位和解决?
  • webstorm调试vite工程(后端开发人员版)
  • 从十进制到二进制:深入理解定点数与浮点数表示
  • 高压单端探头,如何实现大比例的衰减?
  • 【NLP基础知识系列课程-Tokenizer的前世今生第二课】NLP 中的 Tokenizer 技术发展史
  • 【Vue3】生命周期 hook函数 toRef
  • 通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习
  • 浅解Vue 数据可视化开发建议与速度优化
  • 【华为云物联网】如何实现在 MQTT.fx 上模拟数据间隔上传一次,并按设定系数变动数据
  • HTML 表单与输入:基础语法到核心应用全解析
  • UBUNTU20.04 配置以QT界面程序代替系统界面启动,以及如何在tty模式下以linuxfb形式启动
  • Halcon 霍夫变换
  • 获取页面上当前激活(获得焦点)的元素
  • Frequent values/gcd区间
  • 行为型:中介者模式
  • C++11 中引入的`final` 关键字作用。
  • ImageMagick 是默认使用 CPU 来处理图像,也具备利用 GPU 加速的潜力
  • 数据库的事务(Transaction)
  • 路桥隧养护决策系统
  • atomic.Value 中存储的数据是否会被 GC
  • vue展示修改前后对比,并显示修改标注diff
  • 四足机器人环境监测系统相关问题
  • Mac 每日磁盘写入量异常高
  • AI如何颠覆财务预测?——用Python打造自动化智能分析系统
  • 基于Java,SpringBoot,Vue,UniAPP宠物洗护医疗喂养预约服务商城小程序管理系统设计
  • SQL Server 简介和与其它数据库对比
  • 联想小新笔记本电脑静电问题导致无法开机/充电的解决方案
  • 远程控制技术全面解析:找到适合你的最佳方案
  • 北京大学肖臻老师《区块链技术与应用》公开课:03-BTC-数据结构
  • 计算机网络的性能指标