第三章 选择结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
float a,b,c,d,t,x1,x2; cin>>a>>b>>c; d=b*b-4*a*c; t=2*a; if(d>0)
#include <iostream.h> #include <math.h>
{ }
x1 = (-b + sqrt(d)) / t; x2 = (-b - sqrt(d)) / t; cout<<"x1="<<x1<<"x2="<<x2<<endl;
if 语句
• if语句的格式之二 • 执行过程
真
条件 假 else块
if(条件) 语句1 else 语句2
if块 else块
if块
例2: cin>>x; if(x>0) cout<<x; else cout<<-x;
if语句的下一条语句
真 if块
条件
假
else块
注
if(3) cout<<"OK"; if('a') cout<<'a';
( a > b ) && ( x > y )
(低)
! a+b | | a > b ( (! a )+b) | | ( a > b )
逻辑运算及逻辑表达式
注意
• 逻辑运算的结果只可能为1或0; • 逻辑运算的对象可以是任何类型的数据, “非0”为“真”, “0”为“假”。
例: a=-5&&(3>2);
y=-1; if(x!=0) { if(x>0) y=1; } else y=0; x y 40 1 0 0 -9 -1
流程图
传统流程图
起止框 处理框 输入/输出 判断框 循环框 流程线
假
开始
price=850
输入num num100
真
price=price*0.95
total=price*num
输出total
结束
流程图
传统流程图
块1
N-S流程图
块1 块2
块2
T
语句
条件
F
T
条件
F
语句
关系运算及关系表达式
关系运算:比较两个数的大小,判断比较的 结果是否符合给定的关系。 < < <= > > >= = == != (小于) 6>3 (小于等于) -2>0 (大于) (大于等于) 3>=1 (等于) 3==1 (不等于)
else if(d==0) cout<<"x1=x2="<<-b/t; else
{ }
}
cout<<"x1="<<-b/t<<"+"<<sqrt(-d)/t<<"i"<<endl; cout<<"x2="<<-b/t<<"-"<<sqrt(-d)/t<<"i"<<endl;
if 语句的嵌套
在一个if块或else块中,还可以出现 另一个if语句,这就是嵌套。 嵌套不限于两层,可以在第二层if 中出现第三层if,如此一层层嵌套 下去。 else总是与它上面离它最近的if配对。
第三章 选择结构程序设计
– 引例 – if语句格式之一 – 流程图
– 关系运算及关系表达式 – 逻辑运算及逻辑表达式 – if语句格式之二 – if语句的嵌套 – if语句格式之三 – switch语句
引 例
例1:输入学生成绩,并输出。 例2:输入学生成绩,若大于等于60,则输出“Passed”。
意
条件可以为任意表达式,非0则真。
else必与if 配对使用。
if块和else块可以是一条语句,也可以是多 条语句,如果是多条语句,需要用花括号 括起来作为一条复合语句。
举 例
例1:输入一个数,若能被3整除,计算该数的立方, 并打印yes,否则,计算该数的平方,并打印no。
#include <iostream.h> void main() { int x,lf,pf; cin>>x; if(x%3==0) { if=x*x*x; cout<<"yes:"<<lf;
num100
真
price=price*0.95
price*0.95 (num100)
total=price*num
输出total
举 例
开始 price=850 输入num
假
#include <iostream.h> void main( ) {
num100
真
price=price*0.95 total=price*num
if 语句
• if语句的格式之一 if(条件) 语句 例1:cin>>x; if(x<0) x=-x; cout<<x; • 执行过程
真 语句
条件
假
if语句的下一条语句
举 例
例1:某货物单价850元,若买100个以上(包含100) 按九五折优惠价。输入购买个数,求总款数。 分析: price=850 单价:price=850 购买的个数:num 输入num 总款数:total 假 total= price*num price= price (num<100)
如果 成绩≥60 输出“Passed” if (score>=60) cout<<"Passed";
例3:输入学生成绩,若大于等于60则输出“Passed”, 否则“Failed”。
例4:输入学生成绩,若大于等于90,则输出 A;若小 于90,大于等于70,输出 B;若小于70,大于等于60, 则输出C;小于60则输出D。
关系运算及关系表达式
关系表达式的计算结果是一个表示逻辑真假的值: 关系成立,结果为真,用1表示; 关系不成立,结果为假,用0表示。
6>3 1 -2>0 0 3>=1 1 3==1 0
例: 已知x=5,y=4,z=1 x>y 的值是 1 a的值是 a=x<y;
0 (x-y)==z的值为 1 b=x>y>z; b的值是 0
相当于 (a+b)>c 相当于 (c>b)>a 相当于 d=(c>b)
1
0
a==b<c 相当于 a==(b<c)
1
0
1
1
举 例
例:已知三个数 a, b, c,打印出最大者。
如果 a >b 并且 a>c 打印 a
如果 b >a 并且 b>c 打印 b 如果 c >a 并且 c>b 打印 c
举 例
程序:
#include <iostream.h> void main() { int a,b,c; cin>>a>>b>>c; if(a>b && a>c) cout<<a; if(b>a && b>c) cout<<b; if(c>a && c>b) } cout<<c;
逻辑运算及逻辑表达式
逻辑运算符: && 逻辑与 | | 逻辑或 ! 逻辑非
输入x 真 x%3==0 假
计算x3 打印yes
计算x2 打印no
}
else
{ pf=x*x; }
}
cout<<"no:"<<pf;
举
2
例
的根。
例:求一元二次方程式:
ax bx c 0
2-4ac0时,有两个实根 当b
当b2-4ac<0时,有两个虚根
流程图:
开始 输入a, b, c
d =b2-4ac
float price=850, total; int num; cin>>num; if(num>=100)
price=price*0.95; total=price*num; cout<<"总款数:"<<total;
输出total
结束
}
举 例
例2 输入两个整数,由大到小顺序输出这两个数。
开始 输入a,b a<b? 假 真 a 和 b值交换
输出a,b 结束
6 9 9 6
#include <iostream.h> void main( ) { int a, b, c; cin>>a>>b; if(a<b) { 复 c=a; 合 a=b; 语 b=c; 句 } cout<<a<<" "<<b; }
流程图
所谓流程图就是用某种形式的图来 表示一个算法。 算法:解题的方法和步骤。 流程图可形象地表示一个算法,清 楚地表示出各个步骤之间的先后次 序。
{
输入a, b, c
d =b2-4ac
float a,b,c,d, t,x1,x2; T 计算两实根x1,x2 计算并打印 F d≥0 两个虚根 打印x1,x2 cin>>a>>b>>c; d=b*b-4*a*c; t=2*a; 结束 if(d>=0) { x1 = (-b + sqrt(d)) / t; x2 = (-b - sqrt(d)) / t; cout<<"x1="<<x1<<"x2="<<x2<<endl; } else { cout<<"x1="<<-b/t<<"+"<<sqrt(-d)/t<<"i"<<endl; cout<<"x2="<<-b/t<<"-"<<sqrt(-d)/t<<"i"<<endl; }
}
举
例
例:求一元二次方程式: 2 ax bx c 0 的根。 对应b2-4ac的值大于零、小 于零、等于零三种情况进 行处理。
Байду номын сангаас 流程图:
开始 输入a,b,c
d= b2-4ac
F
F d= =0 T 计算并打印两个等根 d>0 T 计算两个不等实根 打印x1,x2
计算并打印 两个虚根
结束
void main()
例:求一元二次方程式: ax2 bx c 0 的根。
当b2-4ac0时,有两个实根 当b2-4ac<0时,有两个虚根
计算并打印 两个虚根
F
d≥0
T
计算两实根x1,x2 打印x1,x2
结束
#include <iostream.h> #include <math.h>
开始
void main( )
7.2 0
0 0
0
2.4
9.0
0
0 0
0
举 例
例:用逻辑表达式表示下面的条件。 1. A 或 B 大于C 2. x大于0小于10 3. A 是偶数
A>C||B>C
x>0 &&x<10 A%2==0
4. 判别某一年 year 是否闰年。 (1) 能被4整除,但不能被100整除,或 (2) 能被4整除,又能被400整除
A 真 真 假 B 真 假 真 A&&B 真 假 假 假
双目运算符 单目运算符
A||B 真 真 真 !A 假 !B 假 真 假
逻辑运算真值表
假 真 真
假
假
假
真
逻辑运算及逻辑表达式
逻辑表达式的运算次序: 例如: ( ) 小括号 ! 逻辑非 算术运算符 关系运算符 && || 赋值运算符
(高)
a > b && x > y
(year%4==0&&year%100!=0)||(year%400==0)
引 例
例1:输入学生成绩,并输出。
if (score>=60) cout<<"Passed";
例2:输入学生成绩,若大于等于60,则输出“Passed”。
例3:输入学生成绩,若大于等于60则输出“Passed”, 否则“Failed”。
关系运算及关系表达式
< (小于) <= (小于等于) > (大于) >= (大于等于) = = (等于) != (不等于)
优先级相同(高) 优先级相同(低)
(高) (低)
算术运算符
关系运算符
关系运算及关系表达式
例:已知a=1,b=2,c=3
c>b==a 相当于 (c>b)==a a+b>c c>b>a d= c>b 'a'<'b'
if (score>=60) cout<<"Passed"; if (score<60) cout<<"Failed"; if (score>=60) cout<<"Passed"; else cout<<"Failed";
例4:输入学生成绩,若大于等于90,则输出 A;若 小于90,大于等于70,输出 B;若小于70,大于等于 60,则输出C;小于60则输出D。
举 例
1 (x 0) 例:下面的程序要计算函 数的值,判断哪个程序正确。 y 0 (x 0) 1 (x 0)
if(x>=0) if(x>0) y=1; else y=0; else y=-1; x y 40 1 0 0 -9 -1
真 真 y=1 x>0
x>=0 假 y=0
假
y=-1
举 例
例: 下面的程序要计算函 数的值,判断哪个程序正确.
1 (x 0) y 0 (x 0) 1 (x 0)
if(x>=0) if(x>0) y=1; else y=0; else y=-1; x y 40 1 0 0 -9 -1
y=-1; if(x!=0) if(x>0) y=1; else y=0; x y 40 1 0 -1
1
逻辑运算及逻辑表达式
逻辑运算真值表
A 非0
非0
B 非0
0
A&&B 1
0
A||B 1
1
!A 0
0
!B 0
1
0
0
非0
0
0
0
1
0
1
1
0
1
举 例
例:计算下面表达式的值。已知a=0.5, b=2.0, c=1.2, d=7.5, x=3.0, y=5.0, L1=6
a>3.6*b&&x==y||L1&&!(3.6-c)*2>=3*d/2.5
float a,b,c,d,t,x1,x2; cin>>a>>b>>c; d=b*b-4*a*c; t=2*a; if(d>0)
#include <iostream.h> #include <math.h>
{ }
x1 = (-b + sqrt(d)) / t; x2 = (-b - sqrt(d)) / t; cout<<"x1="<<x1<<"x2="<<x2<<endl;
if 语句
• if语句的格式之二 • 执行过程
真
条件 假 else块
if(条件) 语句1 else 语句2
if块 else块
if块
例2: cin>>x; if(x>0) cout<<x; else cout<<-x;
if语句的下一条语句
真 if块
条件
假
else块
注
if(3) cout<<"OK"; if('a') cout<<'a';
( a > b ) && ( x > y )
(低)
! a+b | | a > b ( (! a )+b) | | ( a > b )
逻辑运算及逻辑表达式
注意
• 逻辑运算的结果只可能为1或0; • 逻辑运算的对象可以是任何类型的数据, “非0”为“真”, “0”为“假”。
例: a=-5&&(3>2);
y=-1; if(x!=0) { if(x>0) y=1; } else y=0; x y 40 1 0 0 -9 -1
流程图
传统流程图
起止框 处理框 输入/输出 判断框 循环框 流程线
假
开始
price=850
输入num num100
真
price=price*0.95
total=price*num
输出total
结束
流程图
传统流程图
块1
N-S流程图
块1 块2
块2
T
语句
条件
F
T
条件
F
语句
关系运算及关系表达式
关系运算:比较两个数的大小,判断比较的 结果是否符合给定的关系。 < < <= > > >= = == != (小于) 6>3 (小于等于) -2>0 (大于) (大于等于) 3>=1 (等于) 3==1 (不等于)
else if(d==0) cout<<"x1=x2="<<-b/t; else
{ }
}
cout<<"x1="<<-b/t<<"+"<<sqrt(-d)/t<<"i"<<endl; cout<<"x2="<<-b/t<<"-"<<sqrt(-d)/t<<"i"<<endl;
if 语句的嵌套
在一个if块或else块中,还可以出现 另一个if语句,这就是嵌套。 嵌套不限于两层,可以在第二层if 中出现第三层if,如此一层层嵌套 下去。 else总是与它上面离它最近的if配对。
第三章 选择结构程序设计
– 引例 – if语句格式之一 – 流程图
– 关系运算及关系表达式 – 逻辑运算及逻辑表达式 – if语句格式之二 – if语句的嵌套 – if语句格式之三 – switch语句
引 例
例1:输入学生成绩,并输出。 例2:输入学生成绩,若大于等于60,则输出“Passed”。
意
条件可以为任意表达式,非0则真。
else必与if 配对使用。
if块和else块可以是一条语句,也可以是多 条语句,如果是多条语句,需要用花括号 括起来作为一条复合语句。
举 例
例1:输入一个数,若能被3整除,计算该数的立方, 并打印yes,否则,计算该数的平方,并打印no。
#include <iostream.h> void main() { int x,lf,pf; cin>>x; if(x%3==0) { if=x*x*x; cout<<"yes:"<<lf;
num100
真
price=price*0.95
price*0.95 (num100)
total=price*num
输出total
举 例
开始 price=850 输入num
假
#include <iostream.h> void main( ) {
num100
真
price=price*0.95 total=price*num
if 语句
• if语句的格式之一 if(条件) 语句 例1:cin>>x; if(x<0) x=-x; cout<<x; • 执行过程
真 语句
条件
假
if语句的下一条语句
举 例
例1:某货物单价850元,若买100个以上(包含100) 按九五折优惠价。输入购买个数,求总款数。 分析: price=850 单价:price=850 购买的个数:num 输入num 总款数:total 假 total= price*num price= price (num<100)
如果 成绩≥60 输出“Passed” if (score>=60) cout<<"Passed";
例3:输入学生成绩,若大于等于60则输出“Passed”, 否则“Failed”。
例4:输入学生成绩,若大于等于90,则输出 A;若小 于90,大于等于70,输出 B;若小于70,大于等于60, 则输出C;小于60则输出D。
关系运算及关系表达式
关系表达式的计算结果是一个表示逻辑真假的值: 关系成立,结果为真,用1表示; 关系不成立,结果为假,用0表示。
6>3 1 -2>0 0 3>=1 1 3==1 0
例: 已知x=5,y=4,z=1 x>y 的值是 1 a的值是 a=x<y;
0 (x-y)==z的值为 1 b=x>y>z; b的值是 0
相当于 (a+b)>c 相当于 (c>b)>a 相当于 d=(c>b)
1
0
a==b<c 相当于 a==(b<c)
1
0
1
1
举 例
例:已知三个数 a, b, c,打印出最大者。
如果 a >b 并且 a>c 打印 a
如果 b >a 并且 b>c 打印 b 如果 c >a 并且 c>b 打印 c
举 例
程序:
#include <iostream.h> void main() { int a,b,c; cin>>a>>b>>c; if(a>b && a>c) cout<<a; if(b>a && b>c) cout<<b; if(c>a && c>b) } cout<<c;
逻辑运算及逻辑表达式
逻辑运算符: && 逻辑与 | | 逻辑或 ! 逻辑非
输入x 真 x%3==0 假
计算x3 打印yes
计算x2 打印no
}
else
{ pf=x*x; }
}
cout<<"no:"<<pf;
举
2
例
的根。
例:求一元二次方程式:
ax bx c 0
2-4ac0时,有两个实根 当b
当b2-4ac<0时,有两个虚根
流程图:
开始 输入a, b, c
d =b2-4ac
float price=850, total; int num; cin>>num; if(num>=100)
price=price*0.95; total=price*num; cout<<"总款数:"<<total;
输出total
结束
}
举 例
例2 输入两个整数,由大到小顺序输出这两个数。
开始 输入a,b a<b? 假 真 a 和 b值交换
输出a,b 结束
6 9 9 6
#include <iostream.h> void main( ) { int a, b, c; cin>>a>>b; if(a<b) { 复 c=a; 合 a=b; 语 b=c; 句 } cout<<a<<" "<<b; }
流程图
所谓流程图就是用某种形式的图来 表示一个算法。 算法:解题的方法和步骤。 流程图可形象地表示一个算法,清 楚地表示出各个步骤之间的先后次 序。
{
输入a, b, c
d =b2-4ac
float a,b,c,d, t,x1,x2; T 计算两实根x1,x2 计算并打印 F d≥0 两个虚根 打印x1,x2 cin>>a>>b>>c; d=b*b-4*a*c; t=2*a; 结束 if(d>=0) { x1 = (-b + sqrt(d)) / t; x2 = (-b - sqrt(d)) / t; cout<<"x1="<<x1<<"x2="<<x2<<endl; } else { cout<<"x1="<<-b/t<<"+"<<sqrt(-d)/t<<"i"<<endl; cout<<"x2="<<-b/t<<"-"<<sqrt(-d)/t<<"i"<<endl; }
}
举
例
例:求一元二次方程式: 2 ax bx c 0 的根。 对应b2-4ac的值大于零、小 于零、等于零三种情况进 行处理。
Байду номын сангаас 流程图:
开始 输入a,b,c
d= b2-4ac
F
F d= =0 T 计算并打印两个等根 d>0 T 计算两个不等实根 打印x1,x2
计算并打印 两个虚根
结束
void main()
例:求一元二次方程式: ax2 bx c 0 的根。
当b2-4ac0时,有两个实根 当b2-4ac<0时,有两个虚根
计算并打印 两个虚根
F
d≥0
T
计算两实根x1,x2 打印x1,x2
结束
#include <iostream.h> #include <math.h>
开始
void main( )
7.2 0
0 0
0
2.4
9.0
0
0 0
0
举 例
例:用逻辑表达式表示下面的条件。 1. A 或 B 大于C 2. x大于0小于10 3. A 是偶数
A>C||B>C
x>0 &&x<10 A%2==0
4. 判别某一年 year 是否闰年。 (1) 能被4整除,但不能被100整除,或 (2) 能被4整除,又能被400整除
A 真 真 假 B 真 假 真 A&&B 真 假 假 假
双目运算符 单目运算符
A||B 真 真 真 !A 假 !B 假 真 假
逻辑运算真值表
假 真 真
假
假
假
真
逻辑运算及逻辑表达式
逻辑表达式的运算次序: 例如: ( ) 小括号 ! 逻辑非 算术运算符 关系运算符 && || 赋值运算符
(高)
a > b && x > y
(year%4==0&&year%100!=0)||(year%400==0)
引 例
例1:输入学生成绩,并输出。
if (score>=60) cout<<"Passed";
例2:输入学生成绩,若大于等于60,则输出“Passed”。
例3:输入学生成绩,若大于等于60则输出“Passed”, 否则“Failed”。
关系运算及关系表达式
< (小于) <= (小于等于) > (大于) >= (大于等于) = = (等于) != (不等于)
优先级相同(高) 优先级相同(低)
(高) (低)
算术运算符
关系运算符
关系运算及关系表达式
例:已知a=1,b=2,c=3
c>b==a 相当于 (c>b)==a a+b>c c>b>a d= c>b 'a'<'b'
if (score>=60) cout<<"Passed"; if (score<60) cout<<"Failed"; if (score>=60) cout<<"Passed"; else cout<<"Failed";
例4:输入学生成绩,若大于等于90,则输出 A;若 小于90,大于等于70,输出 B;若小于70,大于等于 60,则输出C;小于60则输出D。
举 例
1 (x 0) 例:下面的程序要计算函 数的值,判断哪个程序正确。 y 0 (x 0) 1 (x 0)
if(x>=0) if(x>0) y=1; else y=0; else y=-1; x y 40 1 0 0 -9 -1
真 真 y=1 x>0
x>=0 假 y=0
假
y=-1
举 例
例: 下面的程序要计算函 数的值,判断哪个程序正确.
1 (x 0) y 0 (x 0) 1 (x 0)
if(x>=0) if(x>0) y=1; else y=0; else y=-1; x y 40 1 0 0 -9 -1
y=-1; if(x!=0) if(x>0) y=1; else y=0; x y 40 1 0 -1
1
逻辑运算及逻辑表达式
逻辑运算真值表
A 非0
非0
B 非0
0
A&&B 1
0
A||B 1
1
!A 0
0
!B 0
1
0
0
非0
0
0
0
1
0
1
1
0
1
举 例
例:计算下面表达式的值。已知a=0.5, b=2.0, c=1.2, d=7.5, x=3.0, y=5.0, L1=6
a>3.6*b&&x==y||L1&&!(3.6-c)*2>=3*d/2.5