浅谈c/c++中的for循环用法和讲解。

17 篇文章 3 订阅
11 篇文章 0 订阅

近些天来,我在教一些人c++的的用法的时候,发现很多问题。
其中我推荐的学习方法是用c++ primer plus这本书,然后学习他的标准语法和c11标准,这其中我发现可能是因为新手的原因,他们很难对代码的用法进行理解。还有其中我发现书中也有一些不足的内容,对函数的讲解总感觉有点一知半解的样子。
我的编程学习是从《明解c语言》开始的,那本书对新手的学习相对很多编程书都更加的友好,感觉很奇怪我看了不少书都觉得日本人写的教材很适合新手学习,而美国人写的教材更适合有基础的人学习,当然中国人写的书,只要是上过大学的都被谭浩强的数恶心过,这些我就不多加讨论,发表一下自己和我见到包括我教的一些新手的看法。
上升当对出书人的互喷那就没有必要了,大家都是做技术的。
现在还是开始讲for的用法

//首先,先介绍for循环
for(a=0;a<10;a++//for循环的基本形式。
//多种变种形式
int a=0for;a<10;a++/********************/
int a=0;
for(;;a++)
if(a>=10)break;
/**********************/
int a=0;
for(;;)
{
if(a>=10)break;
a++;
}

当然对于上述的4种形式来说,他们的实现效果都是一样的,当然对于标准写法来说,我是更推荐第一种写法的。其实我因为我在看一些人的代码的时候,没有按照标准写法来写,让我看的很难受而已。
然后讲解一下for的组成部分

for(a=0;a<10;a++)
/******************/
//对于上述标准写法来说
a=0;
//这个是for循环的初始值,一个for循环必须有初始值。
a<10;
//这个是循环的范围,如果没有循环范围,那么循环就会变成一个死循环
//例如
for(a=0;;a++)
a++;
//这个是循环的步长
//对于下列情况来说,循环会一直循环下去,且a的值一直为0
for(a=0;a<10;);

认识完这些部分之后就要考虑如何变化使用的问题,解决编程问题尤其使用c/c++是有很多方法的。
第一:也是最重要的部分

a<10;//循环终止条件

对于循环终止条件来说,计算机每运行一次就会读取一次a是否小于10这个条件,对于计算机而言,他只会输出0与1。2种结果当a小于10时,计算机就输出1,那么循环继续进行。当a大于等于10时,计算机就输出0,那么循环终止。在判断语句中c/c++中的if判断语句的效果和这个是一样的,所以在运用的时候我们可以通过【if】来判断循环结束,当然也可以拿【if】中的判断条件放在【for】循环中。这种用法我在写一些代码的时候用过,还算是比较常用的。
第二:步长

a++//for循环步长

我遇到一些新手,他们对步长的理解很差,这个确实我不是很能理解这个问题。比如一些代码。

for(a=0;a<10;a--)
{
a+2;
}
/***********************/
for(a=0;a<10;a+2)
{
a--;
}
/**********************/

我简单的调换一下位置他们就不能理解这2个循环了。后面我问多几个问题后我才发现,他们没有理解的地方在于,for()中的a–到底什么时候参与计算,有相当多的人认为对于for循环来说。先执行a=0,然后判断a<10,然后执行a–,然后再执行循环体内容。说实话当时我听他们的讲,很疑惑,为什么会理解成这样子。但是我不认为是关键,关键在于他们这样子理解后,写的好多代码都是错的。看来有时候对新手的讲解还是有点必要的。
还有我是在学机器视觉,前几天有个人来找我问我一个halcon的问题,其中就是关于for循环的,我先贴一个halcon的导出程序

//halcon导出cpp文件片段
//对路径进行读图
void action()
{
  HObject  ho_Image;
  ListFiles("D:/shijue/fangshuidai/image2", (HTuple("files").Append("follow_links")), 
      &hv_ImageFiles);
  TupleRegexpSelect(hv_ImageFiles, (HTuple("\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$").Append("ignore_case")), 
      &hv_ImageFiles);
  {
  HTuple end_val3 = (hv_ImageFiles.TupleLength())-1;
  HTuple step_val3 = 1;
  for (hv_Index=0; hv_Index.Continue(end_val3, step_val3); hv_Index += step_val3)
  {
    ReadImage(&ho_Image, HTuple(hv_ImageFiles[hv_Index]));
  }
  }
}

那时他就问我,为什么他把这个读图程序插在vs运行后只显示最后一张图片,而不是他点击一下QT按钮实现读下一张图片的问题。我首先的发现halcon中是有一个只执行一个步骤的按钮,在vs中运行相当于点击了自动运行全部的按钮。后面我跟他讲解了一下for的用法。这个就是因为for循环直接读取到最后一张图片。那么怎么让他单张单张的读图,我就把for循环删掉,留取for循环的内容,那么这样子他就不会自动读取,而是我每运行一次就读取一次,然后加入一个判断语句【if】在将图序号置为0,这样就可以重新从第一章图开始读取。
大概就这些问题,后面有更多感想再来修改。有任何错误都可以指出,欢迎阅读。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值