1.19 判断:相等与关系运算符
本节介绍简单的 C++ if 结构,使程序根据某些条件的真假做出判断。如果条件符合,即为真(true),则执行if结构体的语句;如果不符合,即条件为假(false),则不执行语句,稍后将举例说明。
if结构中的条件可以用相等运算符(equality operator)和关系运算符(relational operator)表示,如图1.13关系运算符具有相同的优先级,结合律为从左向右。相等运算符的优先级也相同,但低于关系运算符的优先级,结合律也为从左向右。
标准代数相等与关系运算符 | C++相等与关系运算符 | C++条件举例 | C++条件含义 |
= | == | x==y | x等于y |
≠ | != | x!=y | x不等于y |
关系运算符 | |||
> | > | x>y | x大于y |
< | < | x<y | x小于y |
≥ | >= | x>=y | x大于或等于y |
≤ | <= | x<=y | x小于或等于y |
图 1.13 相等与关系运算符
常见编程错误1.5
如果==、!=、>=和<=运算符的符号对之间出现空格,则会出现语法错误。
常见编程错误1.6
逆转!=、>=和<=运算符的符号顺序(变为=!、=>、和=<)通常会出现语法错误。将!=写成=!有时不会出现语法错误,但会出现逻辑错误。
常见编程错误1.7
不要把相等运算符==与赋值运算符=混淆起来。相等运算符表示等于,而赋值运算符表示取、取值或赋值。有人把相等运算符读作双等于。稍后会介绍,把相等运算符==与赋值运算符混淆起来可能不会造成明显的语法错误,但可能造成相当明显的逻辑错误。
下例用六个 if 语句比较用户输入的两个数。如果其中任何一个if语句的条件成立,则执行与该if相关联的输出语句。图1.14显示了这个程序和三个示例输出。
注意图1.14的程序边疆使用流读取操作输入两个整数。首先将一个值读到 num1 中,然后将一个值读到 num2 中。if语句的缩排是为了提高程序的可读性。另外注意图1.14中每个if语句体中有一条语句。第2章将会介绍结构体中有多条语句的if语句(将语句体放在花括号“{ }”中)。
// Fig.1.14:fig01_14.cpp // Using if statements,relationnal // operators,and equality operators #include int main(){ int num1,num2; cout<<"Enter two integers,and I will tell you\n" <<"the relationships they satisfy: "; cin>>num1>>num2;// 读取两个整数 if(num1==num2) cout<<num1<<" is equal to"<<num2<<endl; if(num1!=num2) cout<<num1<<" is not equal to "num2<<endl; if(num1<num2) cout<<num1<<" is less than "<<num2<<endl; if(num1>num2) cout<<num1<<" is greater than "<<num2<<endl; if(num1<=num2) cout<<num1<<" is less than or equal to " <<num2<<endl; if(num1>=num2) cout<<num1<<" is greater than or equal to " <<num2<<endl; return 0;// 返回一个程序正常结束的标识 }
输出结果:
Enter two integers,and I will tll you The relationships they satisfy: 3 7 3 is not equal 7 3 is less than 7 3 is less than or equal to 7 Enter two integers,and I will tell you the relationships they satisfy:22 12 22 is not equal 12 22 is gretaer than 12 22 is greater than or equal to 12 Enter two integers,and I will tell you the relationships they satisfy:7 7 7 is equal to 7 7 is less than or equal to 7 7 is greater than or equal to 7
图1.14 使用相等和关系运算符
编程技巧1.16
if语句中的缩排可以提高程序的可读性,突出结构体
编程技巧1.17
程序中一行只放一条语句
常见编程错误1.8
if语句的打件后面的右括号之后紧跟着分号通常是个逻辑错误(但不是语法错误)。分号使if结构体变成空的,不管打件是否为真,这个if结构都不进行任何操作。更糟糕的是,原先if结构体变成if结构后面的语句,不管条件如何总是执行,通常会使程序产生错误结果。
注意图1.14中空格的用法。在C++语言中,空白字符(如制表符、换行符和空格)通常都被编译器忽略。因此,语句中可以根据程序员的爱好加上换行符和空格,但不能用换行符和空格分隔标识符。
觉编程错误1.9
把 main 写成 ma in 是语法错误。
编程技巧1.18
长语句可以分成多行。如果一条语句要分成多行,可以在分隔列表的逗号或长表达式的运算符后面断行。如果语句要分成两行或多行,后续行可以编排。
图1.15显示了本章介绍的运算符优先级,运算符优先顺序从上向下递减。注意赋值运算符之后的所有运算符结合律均为从左向右。加法是左结合的,因此表达式x+y+z求值为(x+y)+z。赋值运算符是从右向左结合的,因此表达式x=y=0求值为x=(y=0),首先将0赋给y,然后将结果0赋给x。
运算符 | 结合律 | 类型 |
( ) | 从左向右 | 括号 |
* / % | 从左向右 | 乘 |
+ - | 从左向右 | 加 |
<< >> | 从左向右 | 流插入/读取 |
< <= > >= | 从左向右 | 关系 |
== != | 从左向右 | 等于 |
= | 从右向左 | 赋值 |
图 1.15 运算符优先级和结合律
编程技巧1.19
编写包含多个运算符的表达式时要参考运算符优先级,确保表达式中的运算符按所要求的运算。如果无法确定复杂表达式中的求值顺序,可以用括号强制顺序,就像代数式中一样。注意,有些运算符(如赋值运算符)是从右向左结合的,而不是从左向右。
前面介绍了C++的许多特性,包括在屏幕上打印数据,从键盘输入数据、进行计算和作出判断。第2章利用这些知识介绍结构化编和,将会学到更多的编程技巧,介绍如何指定和改变语句执行顺序(称为控制流)。