六、判断(一)
六、判断(一)
1、关系运算符
1)每一个关系运算符得出的结果都是一个布尔类型值(true、flase或真、假或1、0)
关系运算符 | 说明 | 关系运算符 | 说明 |
---|---|---|---|
> | 大于 | >= | 大于等于 |
< | 小于 | <= | 小于等于 |
== | 等于 | != | 不等于 |
#include <iostream>
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 <iostream>
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 <iostream>
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语法
//语法1
if(bool表达式)语句;
//语法2
if(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;条件为假,执行语句2
else 语句2;
//语法二
if(bool 表达式)
{
语句;
语句;
}
eles
{
语句;
语句;
}
2)if语句嵌套使用
//嵌套语法一
if(bool A)
if(bool B)
if(bool C)
语句;
//嵌套语法二
if(a)
if(b)
语句
else
语句
else
if(c)
语句
3)案例
设计一个程序,要求用户输入一个字符,判断这个字符是数字还是字母,如果是字母,那么是大写字母还是小写字母;如果是小写字母,那么把这个字母变成大写字母,反之变为小写字母,同时要把这个判断结果显示出来(参考ASCII表)
#include <iostream>
int main()
{
char userIn;
std::cout << "请输入一个字符:";
std::cin >> userIn;
if (userIn > 47)
{
if (userIn < 58) std::cout << "\n你输入的是一个数字";
if (userIn > 64)
{
if (userIn < 91)
{
std::cout << "你输入的是大写字母" << userIn << "我们给他转化成了小写" << char(userIn + 32);
}
if (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 <iostream>
int main()
{
char userIn;
std::cout << "请输入一个字符:";
std::cin >> userIn;
if ((userIn >= 48) && (userIn < 58)) std::cout << "你输入的是一个数字!";
if ((userIn >= 65) && (userIn <= 90) || (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至少有一个不等于0
if(!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 <iostream>
int main()
{
int a, b, c;
std::cout << "请输入第一个数:";
std::cin >> a;
std::cout << "请输入第二个数:";
std::cin >> b;
c = a > b ? a : b;
std::cout << "较大的数为:" << c << std::endl;
}
3)案例:输入一个数,计算10000除以这个数以后的结果。
//输入一个数,计算10000除以这个数以后的结果。
#include <iostream>
int main()
{
int cs;
std::cout << "请输入一个数,我们将为你计算10000除以这个数以后的结果:";
std::cin >> 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 <iostream>
#include <cctype>
int main()
{
char char_A{ 'a'};
std::cout << "字符是否为大写:"<<isupper(char_A) << std::endl; //1为真,0为假
char A,B;
std::cout << "请输入一个字符:";
std::cin >> A;
B = tolower(A); //转化为小写
std::cout << "转化后的字符为:" << B << std::endl;
}
8、案例:游戏登录
设计要求:设计游戏麟江湖的登录模块
1)模拟注册:要求用户输入一个8位以为的十六进制数作为账号,然后再输入一个8位以内的十六进制数作为密码
2)模拟登录:要求用户分别输入账号和密码进行登录,然后根据用户的输入做出判断
3)用户的账户和密码不可以小于5位
#include <iostream>
int main()
{
std::cout << "============麟江湖用户注册===================" << std::endl;
unsigned long long uId, uPass;
std::cout << "请输入你的账号(16位十六进制):";
std::cin >> std::hex >> uId;
std::cout << "请输入你的密码:";
std::cin >> uPass;
//注册部分
if ((uId > 0xFFFFF) && (uPass > 0xFFFFF))
{
unsigned long long uInId, uInpass;
system("cls");
std::cin >> std::hex;
std::cout << "请输入你的账号(16位十六进制):";
std::cin >> uInId;
std::cout << "请输入你的密码:";
std::cin >> uInpass;
//用户登录部分
if (uId == uInId)
{
if (uPass == uInpass)
{
std::cout << "登录游戏!";
}
}
else
{
std::cout << "你的密码输出有误";
}
}
else
{
std::cout << "注册失败,账号或者密码不足5位!!!";
}
}