一、算法设计三大结构
算法设计三大结构
顺序执行 —— 一条路走到底
分支语句 —— 岔路口,选择一条路
循环语句 —— 来回来回,执行多次
今天我们来学习分支语句
二、关键字
if
if (条件判断) 若满足则执行;//注意:小括号后面没有分号!!//下一行语句与 if 是否满足条件无关,都会执行;
if - else
if (条件判断) 若满足则执行;
else 否则执行;//注意:else后面不需要加小括号!!//下一行语句与 if 是否满足条件无关,都会执行;
if - else if - ... - else
if (条件判断) 若满足则执行;
elseif (条件判断2) 若满足则执行;
elseif ...//这里可以根据需要,学多个 else if 判断执行语句else 若以上均不满足则执行或也可以省略;
//下一行语句与 if 是否满足条件无关,都会执行;
注意:
else 是对上一句 if 的否定,是不需要也不能加括号的;只有 if 后面需要加括号;
if-else 适用于非此即彼的关系,如果不是非此即彼,只需要加 if 即可。
关系运算符
下表显示了 C\C++ 支持的关系运算符。
C\C++ 中,0 表示为假(false);所有非0的数均为真(true)
注意:为真,即整个式子返回 1;否则返回 0。
逻辑运算符
下表显示了 C\C++ 支持的关系逻辑运算符。
短路运算1:如果 x && y 中已知 x 为假,则 y 不会执行
短路运算2:如果 x || y 中已知 x 为真,则 y 不会执行
//如果 j 的个位不是 a,则 cnt 保持不变if (j%10==a && ++cnt==k)
printf("%d", i);
三、条件判断如何实现
本质上说,在C++语言中,条件判断语句其实就是一个整数值,我们只关心它是否为 0。
如果整数值为 0,视为假;
如果整数值非 0,视为真; 也就是说,5、10000、-1均视为真值,唯独 0 被视为假值。
做判断可以用任何表达式计算,以其计算结果为判断依据;
作为关系运算符,C++语言提供了“>, <, >=, <=, ==, !=”几个判断的符号。
注意:C\C++语言中,10 <= n <= 99 是 错误的写法,虽然语法正确,但判断结果不正确。
会先判断 10 <= n 的结果,如果为真,则为 1;如果为假,则为 0;
接着再用这个结果去和 99 作比较,而不论是 1 还是 0,都是小于 99 的,因此,最终结果 永远为 1(真值)。
在C\C++语言中永远不要这样使用关系表达式, 正确的写法是:10<=n && n<=99。
必须使用 && 连接两个判断。(表示“或者”的关系时,使用 || 运算符;表示“否定”时,使用 !)
逗号和 && 是不一样的!:逗号作为一个运算符,只返回 最后一个逗号后面式子或变量的值,并不是返回逗号左右两边的与关系运算的结果,也就是说,逗号运算符 并不进行“与”运算!
错误举例1:if (n>=10, n<=99) 只要满足 n<=99 就为真。
错误举例2:if (n>=10, n<=99, n%2==1) 只要满足 n%2==1 就为真。
四、代码块
如果在 if 或者 else 后面要执行的语句很多,我们就可能输入多个以分号结尾的语句,那么程序会把第一句分配给 if 或 else,其余的排除在外。
例如:
#include<stdio.h>intmain(){
int a = 0, b = 0;
if (a > 1) a += 5; b += 7;
printf("%d", b);
return0;
}
//b += 7; 这句和 if 无任何关系,始终都会执行。
那么,如果我们想要把 b += 7; 这句也放在满足 if 条件的时候执行,有两种做法:
//方法一#include<stdio.h>intmain(){
int a = 0, b = 0;
if (a > 1) a += 5, b += 7;//把 a += 5; 的分号改成逗号,两句变成一句printf("%d", b);
return0;
}
//方法二#include<stdio.h>intmain(){
int a = 0, b = 0;
if (a > 1) { a += 5; b += 7; }//用一对大括号将所有语句括起来printf("%d", b);
return0;
}
如同 main() 后面的大括号一样,一对大括号括起来的所有代码,被视为一个代码块,作为一个整体,如同是一句话。
五、switch 语句
switch 的英文意思是中转或开关,通常在乘车时,中转站被称为 switch,在分支语句中,当我们明确需要一个多叉的分支时,如果每个分支恰好对应一个具体的整数值,我们就可以使用 switch 语句。
switch(op) {//op一定是一个整数类型,可以为char,int,long long等case a: ...; break;//break语句表示从这里直接退出到switch的大括号外case b: ...; break;
...
default: ...; break;//相当于最后一个else,就是所有其他情况
}
switch 语句等同于 if-else if-else 结构,但后者应用范围更广,当分支条件不是具体值,而是取值范围时,就只能使用 if-else if-else 结构了。
如,输入一个实数 x,输出对应的 f(x) 的值:
if (x < 0) puts("-1");
elseif (x < 10) puts("3");
elseputs("5");