六、判断(一)1、关系运算符

1)每一个关系运算符得出的结果都是一个布尔类型值(true、flase或真、假或1、0)

关系运算符说明关系运算符说明
>大于>=大于等于
<小于<=小于等于
==等于!=不等于
#include int main(){    int a{ 500 };    int b{ 1000 };    bool c = a == b;  //false    std::cout << c <<std::endl;    c = (a <= b);  //true    std::cout << c << std::endl;}

2)关系运算符注意事项

①A=B是将B的值赋予给 A(把B内存中的内容,放入A的内存中);A==B是将A和B进行比较

不为0即为true

②注意bool和int之间的转化,所有不为0的bool值一律为true,包括负数

#include int main(){    bool bA{ bool(100) };   //非0即为1    int nA{ bA };    std::cout << nA << std::endl;  //1}

3)将输出转化为bool类型(true或flase)

​std::boolalpah设置以后,所有的bool类型均显示位false和true,而不是显示为数字,浮点数也可以做比较

#include int main(){    bool A{ bool(100) };    bool B{ 0 };    std::cout << std::boolalpha;  //输出在转化为bool类型    std::cout << A << std::endl;    std::cout << B << std:: endl;    std::cout << (A == B) << std::endl;}

2、if语句

1)if语法

//语法1if(bool表达式)语句;//语法2if(bool表达式)     //条件满足后,括号内的语句都执行;条件不满足直接跳出语句或语句块{    语句;    语句;}//常见错误语句if(bool表达式);语句;    //if语句第一个分号结束后,剩下语句全部执行

注:if只对紧跟着的语句负责

2)if语句拓展

​if(a=b){} 取决于b的值,若b为0,则不执行,若b为非0,则执行。即if(a=b)相当于if(b)

//因失误,将a==b写做了a=b,就相当于if(b),根据b的值进行判断,b为0则为假if(a=b){    语句;}

3、if…else…语句

1)if…else…语法

//语法一if(bool 表达式) 语句1;        //条件为真,执行语句1;条件为假,执行语句2else 语句2;//语法二if(bool 表达式){    语句;    语句;}eles{语句;语句;}

2)if语句嵌套使用

//嵌套语法一if(bool A)    if(bool B)        if(bool C)            语句;//嵌套语法二if(a)    if(b)        语句    else    语句elseif(c)        语句

3)案例

​设计一个程序,要求用户输入一个字符,判断这个字符是数字还是字母,如果是字母,那么是大写字母还是小写字母;如果是小写字母,那么把这个字母变成大写字母,反之变为小写字母,同时要把这个判断结果显示出来(参考ASCII表)

#include int main() {char userIn;std::cout <> userIn;if (userIn > 47) {if (userIn < 58) std::cout < 64) {if (userIn < 91){std::cout << "你输入的是大写字母" << userIn << "我们给他转化成了小写" < 96) {if (userIn < 123) {std::cout << "你输入的是小写字符" << userIn << "我们给他转化成了大写" << char(userIn - 32);}}}}}

4、逻辑运算符

1)逻辑运算符

运算符名称注意区分说明
&&逻辑与位运算的与(&)a&&b,a和b都为true为true,缺一不可
||逻辑或位运算的或(|)a||b,a和b其中一个为true,则为true
逻辑非位运算的取反(~)!a 若a为false是,!a为true

注意事项:

①一元运算符的优先级大于二元运算符

②位运算优先级大于逻辑运算符

③逻辑非>逻辑与>逻辑或

#include int main(){char userIn;std::cout <> userIn;if ((userIn >= 48) && (userIn < 58)) std::cout <= 65) && (userIn  96) && (userIn < 123))std::cout << "你输入的是一个字母!" << std::endl;}

2)数值在逻辑运算中的运用

int a{},b{};if(a&&b)  //a和b都不等于0,才成立。,只要有一个为0,则执行。即if((a!=0)&&(b!=0))if(a||b)  //a和b至少有一个不等于0if(!a) //要想执行,则a等于0

注:数值在逻辑运算中的应用本质是先把数值转化成bool值,再进行逻辑运算。

3)将执行成本低的语句放到前面,执行成本高的语句放到后面

bool a{};int c{500};//如下两种条件判断第二种更好if(c*500+200+c+c++)&&a)  //先算c*500+200+c+c++,后判断a的值。如果a为0,则为false,if语句不执行{    }if(a&&(c*500+200+c+c++))  //加快了代码的运算速度,如果a为0,则后面的c*500+200+c+c++则不用执行{    }

5、条件运算符(三元运算符)

1)条件运算符语法

x=bool?y:z  //等同于如下if表达式if(bool)x=y;else x=z;c=a>b?a:b   //如果a>b条件成立,则c=a,条件不满足c=b

注:条件运算符的运算优先级最低

2)案例:用户输入两个数,输出最大的那个数

//用户输入两个数,输出最大的那个数#include int main(){int a, b, c;std::cout <> a;std::cout <> b;c = a > b ? a : b;std::cout << "较大的数为:" << c << std::endl;}

3)案例:输入一个数,计算10000除以这个数以后的结果。

//输入一个数,计算10000除以这个数以后的结果。#include int main(){int cs;std::cout <> cs;int end;end = cs ? (10000 / cs) : 0;   //直接排除了除数为0的情况std::cout << end;}

6、异或运算技巧

if(a^b)         //异或运算效率比下方的if语句效率高的多    if((a==true)&&(b==flase)) || (a==false)&&(b==true))         //即a和b不同同时为真或同时为假if((a==true)||b==true)&&!(a==true)&&(b==true))

7、字符处理

字符处理函数头文件:cctype头文件

函数说明
int isupper(char)判断字符是否为大写字母
int islower(char)判断字符是否为小写字母
int isalpha(char)判断字符是否为字母
int isdigit(char)判断字符是否是数字
int isalnum(char)判断字符是否是字母或者数字
int isspace(char)判断字符是否为空白
int isblank(char)判断字符是不是空格
int ispunct(char)判断字符是不是标点符号
int isprint(char)判断字符能不能打印
int iscntrl(char)判断字符是不是控制字符
int isgraph(char)判断字符是不是图形字符
int tolower(char)将字符转化为大写
int toupper(char)将字符转化为小写
#include #include int main(){char char_A{ 'a'};std::cout << "字符是否为大写:"<<isupper(char_A) << std::endl; //1为真,0为假char A,B;std::cout <> A;B = tolower(A);         //转化为小写std::cout << "转化后的字符为:" << B << std::endl;}

8、案例:游戏登录

​设计要求:设计游戏麟江湖的登录模块

1)模拟注册:要求用户输入一个8位以为的十六进制数作为账号,然后再输入一个8位以内的十六进制数作为密码

2)模拟登录:要求用户分别输入账号和密码进行登录,然后根据用户的输入做出判断

3)用户的账户和密码不可以小于5位

#include int main(){std::cout << "============麟江湖用户注册===================" << std::endl;unsigned long long uId, uPass;std::cout <> std::hex >> uId;std::cout <> uPass;//注册部分if ((uId > 0xFFFFF) && (uPass > 0xFFFFF)){unsigned long long uInId, uInpass;system("cls");std::cin >> std::hex;std::cout <> uInId;std::cout <> uInpass;//用户登录部分if (uId == uInId){if (uPass == uInpass){std::cout << "登录游戏!";}}else{std::cout << "你的密码输出有误";}}else{std::cout << "注册失败,账号或者密码不足5位!!!";}}