0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么写出效率高、思路清晰的C语言程序?

嵌入式开发爱好者 来源:嵌入式开发爱好者 2024-01-02 14:20 次阅读

作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?

要用C语言的思维方式来进行程序的构架构建

要有良好的C语言算法基础,以此来实现程序的逻辑构架

灵活运用C语言的指针操作

虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。

嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。

比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数,如此反复,最终剩下的猴子便是猴子的大王。

用C语言的思维方式进行程序构架构建

程序分为三大部分:

a、数据获取,为了程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数;

b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;

c、提高程序的运行速率,少用循环多用指针。

用C语言进行逻辑实现

a、 数据获取,通过printf和scanf进行参数的获取。

/* 读入问题条件 */
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; 
}
同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。

b、 /* 定义链表节点类型 */

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;
}
通过该步骤后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建过程中需要注意以下几点:内存的开辟,此时遵守使用多少开辟多少的原则。 如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:链表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况。

c、 /* 找到第 k 个节点 */

p=head;
for (i = 1; i <= k; i++)
{
p = p->next;
}

找到从第几个位置开始计数。此时,p指向开始的“猴子”。因为采用了链表方法,这个过程只需要关注p指针的next指向即可。

a、 保存初始的“猴子”圆圈参数。

/* 保存节点总数 */


total = n;
printf("
the out num:");
q = head;
为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurry)来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除。

b、 猴子查数。

猴子查数是整个程序的关键,需要完成以下任务: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("

the last num:[%d] 

", p->data);
free(p);
}
通过以上数据运算,可以完成相应链表元素的删除,这或许就是C语言程序的魅力所在。

使用C语言的指针

比如本程序的链表指针的定义,p,s,q。

linklist *head, *p, *s, *q;

我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度。

指针的优势,或许在本程序中表现的不明显,在大量数据和对操作速度要求比较敏感的情况下会很明显,比如Linux内核中,就会有很好的体现。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4983

    文章

    18286

    浏览量

    288513
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128790
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70364
  • C程序
    +关注

    关注

    4

    文章

    253

    浏览量

    35750

原文标题:如何编写高效清晰的嵌入式C程序

文章出处:【微信号:嵌入式开发爱好者,微信公众号:嵌入式开发爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式工程师怎么写出效率高的C语言程序

    作为嵌入式工程师,怎么写出效率高思路清晰的C语言程序呢?
    发表于 07-03 09:34 251次阅读

    公式节点的效率高吗?

    如题,完成一个功能, 公式节点效率高,还是用VI函数效率高? 相信labview是用C++写的程序.
    发表于 11-20 11:30

    真心请教,a=b=1和a=1;b=1;这两种写法在c语言中执行起来哪个效率高

    小白我真心请教,a=b=1和a=1;b=1;这两种写法在c语言中执行起来哪个效率高?求高手们赐教啊
    发表于 01-01 12:30

    如何提高C语言程序的执行效率

    的事那么效率。下面说说如何提高C语言程序的执行效率。1、尽量避免调用延时函数没有带操作系统的
    发表于 07-20 06:39

    MCS的C语言和标准C语言的区别

    MCS的C语言和标准C语言的区别MC9S12的C语言与标准C
    发表于 07-20 07:06

    嵌入式C语言程序设计基础大汇总

    是运行速度快、编译效率高、移植性好和可读性强。C语言具有简单的语法结构和强大的处理功能,并可方便地实现对系统硬件的直接操作。C语言支持模块化
    发表于 11-09 07:13

    写单片机c语言程序要考虑哪些

    写单片机c语言程序,最重要的一点就是考虑到单片机的运行内存和实时性,因为单片机内存小,且要求程序运行快速,因此如果对单片机体系结构和硬件资源做详细了解,是无法
    发表于 11-24 07:48

    linux系统下C语言开发学习

    全部毕业,从事linux软件开发等工作)。视频完全还原真实培训课堂,讲解深入浅出、思路清晰、并辅助配合有文档、练习题目等。...
    发表于 12-15 09:10

    有源pfc效率高还是无源效pfc效率高

    有源pfc效率高还是无源效pfc效率高
    发表于 10-07 09:01

    状态机思路在单片机程序设计中的应用

    状态机思路在单片机程序设计中的应用 状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,
    发表于 02-09 11:25 1w次阅读
    状态机<b class='flag-5'>思路</b>在单片机<b class='flag-5'>程序</b>设计中的应用

    用C语言进行程序构架构建的“三板斧”

    作为嵌入式工程师,写一个效率高效,思路清晰的C语言程序是我们的终极目标,那么,怎么才能写好这样的程序呢?
    的头像 发表于 12-30 17:06 3899次阅读

    如何写好一个效率高思路清晰的C语言程序教你关键的三招

    为嵌入式工程师,写一个效率高效,思路清晰的C语言程序是我们的终极目标,那么,怎么才能写好这样的程序呢?首先,我们要用C
    的头像 发表于 12-31 18:31 5167次阅读

    C语言的万能“三板斧”

    点击上方名片关注我们本文转载自微信公众号:玩转嵌入式,已获授权作为嵌入式工程师,写一个效率高效,思路清晰的C语言程序是我们的终极目标。那么,怎样才能写好这样的
    的头像 发表于 01-12 10:49 704次阅读
    C<b class='flag-5'>语言</b>的万能“三板斧”

    如何写出高效的嵌入式C语言程序

    作为嵌入式工程师,怎么写出效率高思路清晰的C语言程序呢?
    发表于 08-18 10:42 179次阅读

    用C语言构建高效的嵌入式程序

    嵌入式工程师在编写C语言程序时,需要注重效率清晰思路。本文将通过解析经典问题“猴子选大王”来展示如何用C
    的头像 发表于 12-21 09:27 296次阅读