分支结构程序设计
关系运算符
在C++中,有六种关系运算符,包括>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、==(等于)、!=(不等于)。
由关系运算符连接起来的表达式,称为关系表达式。关系表达式的结果是一个逻辑值“真”或“假”。“真”表示这个关系成立,“假”表示这个关系不成立。在C++中通常用8表示假,用非0值(通常用1)表示真。
例
#includeusing
namespace std;
int main() {
intn1=4,n2=5, n3;
n3= (n1>n2);
cout<< n3 <<", “;
n3 (n1<n2);
cout<< n3<<”, “;
n3 = (n1==4) ;
cout<<n3 <<”, ";
n3 = (n1 == 5) ;
cout<< n3<< endl ;
return 0;
}
逻辑运算符
C++提供了&&(逻辑与)、丨丨(逻辑或)和! (逻辑非)三种逻辑运算符。
逻辑非运算规则:结果相反
逻辑与运算规则:有0结果为0
逻辑或运算规则:有1结果为1
短路运算:在逻辑表达式的计算过程中,一日能够确定整个表达式的值,就会立刻停止计算。例如,对于“A && B”,如果已经计算出表达式A为假那么整个表达式的值肯定为假,于是表达式B就不需要再计算下去了。同理,对于“A II B”,如果已经计算出表达式A为真,那么整个表达式必定为真,于是表达式B也不必计算下去了。
例:
#include
using namespace std;
int main() {
int a,b,c,d;
a = 2;b=3;c=0;
d =(a<bll (c =4));
cout<< d<< " "<<c<<endl;
return 0 ;
}
if语句
if语句有两种格式。第一种格式为:
if(表达式)
语句1;
else(表达式)
语句2;
表示如果“表达式”的值为真,那么执行“语句1”,否则执行“语句2”。
第二种格式为
if(表达式)
语句;
表示如果“表达式”的值为真,那么执行“语句”,否则什么也不做。
例
#include
using namespace std;
int main() {
int n;
cin>> n;
if(n <= 5)
cout<< n300<<endl;
else
cout<< n280<<endl;
return 0;}
if语句的嵌套
在分支结构中经常会遇到这样的情况:如果条件1成立,就去做A事情,否则去做B建但是,在做A事情(或者B事情)时,还要根据条件2是否成立,决定是做A1(或者B1)这件于事情,还是去做A2(或者B2)这件子事情。在程序设计中,把这种情况称为分支结构的“嵌套”,一般用来解决三种及以上的分支情况。
在上述程序中,if…else…语句的if子句里又套了一个if…else…语句。使用if语句的嵌套要注意以下几个问题。
①分支结构可以嵌套很多层
p3- -4-1的程序中,在第一层的if子句里嵌套了一个if语句(第二层),也就是嵌套一层。有时,情况分类很多,也可以根据需要,在第一层的else子句里嵌套,还可以在第二层的if里继续嵌套第三层,在第三层的if里继续嵌套第四层…
②if与else的配对关系
一个程序中可能会出现很多的if和else子句,那么,如何匹配呢?一句话,程序中的else子句总是与离它最近的前面一个if字句配对。
条件表达式
格式为:<表达式1>?<表达式2>:<表达式3>
为真只求2,为假只求3
#include
using namespace std;
int main() {
int x=5,y=10,z;
z=x>y?x:y;
cout<< z<< endl ;
z=x>0?1:-1;
cout <<z<<endl;
cout < (x 8 2== 0?“x is even”:“x is odd”) « endl;
return 0;}
switch语句
在一些实际问题中,分类情况特别多,如果用if语句嵌套实现,层数太多,容易出错。为此C++提供了-种多分支语句 -switch。
switch语句的一般格式为:
switch(表达式){
case 常量表达式1 :语句组1 ;[break;]
case 常量表达式2 :语句组2 ;[break;]
…
case 常量表达式n :语句组n ;[break;]
[default:语句组n+1]
}
执行过程为:先计算表达式的值,然后从前往后依次与case子句中所列出的各个常量表法式的值进行比较,若表达式的值与常量中的值相等,就开始进人相应的case后面的语句组执行,遇到后续的cae也不再进行判断(默认匹配),直至遇到break语句或swich语句结束。default表示表达式与所有常量表达式的值都不匹配,那么就执行其后面的语句组,通常将default放在最后。如果表达式与各分支常量表达式的值都不匹配时,不需要执行任何语句,则defantdefault可以省略。
例
#include
using namespace std;
int main() {
char ch;
cin >> ch;
switch(ch) {
case ‘A’:
case ‘B’ :
case ‘C’ :cout<< “Pass” << endl;break;}
}
疑惑
等于和赋值的区别:
(1)“等于”与“赋值”的区别“=”表示关系运算“等于”“==”表示“赋值"操作(2)实型数据(浮点数)的关系运算整型数据的关系运算按照数值大小进行比较,字符型数据按照ASCII码值大小进行比较。但是,实型数据(浮点数)在计算机中是近似存猪的,直接比较大小会出现问题。比如:0.6666666是否等于0.666667呢?这个结果不一定,若要求误差在0.001范围内,则相等;若要求在.0000001范围内,则不等。所以,在C++中,一般用两个数值的差与要求的精度进行比较,判断它们是否相等,或者判断一个数是否等于0。(3)运算符的优先级就是在个表达式中既有各种算术运算符,又有各种关系运算符时按售什么先后则序进行计算。在C中,算术远算符关系运算行欧值运算符的计算顺学现表时,当然,有括号的先算括号里面。
感受
if语句和switch语句非常好用。
但是switch语句要注意以下几点:
(1)switch后面的表达式,取值只能是整型、字符型、布尔型或枚举型。case 后面的常量表达式,其值类型要与switch后面表达式的类型-致。
(2)任意两个case后的表达式值必须各不相同,否则将引起歧义。
(3)语句组可以是一 条语句,也可以是一个复合语句。
(4)多个case语句可以共用一-组程序。