2.4.3 关系运算符和关系表达式
C语言有完整的一组关系运算符,用于比较两个运算分量间的大小关系。这组运算符有六个,即
前4种关系运算符的优先级相同,后两种运算符的优先级相同。前4种的优先级高于后两种。例如,“〈”优先于“==”;而“〉”和“〈”优先级相同。
用关系运算符将两个分量连在一起构成的表达式称为关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。根据运算符所作用的两个运算分量之间的指定关系是否成立,得到关系表达式的值。例如:
a〉b 如果a大于b,则结果为真;否则为假。
a〉=b 如果a大于或等于b,则结果为真;否则为假。
a〈b 如果a小于b,则结果为真;否则为假。
a〈=b 如果a小于或等于b,则结果为真;否则为假。
a==b 如果a等于b,则结果为真;否则为假。
a!=b 如果a不等于b,则结果为真;否则为假。
例如,a为10,b为80,那么
a〉b,a〉=b,a==b
三个关系表达式的结果都为“假”。
怎样表示关系表达式的“真”、“假”逻辑值呢?由于C语言中没有逻辑型数据,因而借用数值来表示。C语言中规定:以数值0表示“假”,以非0表示“真”。对于关系表达式来说,结果的真、假分别用1和0表示。因此,在a为10,b为80的情况下,表达式a〈b的值(即结果)是1,而a==b的值是0。
关系运算只判定两个运算分量是否满足指定的关系,而不管二者具体数值相差多少。
例如,a为200,b为80,c为106,那么
a〉b与a〉c
的结果都是1。并且,执行关系运算之后,其分量(如这里的a,b,c)的值都不发生变化。
应注意,赋值号“=”与相等比较运算符“==”的区别。例如,关系表达式i==500是检查i的值是否等于500;而赋值表达式i=500是把值500赋给变量i。
关系运算符的优先级低于算术运算符,高于赋值运算符。其结合性是按照自左至右的顺序进行,即左结合性。例如,a=50,b=30,c=68,d=100,则下列表达式:
a+b〈c+d 相当于(a+b)〈(c+d),其值为1。
a〈b〉c 相当于(a〈b)〉c,a〈b的结果为0,0〉c的结果为0,整个表达式的值为0。
x=a〈b〈c 先进行a〈b〈c ,结果为1,然后再将1赋值给x。
例2-1 分析下面程序的运行结果。
程序运行分析:
第1行 //2-1.cpp运算符的优先级示例是注释行。
良好的编程习惯2.2
每个程序的开始都应该有一个注释,描述这个程序的目的、作者、日期和时间(在本书的程序中,我们没有说明这些信息,是因为这些信息对教学示例程序来说没有太多实际的意义)。
第2行 #include 〈stdio.h〉是预处理命令,详细内容请参考本书7.8节。
常见的编程错误2.1
在需要从键盘输入数据或者输出数据到屏幕的程序中,如果忘记包含〈stdio.h〉头文件,那么会导致编译错误。
第3行是空行。为了易于阅读程序,程序员常使用空行、空格和制表符来增加程序的可读性。
良好的编程习惯2.3
使用空格和空行来增加程序的可读性。
第4行 //main函数开始程序的运行,是一个单行注释,指出程序从下一行开始执行。
第8行分别对变量i、j、k赋值为60。
第10行,按照运算符优先级关系,表达式“i= j==k;”等价于i=(j==k)。所以,先执行j与k是否相等的比较,其结果是1;再执行i=1,把1赋值给变量i。所以,这条语句执行后,i的值是1,而j和k的值保持不变,仍然是原来的值60。
第11行printf()函数调用语句执行后输出结果是:
i=1,j=60,k=60
第12行,圆括号括起来的表达式“(j=k++*2);”包含三个运算符,即:=、++和*,其中“++”的级别最高,“*”次之,“=”最低。所以,这个表达式就等价于j=((k++)*2)。由于k++是后缀形式,所以,先取出k的当前值(即60)乘以2,得到120,赋给变量j;然后k的自身增1,变为61。这个表达式是关系运算符“==”的右分量,其左分量是i,利用“==”,判别i的值(是1)是否等于右分量的值(即120),很显然两者不相等。但应注意,这个比较的结果(数值0)并没有赋予任何变量,从而不会影响运算分量的原有值。
第13行的printf()函数调用语句执行后输出结果是:
i=1,j=120,k=61
第14行的语句中有三个运算符,即=、〉和〉=。按照优先级的高低,“〉”和“〉=”是同一级,且高于“=”的优先级;按照结合性——关系运算符的结合性是自左至右,所以,表达式
i=j〉k〉=100;
等价于i=((j〉k)〉=100);j〉k的结果为1,1〉=100的结果是0,最后把0赋给i。
第15条语句执行后输出结果是:
i=0,j=120,k=61
上述程序运行之后的输出结果是:
i=1,j=60,k=60
i=1,j=120,k=61
i=0,j=120,k=61
另外,在以上示例中关系运算符的运算分量都是整型量。其实,它们的两个运算分量既可以是整型的,也可以是浮点型的,还可以都是指针型的(将在第5章中介绍),但它们运算结果的类型都是int型(即1或0)。
常见的编程错误2.2
遗漏了main()后面的括号对。
遗漏或不正确地键入了开始大括号{,{表示函数体的起点。
遗漏或不正确地键入了结束大括号},}表示函数体的终点。
常见的编程错误2.3
函数名拼写错误,例如把printf()误写成print()。
忘记printf()中的双引号配对。
遗漏了每一条语句结束后的分号。
良好的编程习惯2.4
在限定函数体的花括号之间把整个函数体缩进一级。使程序可读性增强、函数结构清晰,使程序更易于纠错。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。