c++循环和关系表达式

一、for循环

1.for的组成

for循环为执行重复的操作提供了循序渐进的步骤。for循环的组成部分步骤:

  1. 设置初始值。
  2. 执行测试,看看循环是否应当继续进行。
  3. 执行循环操作。
  4. 更新用于测试的值。

循环设计中的要素:初始化、测试和更新操作构成控制部分,由括号括起。每个部分都是表达式,由分号隔开。控制部分后面的语句叫做循环体,只要测试为true,循环值执行一次,便执行:

for(initialization//初始化;test-expression//测试;update-expression//更新)
body

实例:

#include <iostream>
using namespace std;
int main()
{
   
    int i;
    for(i=0;i<5;i++)
    {
   
        cout<<"c++ knows loops"<<endl;
    }
    cout<<"c++ knows when to stop"<<endl;
    return 0;
}

在这里插入图片描述
注:i=0表示循环的初始化部分,测试条件部分i是否小于5:i<5;
当小于5,程序执行循环体,直到大于5结束循环。

2.表示式和语句

  1. for语句的控制部分使用3个表达式,由于自身强加的语法限制,c++成为非常具有表现力的语言,任何值或任何有效的值和运算符组合都是表达式。例如:28*20是指为560的表达式。

  2. c++将赋值表达式的值定义为左侧成员得值。由于赋值的表达式有值,因此,可以编写下面语句:maids=(cooks=4)+3;表达式cooks=4的值为4,因此maids的值为7。

  3. 像x<y这样的关系表达式将被判定为 bool值true或false。

实例:<<运算符的优先级比表达式中使用的运算符高,因此代码使用括号来获得正确的运算顺序。

#include <iostream>
using namespace std;
int main()
{
   
    int x;
    cout<<"The expression x=100 has the value";
    cout<<(x=100)<<endl;
    cout<<"Now x= "<<x<<endl;
    cout<<"The expression x < 3 has the value";
    cout<<(x<3)<<endl;
    cout<<"The expression x >3  has the value";
    cout<<(x>3)<<endl;
    cout.setf(ios_base::boolalpha);
    cout<<"The expression x< 3 has the value";
    cout<<(x<3)<<endl;
    cout<<"The expression x > 3 has the value";
    cout<<(x>3)<<endl;
    return 0;
}

在这里插入图片描述
注:

  1. cout.setf(ios_base::boolalpha)是c++一项新功能,ios_basee::boolalpha来作为cout.setf()的参数,老式:ios:boolalpha.
  2. cout在显示bool值之前将他们转换int,但cout.setf(ios::boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0。

3.非表达式和语句

  1. 项目1
  2. 项目2
  3. 项目3

对任何表达式加上分号都可以成为语句,但是语句反过来说的就不对了。也就是说,从语句中删除分号,并不一定能将它转换为表达式。目前,我们使用的语句而言,返回语句,声明语句和for语句都不满足语句=表达式+分号这种模式。

//一条语句:
int toad;

//但int toad并不是表达式,因为它没有值,下面代码是非法:
egg=int toad * 1000;
cin>>int toad;
//禁止将for循环赋给变量
//for 循环不是表达式,因此没有值,也不能赋值。
int fx=for(i=0;i<4;i++)
cout>>i;

for循环形式:

//形式1:
  int i;
  for(i=0;i<5;i++)

//形式2:
for(int i=0;i<5;i++
4.使用for循环访问字符串

for循环提供了一种依次访问字符串中每个字符,使用string对象,char数组,因为它们都能够使用数组表示法来访问字符串的字符。

#include <iostream>
#include<string>
using namespace std;
int main()
{
   
    cout<<"Enter a word:";
    string word;
    cin>>word;//用户输入一个字符串
    //按相反的方向逐个字符的显示字符串
    //使用关系运算符大于或等于来测试是否达第一个元素
    for(int i=word.size()-1;i>=0;i--)//size()获得字符数。
    cout<<word[i];
    cout<<"\nBye.\n";
    return 0;
}

在这里插入图片描述

二、递增(++)和递减(–)

1.副作用和顺序点

  1. 副作用指的是在计算表达式时对某种东西(如存储在变量值中的值)进行修改;

  2. 顺序点是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行评估。

  3. 在C++中,语句中的分号就是个顺序点,意味着程序执行下一条语句之前,赋值运算符、递增运算符和递减运算符执行的所有修改都必须完成。

  4. 任何完整的表达式末尾都是个顺序点,表达式不是另一个更大表达式的子表达式

//完整表达式的例子:表达式语句中的表达式部分以及用作while循环中检测条件的表达式:
while(guests++ < 10)
cout<<guests<<endl;
//guests++<10是个完整表达式,是个while循环的测试条件,因此该表达式的末尾是个顺序点。
//C++确保副作用(将guests+1)在程序进入cout之前完成。然而,通过使用后缀格式,可确保将guests同10进行比较后将值加1。
y=(4+x++) +(6 +x++);
//4+x++不是个完整的表达式,c++不保证x的值在计算表达式4+x++后立刻增加1。
//整条赋值语句是个完整表达式,分号标识了顺序点。
//因此C++只保证程序执行到下一条语句之前,x的值被递增两次。
//C++没有规定在计算每个子表达式之后将x的值递增,还是在整个表达式计算后将x的值递增。

在c++11中,不再使用术语“顺序点”了,因为这个概念难以用于讨论多线程执行。相反,使用了术语“顺序”,表示有些事在其他事件前发生。

2.前缀格式和后缀格式

若某些变量被用于某些目的(如用作函数参数或给变量赋值),使用前缀格式和后缀格式的结果将不同。然而,如果递增表达式的值没有被使用,情况如何?例如,下面两条语句的作用是否不同?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值