您的位置 首页 设计

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

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

  作为嵌入式工程师,写一个功率高效,思路清晰的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指向即可。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/115672.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部