作为嵌入式工程师,写一个效率高效,思路清晰的C语言程序是我们的终极目标。那么,怎样才能写好这样的程序呢?首先,我们要用C语言的思维方式来进行程序的构架构建;其次,要有良好的C语言算法基础,以此来实现程序的逻辑构架;最后,灵活运用C语言的指针操作。虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。那么,下文将给大家介绍一下如何耍这“三板斧”。嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数。如此反复,最终剩下的猴子便是猴子的大王。那么,这“三板斧”该如何使用呢?第一板斧,用C语言进行程序构架构建程序分为三大部分:a、数据获取,为了程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数;b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;c、提高程序的运行速率,少用循环多用指针。第二板斧,用C语言进行逻辑实现a、 数据获取,通过printf和scanf进行参数的获取。
同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。b、 /* 定义链表节点类型 *//* 读入问题条件 */printf("input total num:");scanf("%d", &n);printf("from which num begin:");scanf("%d", &k);if(k>n||k==0){printf("please input the right begin num");return 1; }printf("input the out num:");scanf("%d", &m);if(m>n||m==0){ printf("please input the right del num");return 2; }
通过该步骤后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建过程中需要注意一下几点:内存的开辟,此时遵守使用多少开辟多少的原则。如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:链表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况。c、 /* 找到第 k 个节点 */typedef struct node{int data;struct node *next;}linklist;构建循环链表进行“猴子”的圆圈建设。/* 创建循环链表,头节点也存信息 */head = (linklist*) malloc(sizeof(linklist));p = head;p->data = 1;p->next = p;/* 初始化循环链表 */for (i = 2; i <= n; i++){s = (linklist*) malloc(sizeof(linklist));s->data = i;s->next = p->next;p->next = s;p = p->next;}
找到从第几个位置开始计数。此时,p指向开始的“猴子”。因为采用了链表方法,这个过程只需要关注p指针的next指向即可。a、 保存初始的“猴子”圆圈参数。p = head;for (i = 1; i <= k; i++){p = p->next;}
为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurry)来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除。b、 猴子查数。猴子查数是整个程序的关键,需要完成以下任务:a、找到开始的“猴子”数;b、删除该“猴子”;c、将删除掉的循环链表首尾连接起来。/* 保存节点总数 */total = n;printf("\nthe out num:");q = head;
通过以上数据运算,可以完成相应链表元素的删除,这或许就是C语言程序的魅力所在。第三把斧,使用C语言的指针比如,本程序的链表指针的定义,p,s,q。/* 只剩一个节点时停止循环 */while (total != 1){/* 报数过程,p指向要删除的节点 */for (i = 1; i < m; i++){p = p->next;}/* 打印要删除的节点序号 */printf("[%d] ", p->data);/* q 指向 p 节点的前驱 */while (q->next != p){q = q->next;}/* 删除 p 节点 */q->next = p->next;/* 保存被删除节点指针 */s = p;/* p 指向被删除节点的后继 */p = p->next;/* 释放被删除的节点 */free(s);/* 节点个数减一 */total--;}/* 打印最后剩下的节点序号 */printf("\n\nthe last num:[%d] \n\n", p->data);free(p);}
linklist *head, *p, *s, *q;
我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度,这在另一方面达到了我们的“第三把斧”的目的。指针的优势,或许在本程序中表现的不明显,在大量数据和对操作速度要求比较敏感的情况下会很明显,比如Linux内核中,就会有很好的体现。总之,对于嵌入式工程师,不但能设计出好的硬件电路,如果也能写出好的软件程序就会让我们的生活更加美好。工程师们,耍起这“C语言的三把斧”!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7642浏览量
144638
发布评论请先 登录
相关推荐
热点推荐
C语言特性
,开发者们可以在这些社区中分享经验、交流技术、解决问题。在社区中,开发者们可以找到大量的开源项目、代码示例、技术文章等资源,为学习和使用 C 语言提供了有力的支持。当遇到技术难题时,在社区中提问往往能得到其他开发者的热心帮助,快
发表于 11-24 07:01
PCB抄板打样提速‘三板斧’:从扫描到交付的全链路优化
一站式PCBA加工厂家今天为大家讲讲电路板PCB抄板打样怎么提速?电路板PCB抄板打样提速秘籍。电路板抄板打样提速可通过以下方法实现: 电路板PCB抄板打样提速秘籍! 一、技术流程优化:缩短核心环节耗时 高精度扫描与智能图像转换 采用专业设备对电路板进行高分辨率扫描(精度达0.02mm),确保一次成像准确率,避免重复扫描。 通过智能软件将扫描图像快速转换为可编辑的PCB文件格式,速度较传统方式提升40%,减少人工绘制时间。 元器件识别与BOM清单
软件的力量:玩转电子万能试验机控制系统的高级技巧
电子万能试验机的效能发挥,不仅依赖硬件设备的性能,更离不开控制系统软件的灵活运用。很多操作人员仅将软件视为“参数输入工具”,却忽略了其隐藏的强大功能。实际上,熟练掌握软件的高级技巧,能让测试流程更高
HarmonyOSAI编程万能卡片生成(一)
基于AI大模型理解开发者的卡片需求信息,通过对话式的交互智能生成HarmonyOS万能卡片工程。
使用约束
建议从以下维度描述卡片需求:
当前不支持在生成卡片预览图后继续描述需求进行增量修改。
万能
发表于 09-08 17:09
广州邮科三相逆变电源:从直流220V到交流380V,工业用电的“万能转换器”
在工业领域,电力问题就像一场“无声的战役”——设备突然停机、电压不稳导致故障、临时用电无处可接……这些问题不仅影响效率,还可能造成损失。而广州邮科推出的三相逆变电源,正是为解决这些痛点而生。今天,我们就用“大白话”聊聊这款“电力转换神器”,看看它如何成为工业场景的“万能转
米朗科技成功在“新三板”挂牌上市,股票代码:874771
2025年5月9日正式在北交所“新三板”挂牌!股票代码:874771,股票简称:米朗科技。这一里程碑事件标志着米朗科技在资本市场的新起点,也预示着企业将迎来更加广阔的发展空间和机遇。米朗科技成立
储能BMS通信“卡壳”?CAN转EtherCAT让电池数据“跑起来”
提升至±2%以内。
技术硬核:通信转换的“三板斧”
1. 数据“翻译”的门道
CAN的8字节数据帧如何适配EtherCAT的PDO?通过网关配置工具建立映射表,把电池温度、电压等信号按优先级“打包
发表于 07-18 15:32
DevEco CodeGenie 鸿蒙AI 辅助编程初次使用
上下文自动补全。 万能卡片生成 :辅助创建 HarmonyOS 万能卡片,提升开发效率。 二、插件获取与安装指南 获取方式 访问华为开发者联盟下载中心
湖北位移传感器公司成功登陆“新三板”
5月9日,湖北米朗科技股份有限公司(简称:米朗科技,代码:874771)在全国中小企业股份转让系统(“新三板”)成功挂牌,这是枣阳市第一家在“新三板”挂牌的本土企业。由此,该市资本市场建设实现新突破
深入理解C语言:C语言循环控制
在C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循环控制语句,如break、continue和
突破工业接口壁垒!ARK(方舟微)DMZ42C10S让PLC\\\"万能适配\\\"成为现实!
突破工业接口壁垒!ARK(方舟微)DMZ42C10S让PLC\"万能适配\"成为现实!
发表于 03-27 15:20
万能七彩充开关电源电器的制作
手机万能七彩充电器的制作过程JC820型手机万能充电器套件制成后,适合充容量为250~3000mA锂离子、镍氢电池;充电时,七彩灯闪烁,指示灯的颜色依次变化,发出绚丽多彩的七彩光芒,饱和后熄灭
发表于 03-26 14:17
物联网 + 设备管理,让管理触手可及
物联网技术快速发展,设备管理面临三大挑战:分散、数据孤岛、安全隐患。中设智控采用分层架构和智能维护模式,提高设备管理效率和安全性。物联网设备管理“三板斧”包括分布式管理、智能维护和数据驱动预测性维护。
PID控制算法的C语言实现:PID算法原理
在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握 PID 算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵
发表于 02-26 15:24
效率大升!AI赋能鸿蒙万能卡片开发
万能卡片,作为鸿蒙生态应用和元服务的重要展示形式,凭借将关键信息和核心操作前置,实现服务直达、减少跳转层级的体验效果,备受用户和开发者青睐。但传统卡片的设计和编码流程相对繁琐,影响了万能卡片的搭建

C语言的万能“三板斧”
评论