一、if判断语句
if (test-condition1)
statement1
else if (test-condition2)
statement2
else
statement3
在这里,判断条件也会被强制转换为bool值,也就是0会被转换为false,非0会被转换为true。if-else可以成对使用,也可以只使用if语句。
二、逻辑表达式
1、或(or)运算符:||
使用or和||的效果是一样的,只要有一个为true则整体为true。
2、与(and)运算符:&&
使用and和&&的效果是一样的,只要有一个为false则整体为false。
3、非(not)运算符:!
使用not和!的效果是一样的,目的是将它后面的真值取反。
需要注意的是,!运算符的优先级高于所有的关系运算符和算术运算符。因此要对表达式求反,必须用括号将其括起。
三、? : 条件运算符
条件运算符经常用来替代if-else语句,它是C++中唯一一个需要3个操作数的运算符,格式为:
expression1 ? expression2 : expression3;
如果expression1为true,则整个条件表达式的值为expression2的值;否则,整个表达式的值为expression3的值。用法如下:
// method 1
if (a > b)
c = a;
else
c = b;
// method 2
int c = (a > b) ? a : b;
四、switch语句
switch (integer-expression) {
case label1:
statement1;
break;
case label2:
statement2;
break;
case label3:
statement3;
break;
// ...
default:
statement4;
}
需要注意的是,每个标签都必须是整数常量表达式。最常见的标签是int或char常量,也可以是枚举量。
如果integer-expression捕鱼任何标签匹配,则程序将跳到标签为default的那一行。如果要让程序执行完一组特定语句后停止,必须使用break语句,这将导致程序跳出switch语句。例如:
case 'a':
case 'A':
cout << "a/A" << endl;
break;
如果输入的是a,由于标签a没有break语句,那么就会接着执行标签A,所有就会输出,但是由于标签A有break语句,那么就会直接跳出switch语句,不会执行之后的标签。也就是说,如果匹配到一个标签,就会进入该标签的语句,并且会一直往后执行其他的标签,知道有break出现才会停止。在这个例子中,可以用来判断输入不区分大小写的字母。但是一般情况下还是要加上break语句,以免造成一些不必要的麻烦。
对比if-else语句来说,if-else可以用来处理浮点数以及范围比较,而switch语句只能用来处理一个单独的整数值。当既可以用if-else语句,也可以用switch语句时,而且选项不少于3个时,应使用switch语句,它是专门为这种情况设计的,执行的效率更高。
五、break和continue语句
break语句是跳出距离它最近的一个循环,如果需要跳出多重循环,可以设置标记flag,从里到外一层层的跳出。
continue语句是跳过循环体中余下的代码,并开始新一轮的循环,注意在switch语句中不能直接使用continue语句。
另外有一种语法使用goto语句,例如:
if (flag == true)
goto fun;
// ...
fun: {
cout << "hahaha" << endl;
cout << "hhh" << endl;
}
goto标号语句必须在同一函数体中,可以起到直接跳转的作用。了解汇编的跳转指令后,应该可以理解使用goto语句不是很好,应该使用其他结构化控制语句来代替。