《嵌入式工程师掌握编程的几个要素.docx》由会员分享,可在线阅读,更多相关《嵌入式工程师掌握编程的几个要素.docx(7页珍藏版)》请在第壹文秘上搜索。
1、作为报入式工程册,怎么写出效率高、思路清晰的C语言程序呢?要用C语言的思维方式来进行程序的构架构建要有良好的C语言算法基础,以此来实现程序的逻辑构架灵活运用C语言的指针操作虽然看起来以上的说法很抽象,给人如眩第里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。嵌入式工程册在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数,如此反笑,最终剜下的猴子便是猴子的大王。用C语言的思维方式进行程序构架构建程序
2、分为三大部分:a、数据获取,为程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数:b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;C、提高程序的运行速率,少用循环多用指针。用C语言进行逻辑实现1 .数据获取,通过printf和scanf进行参数的获取,/*读入问题条件7printf(inputtota1.num:);scanf(%d,;&n);printf(fromwhichnumbegin:);scanf(%d&k);if(knk=0)(printf(p1.easeinputtherightbeginnum);return1;printf(inputtheout
3、num:);scanf(%d,&m);if(mnm=0)(printf(p1.easeinputtherightde1.num);return2;同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。2,定义链表节点类型typedefstructnodeintdata;structnode*next;)ink1.ist;构建循环链表进行“猴子”的10圈建设./*创建循环徒表,头节点也存信息*/head=(1.ink1.ist*)ma1.1.oc(sizeof(1.ink1.ist);P=head;p-data=1;p-
4、next=p;/*初始化循环链表”/for(i=2;idata=i;s-next=p-next;p-next=s;p=p-next;)通过该步骤后,head和P(PreSent)都成一个“猴子圈”的链表.在该链表的构建过程中需要注意一下几点:内存的开辟,此时遵守使用多少开辟多少的原则。如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:族表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况3 .找到第k个节点p=head;for(i=1;inext;找到从第几个位置开始计数.此时,p指向开始的“猴子”。因为采用r链表方法,这个过
5、程只需要关注p指针的next指向即可。4 .保存初始的“猴子”圆圈参数/*保存节点总数*/tota1.=n;printf(11theoutnum:);q=head;为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurM来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除.5 .猴子查数猴子查数是整个程序的关键,需要完成以I;任务:a、找到开始的“猴子”数;b、删除该“猴子”;3将删除掉的循环链表首尾连接起来./*只剩一个节点时停止循环*/whi1.e(tota1.I=1)/*报数过程,P指向要删除的节点*/for(i=1;inet;打印要删
6、除的节点序号*/printf(%d,p-data);*q指向P节点的前驱/whi1.e(q-next!=p)(q=q-next;)/*把除P节点*/q-next=pnext;/*保存被删除节点指针*/S=p;*P指向被黜除节点的后继*/p=p-net;/*释放被删除的节点*/free(三);/*节点个数减一*/tota1.-;打印最后飘下的节点序号7printf(1111the1.astnum:(%dnn,p-data);free(p);通过以上数据运算,可以完成相应链表元素的粗除,这或许就是C语言程序的魅力所在。使用C语言的指针比如本程序的链表指针的定义,p,5,qIink1.is1.headJpJsJq;我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度.)指针的优势,或许在本程序中表现的不明显,在大盘数据和对操作速度要求比较敏感的情况卜.会很明显,比如IinUX内核中,就会有很好的体现。总之,对于拨入式工程师,不但能设计出好的硬件电路,如果也能写出好的软件程序就公让我们的生活更加美好.