第五章 循环和关系表达式(1)

循环是程序的主要操作之一,循环最主要的功能之一就是简化代码,另外就是通过嵌套啊什么的可以实现很多算法。c++ primer plus第五章介绍了循环和关系表达式的基本用法。


其实这一章非常简单,主要是介绍or循环,while循环和do while循环的用法和区别,外加if语句和switch语句。但是本章也涵盖了很多小知识,还是可以细细体味的。

首先从for循环开始,for循环的基本结构为:

for (initialization; test-expression; update-expression)

body;


这个没用过循环的看起来可能有点晕,举个例子

int a = 0;

for (int i = 0; i<5; i++)

a = i;

cout  << a << endl;

}

可以理解为以下几个步骤

1. 设置初始值。上例中也可以把int a=0 放在(和第一个分号之间。循环之执行一次初始化,通常程序使用这部分来将变量(i)设置为起始值,然后用i来计算循环周期。

2.执行test-expression测试,看看循环是否应当继续进行。上例中就看i小不小于5,如果小于5,进行下一步

3.执行循环操作,即{ } 中的代码;如果{ } 只有一行代码,可以不写大括号。

4.{ }中的代码执行完之后,返回到update-expression,更新用于测试的值(本例中i自加一个1);也可以更新其他变量,比如上例也可以添加a++(这里添加这个语句没什么意义)

5.再次执行test-expression测试,如果返回值为true,接着循环,直到返回值为false(比如上例中循环五次之后,i变成了5,循环就到此结束了,程序开始执行}以后的代码。


像i<5这样的被称作关系表达式,区别与赋值表达式(例如x = 5;)。关系表达式将被判定为bool值true或者false。


上例中还有一个需要记住的是i这个变量只存在循环周期,如果循环结束,则i会自动消失,不能再被继续调用。


循环最常用的地方就是访问数组的每个元素,如:

int array[10];

for (int i=0;i<10;i++)

array[i] = i;


看到这里可能很多人会问++是啥呀。这里就要介绍递增运算符++和递减运算符--:将变量加1或者减1。 问题是这两种运算符即可以放在变量前面(++i),也可以放在变量后面(i++),两个版本还有点区别。


简单的说,i++意味着使用i当前值计算表达式,然后将i的值加1;++i则先将i的值加1,然后使用新的值来计算表达式:

int i = 5; int a = ++i; // a = 6; i = 6;

int i = 5; int a = i++; // a = 5, i =6;

但关键这只是简单的说,具体情况就很复杂了,比如x = 2 * x++ * (3- ++x)...这就很变态了,但好的是也没人会这么写。但是经常会出现这样的情况

for(n = lim; n>0; --n)

for(n = lim; n>0; n--)

这个时候是没有任何区别的,但执行速度可能有细微的差别。


总之这些差别要慢慢理解了,这里就不详讲了。


递增和递减运算符都可以运用到指针上,但运用是也要小心

int arr[5] = {1, 2, 3, 4,5};

int * p = arr; //这时候p指向arr[0];

++p; //这时候p指向arr[1];

(*p)++;//这时候指arr[1]自加1

x = *p++; //++运算优先级高,所以p首先指向arr[2],然后将arr[2]的值赋给x,所以x=3;


组合运算符+=, -+, *=, /=, %=, 举个例子估计大部人就懂了

i*=a; 和i = i*a效果一样,只是看起来比较简单而已。


前面介绍了关系表达式,既然是比较大小,肯定不止大于和小于了,下面是所以关系运算符

< 小于

<= 小于或等于

== 等于 (注意和赋值表达式等于的区别

> 大于

>= 大于或等于

!= 不等于


数字好理解,char也好理解,那么有的时候也需要比较那有怎么办呢?(比如判断一个名字是不是跟另外一个名字相同)

如果是c风格字符串,需要调用cstring中的strcmp(cstr1, cstr2)函数来比较cstr1 和cstr2是否相同。注意如果相等返回的是false,不同才返回true!

如果是string呢,则可以用==或者!= 来判断了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值