六、关系运算和逻辑运算
在程序设计中,不仅仅是单纯的赋值、输入或输出,而在更多的情况下,在程序中是要依赖于一些关系。这些关系的表示,就是关系运算;而这些关系的互相搭配,就形成了逻辑关系的运算。
在各种语言之中,关系运算和逻辑运算都定义了相关的运算符号。
在C++中定义的关系运算符有:
< (小于)
<= (小于等于)
> (大于)
>= (大于等于)
== (等于)
!= (不等于)
前四种运算符优先级相同,后两种运算符优先级相同。但是前四种运算符的优先级比后两句的优先级高。且应该注意,所有的关系运算符的优先级都低于算术运算符,但高于赋值运算符。
【例9】
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a,b;
bool c;
a=10;
b=20;
c=a>b;
cout<<c;
system("PAUSE");
return EXIT_SUCCESS;
}
在【例9】中,c是bool类型的变量,而所谓bool类型就是表示是否成立的一个值,分别记做false或true。false表示不成立,true表示成立。而在这道例题中,将会输出0。因为在C++中,跟QBASIC类似,用一个整数表示true或false。只是在QBASIC中,成立用-1表示,不成立用0表示;而在C++中,成立用1表示,不成立用0表示。
关系型运算只能够判断出值和变量之间的关系,而这些关系很多时候是不能够单独存在的。一个条件会分成很多个组成部分,比如数学、语文和英语三门考试,选择单科优秀的学生就需要选择数学成绩在85分以上或语文成绩在85分以上或者英语成绩在85分以上的所有学生。这就需要把三个并列的条件连接在一起,而这种运算就叫做逻辑运算。
在C++中定义了三种逻辑运算符,分别表示逻辑关系中的与、或、非。如下列所列:
&&代表与
||代表或
!代表非
如果用T和F来表示成立与不成立,逻辑与、逻辑或和逻辑非的运算结果如下:
逻辑与 |
逻辑或 |
逻辑非 |
T&&T=T T&&F=F F&&T=F F&&F=F |
T||T=T T||F=T F||T=T F||F=F |
!T=F !F=T |
C++中的与或非的字符定义的非常形象,由两个字符组成的“与”和“或”是双边运算,代表左右两边运算的结果。而非字符是一个字符组成,代表只对后面的运算内容取非运算。在使用中要特别注意,一个字符的“&”和“|”符号都有其他的含义,所以,很多情况下,如果误写成一个字符,DEV-C++的编译环境也不会报错,造成编程中的问题。
【例10】
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a,b,c;
bool yi,er,san;
a=95;
b=85;
c=80;
yi=a>90|| b>90|| c>90;
er=a>90&&b>90&&c>90;
san=a>80&&a<100||b>80&&b<100;
cout<<yi<<endl;
cout<<er<<endl;
cout<<san<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
在【例10】中,对变量yi,er,san进行了复制,他们得到的值都是对于a,b,c这三个变量值满足某种条件的综合。正如前面的描述,成立用1表示,不成立用0表示。yi的条件是a大于90或b>90或c>90,说明这三个变量中只要有一个大于90即可满足条件,因为a的值为95,满足这个条件,所以yi的值为1;而er的条件为a大于90并且b大于90并且c大于90,很明显b和c的值都不满足这个条件,所以得到的结果是不成立也就是0;最后一个条件更为复杂,因为这里面运算优先级别最低的是||(逻辑或),所以我们可以以这里为分界点。它左边的要求是,a大于80并且a小于100这个条件是满足的;而它右边的要求是b大于80并且小于100,很明显这也是满足的;所以或运算的两边均为成立情况,所以运算的结果也为成立。