第三单元 分支结构程序设计
第一课 关系运算符
1、关系运算符
关系表达值的结果是一个逻辑值真或假(常用1和0来表示一个等式是否成立,其中1代表真,0代表假)
"=="等于 "!="不等于
"<="小于等于 ">="大于等于
注意:"=="与"="的区别
①"=="与"="的区别: "="表示判断两个变量相等如a==5表示a与5的值相等,且a的值是固定不变的。而a=5则代表将5赋值给a,a的值是可以改变的。
②实型数据(浮点数)的运算关系:
实行数据比较大小时一般用两个数值的差与要求的精度进行比较,判断它们是否相等,或判断一个数是否为0。如0.666666与0.666667的比较,当误差在0.001的范围内时二者是相等的,而在0.00000001范围内时,不等。
③运算的优先级:
算术运算符(*、/、%、+、-)高于关系远算符(<、>、<=、>=、==、!=)高于赋值运算符(=)
2、关系运算符应用举例
例①关系式成立与否
int x=6, y=4, z=5.
x+y>y+z 该表达式值为1(真)
'x'<'z' 该表达式值为1(真) (ASCII值中x位于z前面)
例②
#include<iostream>
using namespace std;
int main(){
int n1=4, n2=5, n3;
n3=(n1>n2); n3=0
cout<<n3<<",";
n3=(n1<n2); n3=1
cout<<n3<<", ";
n3=(n1==4); n3=1
cout<<n3<<",";
n3=(n1==5); n3=0
cout<<n3<<endl;
return 0;
}
最终结果0,1,1,0
第二课 逻辑运算符
1.&&(逻辑与)、||(逻辑或) 双目运算符
!(逻辑非)单目运算符
逻辑表达式的结果也是一个逻辑值"真"或"假"
2.运算需注意的问题:
1) 优先级(从高到低依次)
()
!、+(正)、-(负)、++、--
*、/、%
+(加)、-(减)
<、<=、>、>=
==、!=
&&
||
=、+=、-=、*=、/=、%=
结合性都是从左向右
例:①一个0~100之间(不包括0和100)的数a
a>0&&a<100
x大于y且x大于z
x>y&&x>z
2) 整型数据参与逻辑运算时,根据其值是0或非 0,分别当作逻辑值"真"或"假"处理
3) 逻辑表达式的短路运算
即A&&B若A为假则表达式值为假,不需要再继续运算,且其余值不变。A||B,A为真则表达式值为真,不需要继续运算
例:②
#include<iostream>
using namespace std;
int main(){
int a, b, c, d;
a=2;b=3;c=0;
d=(a>b)&&(c=4); 短路运算
cout<<d<<" "<<c<<endl; d=0. c=0
return 0;
}
第三课 if语句
1.if语句
格式一: if(表达式)
语句1;
else
语句2
格式二: if(表达式)
语句;
例:
#include<iostream>
using namespace std;
int main(){
int a, b, c;
cin>>a>>b;
if(a>b){
c=a;
a=b; 多条语句时可以加一个大括
b=c; 号将其定义为一条语句
}
cout<<a<<" "<<b<<endl;
return 0;
}
注意: 多条条件语句时加大括号与不加的区别,加大括号表示定义为一条语句,不加大括号表示不是条件语句。
第四课 if语句的嵌套
通常遇到较复杂的问题,需要具体情况具体分析判断条件成立下的执行情况
①分支结构可以嵌套很多层
②else子句总是与离它最近的前面一个if子句配对
③一套if,else是一个条件语句,复合语句要加大括号
④语句及嵌套都采用"缩进"对齐格式,让同层的if子句与else子句对齐。程序结构要锯齿状。
例:判断闰年
#include<iostream>
using namespace std;
int main(){
int x;
cin>>x;
if(x%400==0)
cout<<"YES"<<endl;
else
if(x%4==0)
if(x%100!=0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
第五课 条件表达式
格式:
<表达式1>?<表达式2>:<表达式3>
1.运算规则:首先计算表达式1的值,若表达式1的值为真(非0),则只计算表达式2,并将其结果作为整个表达式的值;否则,只计算表达式3,并将其结果作为整个表达式的值。
2.学会造数据
#include<iostream>
using namespace std;
int main(){
int x=5., y=10, z;
z=x>y?x:y; z=y=10
cout<<z<<endl; 10
z=x>0?1:-1; z=1
cout<<z<<endl; 1
cout<<(x%2==0?"x is even":"x is odd")<<endl; x is odd
return 0;
}
注:一般情况下,n种情况n减1个嵌套。
第六课 switch语句
switch 是一种多分支语句
1.格式:
switch(表达式)
case 常量表达式1:语句组1;[break;]
case 常量表达式2:语句组2;[break;]
…
case 常量表达式n:语句组n;[break;]
[default:语句组n+1]
2.先计算表达式的值,然后从前往后依次与case子句中所列出的各个常量表达式的值进行比较,若表达式的值与常量中的值相等,就开始进入相应的case后面的语句组执行,遇到后续的case也不再进行判断,直至遇到break语句或switch语句结束。
如果表达式与各分支常量表达式的值都不匹配时,不需要执行任何语句,则default可省略。
3.注:
①switch后面的表达式,取值只能是整型,布尔型,字符型,或枚举型。且case后面的常量表达式,其值类型要与switch后面的表达式的类型一致。
②任意两个case后的表达式值必须各不相同,否则将引起歧义。
③语句组可以是一条语句,也可以是一个复合语句。
④多个case语句可以共用一组程序。
例:
#include<iostream>
using namespace std;
int main(){
char ch;
cin>>ch;
switch(ch){
case'A':
case'B':
case'C':cout<<"PASS"<<endl;break;
}
}
因为三个case子句共用一个语句组"cout<<"Pass"<<endl;break;"所以输出结果为"Pass"。
第七课 分支结构应用举例
C++中的函数rand()返回[0,RAND_MAX]之间的随机整数,其中,RAND_MAX一般为32767。但是,在调用rand()之前一般要先设置"随机种子",通常可以用strand(time(0))来实现。
函数rand()和strand()需要包含"cstdlib"头文件,函数time()需要包含"ctime"头文件。
一般来说,产生a~b之间的随机整数可以表示为a+rand()%(b减a加1)
产生随机整数的方式:
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
int a, b, c;
srand(time(0))
int x=1, y=9;
a=x+rand()%(y_x+1);
b=x+rand()%(y_x+1);
x=1;
y=4;
c=x+rand()%(y_x+1);
switch(c){
case1:printf("%d+%d=%d\n",a,b,a+b);break;
case1:printf("%d+%d=%d\n",a,b,a_b);break
case1:printf("%d+%d=%d\n",a,b,a*b);break
case1:printf("%d+%d=%d\n",a,b,a/b);break}
return 0;
}
易错点:
①=与==的运用
②逻辑运算符的优先级
③if条件语句中的复合语句的正确使用方式用一个大括号来表示一条语句
④是否能正确理清思路来准确的写一个if条件语句
感受:通过学习if条件语句的使用以及语句的表达方式,首先我明白的一点就是要先认真的分析一个问题,有了基本的逻辑结构,思维框架之后,再利用所学写出一个正确的程序。本单元的知识逻辑思维是重要的。尤其是运算符,与平常所学有很大的区别,稍不注意变会用错,所以说,还是要搞明白应该用什么,怎么用才是最合理的。