六、判断(一)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位!!!";}}