2.3 判断表达式的使用

C++表达式的表现力相当丰富。程序中经常要根据一个表达式的值决定程序的流程控制。例如,表达式的值为真时执行某个语句,或执行循环体。这种表达式称为判断表达式。

C++逻辑类型本质是整型。逻辑运算的结果为true时,值等于1;为false时,值等于0。但所有的表达式,包括关系运算、逻辑运算、算术运算、赋值运算等表达式都可以作为判断表达式。算术表达式可以用做逻辑表达式,其值非 0 时,C++认为是逻辑真;只有表达式的值等于 0,才认为是逻辑假。

这种运算方式在某种程度上降低了程序的可读性。对于熟练的程序员,利用C++表达式的灵活性可以编写出高效简洁的代码。这里通过一些简单例子说明不同表达式用于条件判断的情况。程序设计的实际应用丰富多彩,需要读者在实践中体会。

1.算术表达式用于判断

算术表达式表达一个结果值,如果这个结果值可以用于0值或非0值判断,则可以直接用做判断表达式。

要表示: expression!=0

可以简化为: expression

要表示: expression==0

可以表示为: !expression

例如,输出1~100之间的奇数,程序如下:

            for(int i=1; i<=100; i++)
                if(i%2) cout << i << '\t';

其中: if(i%2) …

相当于: if(i%2!= 0) …

如果要输出全部偶数,则if语句可以改写为:

            if(!(i%2)) …

又如,判断整型变量a、b是否相等的程序如下:

            if(a-b)  cout<<a<<"!="<<b<<endl;
            else  cout<<a<<"=="<<b<<endl;

其中: if(a-b) …

相当于: if(a-b != 0) …

再如: while(p && q!=k) …

相当于: while(p!=0 && q!=k) …

2.赋值表达式用于判断

赋值表达式的值是被赋值变量的值,用于判断表达式中,首先完成赋值运算,然后以被赋值变量的值作判断。

例如,以下程序把a-b的值存放在变量c中,如果a不等于b,则输出它们的差:

            if(c=a-b)  cout<<"the difference of"<<a<<"and"<<b<<"is:"<<c<<endl;
            else  cout<<a<<"is equal to"<<b<<endl;

其中: if(c = a-b) …

相当于: c = a-b; if(c != 0) …

3.对输入进行判断

有时,不能预先确定输入数据量,程序运行时可以用组合键Ctrl+Z(同时按下Ctrl和Z键)结束cin输入。按组合键Ctrl+Z令cin的输入函数返回一个0值。

【例 2-25】统计输入整数的个数,并进行累加。直到按 Ctrl+Z 组合键结束输入,输出计算结果。

            #include <iostream>
            using namespace std;
            int main()
            {  int x,n=0,s=0;
              while(cin>>x)               //判断表达式中输入数据,用函数返回结果作判断
              {   n++,s+=x;               //注意,while语句的循环体是逗号表达式
              }
              cout << "n = " << n << endl << "sum = " << s << endl;
            }

程序运行,输入数据并回车后按Ctrl+Z组合键,显示结果如下:

            1 2 3 4 5 6 7 8 9
            ^Z
            n = 9
            sum = 45

值得注意的是,cin>>不但能够获取输入数据并送到指定变量中,它还具有一个逻辑返回值,能够在正常输入时返回1,不能得到输入值(文件结束)时返回0。有关cin的讨论,在第7章和第11章中还会涉及。

同样道理,凡是具有返回值的函数(包括标准函数和用户自定义函数)调用都可以放在判断表达式中。

【例2-26】输入一个英文句子,以“.”结束。统计句子中包含的字符个数。

            #include <iostream>
            using namespace std;
            int main()
            {  int n=0;
              char c;
              while((c=cin.get())!='.')      //判断表达式中调用标准函数
                  n++;
              cout<< "n = "<< n << endl;
            }

运行程序,输入字符串,显示结果如下:

            c++ language program.
            n = 20

程序中的cin.get()函数调用返回一个键盘输出字符,赋给变量c。赋值表达式用于while的条件判断,当c的值等于'.'时结束循环。