新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 写好C语言程序的“三板斧”

写好C语言程序的“三板斧”

作者:Machinnneee时间:2015-11-09来源:电子产品世界收藏

  作为嵌入式工程师,写一个效率高效,思路清晰的程序是我们的终极目标,那么,怎么才能写好这样的程序呢?首先,我们要用的思维方式来进行程序的构架构建;其次,要有良好的算法基础,以此来实现程序的逻辑构架;最后,灵活运用C语言的指针操作。

本文引用地址:http://www.eepw.com.cn/article/282515.htm

  虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用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指向即可。


上一页 1 2 下一页

关键词: C语言

评论


相关推荐

技术专区

关闭