![嵌入式工程师掌握编程的几个要素_第1页](http://file4.renrendoc.com/view12/M01/3C/18/wKhkGWah01iASVMDAAFzvdWtH-s573.jpg)
![嵌入式工程师掌握编程的几个要素_第2页](http://file4.renrendoc.com/view12/M01/3C/18/wKhkGWah01iASVMDAAFzvdWtH-s5732.jpg)
![嵌入式工程师掌握编程的几个要素_第3页](http://file4.renrendoc.com/view12/M01/3C/18/wKhkGWah01iASVMDAAFzvdWtH-s5733.jpg)
![嵌入式工程师掌握编程的几个要素_第4页](http://file4.renrendoc.com/view12/M01/3C/18/wKhkGWah01iASVMDAAFzvdWtH-s5734.jpg)
![嵌入式工程师掌握编程的几个要素_第5页](http://file4.renrendoc.com/view12/M01/3C/18/wKhkGWah01iASVMDAAFzvdWtH-s5735.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?要用C语言的思维方式来进行程序的构架构建要有良好的C语言算法基础,以此来实现程序的逻辑构架灵活运用C语言的指针操作虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数,如此反复,最终剩下的猴子便是猴子的大王。用C语言的思维方式进行程序构架构建程序分为三大部分:a、数据获取,为了程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数;b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;c、提高程序的运行速率,少用循环多用指针。用C语言进行逻辑实现1.数据获取,通过printf和scanf进行参数的获取。/*读入问题条件*/printf("inputtotalnum:");scanf("%d",&n);printf("fromwhichnumbegin:");scanf("%d",&k);if(k>n||k==0){printf("pleaseinputtherightbeginnum");return1;}printf("inputtheoutnum:");scanf("%d",&m);if(m>n||m==0){printf("pleaseinputtherightdelnum");return2;}同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。2.定义链表节点类型typedefstructnode{intdata;structnode*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;}通过该步骤后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建过程中需要注意一下几点:内存的开辟,此时遵守使用多少开辟多少的原则。如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:链表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况。3.找到第k个节点p=head;for(i=1;i<=k;i++){p=p->next;}找到从第几个位置开始计数。此时,p指向开始的“猴子”。因为采用了链表方法,这个过程只需要关注p指针的next指向即可。4.保存初始的“猴子”圆圈参数/*保存节点总数*/total=n;printf("\ntheoutnum:");q=head;为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurry)来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除。5.猴子查数猴子查数是整个程序的关键,需要完成以下任务:a、找到开始的“猴子”数;b、删除该“猴子”;c、将删除掉的循环链表首尾连接起来。/*只剩一个节点时停止循环*/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\nthelastnum:[%d]\n\n",p->data);free(p);}通过以上数据运算,可以完成相应链表元素的删除,这或许就是C语言程序的魅力所在。使用C语言的指针比如本程序的链表指针的定义,p,s,q。linklist*head,*p,*s,*q;我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度。指针的优势,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学四年级数学几百几十数乘以一位数竞赛测验模拟题带答案
- 关于大学生的创新创业项目
- 艺术的精髓模板
- 金融行业数据备份标准
- DB2201-T 14-2022 梅花鹿活体检疫规范
- 新版北师版一年级下册数学课件五 100以内数加与减(一)复习
- 线上教育投资咨询合同(2篇)
- 2024-2025学年云南昭通部分县区高二上学期期末联合检测英语试卷(解析版)
- Module2Unit2ImwatchingTV2023-2024学年三年级英语
- 2025年含油生料带盘根项目投资可行性研究分析报告
- DB32T 4969-2024大型医用设备使用监督管理平台基础数据采集规范
- 2025年广东广州市海珠区官洲街道办事处政府雇员招聘5人高频重点提升(共500题)附带答案详解
- 《道路交通安全法》课件完整版
- 初中2025教学工作计划
- 2024年度市政工程项目三方合作协议3篇
- 【大学课件】机电设备管理技术概论
- 切削加工中的刀具路径规划算法考核试卷
- 《推拿学》期末考试复习题库(含答案)
- 《STP营销战略概述》课件
- 2024年经济师考试工商管理(中级)专业知识和实务试卷及解答参考
- 急性胸痛患者的急救护理
评论
0/150
提交评论