第五章 选择结构
第5章 选择结构程序设计

通过例5.4和5.5,会注意到:无论是块If单分支结构还是块If双分支结构,均 把程序执行过程分为满足条件的一支和不满足条件的另一支,但在应用中会遇 到类似下面的问题或更复杂的情况,例如,分段函数: x2 1 x>0 y 0 x=0 2 x<0 x 1
自变量x的取值分为三种情况,对应函数y有不同的计算表达式。此类问题 可以使用三个块IF单分支结构完成;也可以使用块IF双分支结构。若采用前 者,读者可仿照例5.4完成;若采用后者,可先把x的取值分为“等于0”和 “不等于0”两种情况,再把“不等于0”这种情况分成“大于0”和“小于0”两种 情况,代码如下: Dim x As Single, y As Single x = Val(InputBox("请输入变量的值")) If x <> 0 Then If x > 0 Then ' 不等于0的情况之一 y=x^2+1 Else ' 不等于0的情况之二 y=x^2-1 End If
2 2
Dim x As Single, y As Single ' 声明x,y为单精度变量 x = Val(InputBox("请输入变量的值")) ' 输入x的值 If x >= 0 Then ' x>=0时计算y y=x^2+1 End If If x < 0 Then ' x<0时计算y y=x^2-1 End If Print "x="; x, "y="; y 该代码段根据x取值的两种情况,分别计算出相应的y值,一个单分支If 结构完成一种情况的计算,因此结构简单,容易理解,但程序不够简练。
真
语句组1
c语言(第五章选择结构) c语言 教学课件

• !((year%4==0 && year%100!=0)||year%400==0)或者:
• (year%4!=0 )||( year%100==0 && year%400!=0)
C语言程序设计
第五章 选择结构程序设计
5.3 if语句(条件选择语句)
• if语句的三种形式 ▪ 形式一: • 格式:
语句2
=0
表达式3 非0
语句3
=0 语句4
C语言程序设计
第五章 选择结构程序设计
• 例:
if (salary>1000) else if (salary>800) else if (salary>600) else if (salary>400) else index=0;
index=0.4; index=0.3; index=0.2; index=0.1;
if (x>0) printf(“%f”,x) ;
else printf(“%f”,-x);
(3)在if 和else 后面可以只含一个内嵌的语句,也可以有 多个操作语句,此时用花括号将几个语句括起来成为一 个复合语句。如:
if (x>y)
{ t=x ; x=y ; y=t ; }
C语言程序设计
第五章 选择结构程序设计
a=4;b=5;
!a
//值为0
a&&b //值为1
a||b
//值为1
!a||b
//值为1
4&&0||2 //值为1
5>3&&2||8<4-!0 //(5>3)&&2||(8<(4-(!0))) 值为1
c语言程序设计 第五章 程序控制流程——选择结构

1. 基本语法格式
if(表达式)
语句
说明:
(1) if语句的执行过程是先计算表达式的值,如果非0就执行包含在if中的语句;如果为0就不执行该语句。如下图所示:
(2) if语句中的表达式可以是任意的有值表达式,实际编程时往往使用关系表达式或将多个关系表达式用逻辑运算符连接起来的逻辑表达式。
main()
{
double a=.9*9,b=.1;
double c=0.1+0.2;
printf("c==0.3 %d\n",c==0.3);
printf("a==b %d\n",a==b);
}
【例5.4】比较两个浮点数是否相等的正确方法
#include <stdio.h>
#include <math.h>
#include <stdio.h>
main()
{
int a10,b=50,c=30;
if(a=b+c) printf("*******\n");
else printf("$$$$$$$\n");
}
【例5.14】输入两个实数,按代数值由小到大的次序输出这两个数。
#include <stdio.h>
main()
scanf("%d,%d,%d",&a,&b,&c);
max=a;/*先假定变量a的值最大*/
if(max<b) max=b;/*比较变量max值和变量b值的大小,如果b大,就将b赋给max*/
if(max<c) max=c;/*比较变量max值和变量c值的大小,如果c大,就将c赋给max*/
5whw-c-chapter 5

C语言程序设计
第五章 选择结构程序设计
应该理解为:
还是应该理解为:
if(x>=1)
if(x>5) x++; else x--;
if(x>=1)
if(x>5) x++; else x--;
为了避免这种二义性,C语言规定,else 总是与它前 面最近的未配对的if配对。 因此对上述例子应按后一 种情况理解。如果要使else与第一个if配对,则可加括 号{ }来实现。 <
printf("%d,%d\n", x||i&&j-3, i<j&&x<y);
printf("%d,%d\n", i==5&&c&&(j=8), x+y||i+j+k); <
C语言程序设计
第五章 选择结构程序设计
说明: (见教材Pg.94) 在逻辑表达式的求解中,并不是所有的逻辑运算符都执 行,只有在必须执行下一个逻辑运算符才能求出表达式的值 时,才执行下一个运算符。 (1) 表达式1 && 表达式2
");
x--;
else
}
printf("A=B\n");
C语言程序设
第五章 选择结构程序设计
例5.3 教材Pg.100 void main() { int x,y; scanf("%d",&x) y= if(x<0) y=-1; else if (x==0) y=0; else y=1; printf("x=%d,y=%d\n",x,y); } 程序1 if(x>=0) if (x>0) y=1; else y=0; else y=-1;
C语言第五章

学习提示: (1)算法包括输入、处理和输出三个部分 ,其中处理部分为选择结构。
b=t
F
输出a,b 结束
5
信息科学与技术学院 软件工程系
选择结构算法设计
South West Jiaotong University
【例5. 1】输入a、b值,如果a>b,那么交换a和b,使得a≤b。 解决该问题的主要步骤为: 开始
17
信息科学与技术学院 软件工程系
关系运算符和关系表达式
【例】编写以下程序,查看结果。 #include <stdio.h> void main() { int a,b,c; int d,e,f; a=4,b=5,c=6; d=a>b; e=a<b<c; f=c>b>a; printf("%d %d %d \n",d,e,f); }
South West Jiaotong University
20
信息科学与技术学院 软件工程系
逻辑运算符- 优先级
• 各类运算符的优先级关系:
South West Jiaotong University
– !(非)高于 &&(与) 高于 ||(或)。 – &&(与)和||(或)低于关系运算符 – !(非)高于 算术运算符
1)任何数值(字符、整数、实数、指针)都可以表示 逻辑意义,只要数值不等于0,就表示“真”,而0 表示“假”;
2)关系与逻辑运算表达式的运算结果为“真”,表达 式的值为int型整数1,运算结果为“假”,则表达 式的值为int型整数0。
由2)可知,C语言的关系运算表达式和逻辑运算表 达式应该属于整型表达式范畴。
C语言程序设计

>=90, A. (90-100)。 >=80, B. (80-89)。 >=70, C. (70-79)。 >=60, D. (60-69)。
>=0, E. (0-59)。 main( ) { float score; printf(“\n Enter a score(0-100):”); scanf(“%f”,&score); if (score>=90) printf(“A \n”); else if (score>=80) printf(“B \n”); else if (score>=70) printf(“C \n”); else if (score>=60) printf(“D \n”); else printf(“E \n”); }
次序任意
(4) 在switch开关分支语句结构中, default部分不是必须的, 如果没 有default部分, 则当e表达式的值与各case后的ci常量表达式的值 都不一致时, 则程序不执行该结构中的任何部分。 switch ( e ) { case c1: S1; break; case c2: S2; break; …… case cn: Sn; break; }
使用 switch-case 分支语句时,应注意以下几点: (1)switch 后面的e表达式 可以是整型常量或变量、字符型常量或变量、枚举 类型表达式。其结果值必须是整型数据或字符型数据。 switch ( e ) { case c1: S1; break; case c2: S2; break; …… case cn: Sn; break; default : Sn+1; break; } 例: main( ) { char a; switch (5+6/3) { .. .. } switch (a ) { .. .. } … }
5选择结构程序设计

内嵌if 内嵌if
例 输入两数并判断其大小关系
#include <stdio.h> void main() { int x,y; printf("Enter integer x,y:"); 运行:Enter integer x,y:12,23↵ X<Y scanf("%d,%d",&x,&y); Enter integer x,y:12,6↵ if(x!=y) X>Y if(x>y) printf("X>Y\n"); Enter integer x,y:12,12↵ else printf("X<Y\n"); X==Y else printf("X==Y\n"); }
0 2 0
<
>
任务5.2 逻辑运算符和表达式 任务
逻辑运算符
种类: ! (逻辑非) && (逻辑与) || (逻辑或) 逻辑运算真值表 a 真 真 假 假 b 真 假 真 假 !a 假 假 真 真 !b 假 真 假 真 a&&b 真 假 假 假 a||b 真 真 真 假
C语言中,运算量:
0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,
§形式三:else…if结构
#include "stdio.h" void main() { int a,b,c,max; printf("请输入三个整数a,b,c:"); scanf("%d%d%d",&a,&b,&c); if(a<b) if(b<c) max=c; else max=b; else if(a<c) max=c; else max=a; printf("%d,%d,%d中最大数为%d\n",a,b,c,max); }
C语言程序设计教案第五章选择结构程序设计[修改版]
![C语言程序设计教案第五章选择结构程序设计[修改版]](https://img.taocdn.com/s3/m/12c4fb95f5335a8103d220da.png)
第一篇:C语言程序设计教案第五章选择结构程序设计第五章选择结构程序设计课题:教学目的: 教学重点:教学难点:第五章选择结构程序设计1、掌握实现选择结构的两种语句、一个运算符2、学会编写选择结构的程序if-else语句、switch语句、条件运算符嵌套if-else语句中的if与else匹配问题步骤一复习引导上一次课已经介绍了程序基本结构之一,但在大多数情况下都要用到选择结构。
步骤二讲授新课在C语言中实现选择结构的控制语句主要有if语句、switch语句一、条件语句1、if语句的三种形式语法1:if (表达式)语句; 如:#include main( ) { char ch; ch=getchar();if(ch>‟a‟&&chputchar(ch); }语法2:if (表达式)语句1;else语句2;如:#includemain(){ int a,b;scanf (“%d%d”,&a,&b);if(a>b) printf(“max=%d\n”,a);else printf (“max=%d\n”,b);}语法3:if (表达式1)语句1;else if (表达式2) 语句2;elseif (表达式3) 语句3;……else 语句n+1;例如:从键盘上输入字符,判别其分类:控制符、数字、大写字母、小写字母、其他字符。
#include “stdio.h”main( ) { char c; c=getchar( ); if (c< 32) printf(“This is a control character.\n”);else if (c>=…0‟&&celse if (c>=…A‟&&celse if (c>=…a‟&&celseprintf (“This is an other charater.\n”); 说明:1、三种形式的if 语句中,if 关键字后均为表达式(逻辑表达式、关系表达式、赋值表达式、变量等);如:if (a=5) 语句;if (b) 语句;2、if 语句中,条件表达式必须用括号括起来,在语句后必须加分号;满足条件需执行一组语句时,该组语句必须用{ }括起来;如:if (a+b>c&&b+c>a&&a+c>b){ s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%6.2f\n”,area);}elseprintf(“It is not a trilateral.”);3、if 语句嵌套时,else 总是与它最靠近的if 匹配;如:有一数学函数:x0时,y=1 编写程序,输入x的值,输出相应y的值main( ) { int x,y;scanf(“%d”,&x);if (xelse if (x= =0) y=0;else y=1;printf(“x=%d,y=%d\n”,x,y);}说明:因为if 语句执行时总是简单地测试其中作为条件的“表达式”的值是0还是非0,便可利用这种特性来简化程序设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A) 6,1 B) 2,lC) 6,0 D) 2,0
22.下面程序段执行后x的值为______________。
inta=14,b=15,x;char c='A';
x=(a&&b) && (c<'B');
printf("%d",x);
A) 0 B)1C) 14D) 15
44.若a=1,b=3,c=5,d=4,则执行下面程序段后x的值是______________
if(a<b)
if (c<d)x=1;
else
if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
else x=7;
A) 1 B)2C) 3 D) 4
45.在下面的条件语句中(其中S1和S2表示C语言语句),只有_____________在功能上与其他三个语句不等价。
A) 4 B)3 C) 2 D) l
25.若有inti=5;j=4,k=6; float f;执行语句f=(i<j && i<k)?i:(j<k)?j:k;后f的值为___________。
A) 4.0 B)5.0 C)6.0 D) 7.0
26.若定义了intx=100;则表达式x++>100?x+20:x+10的值为___________。
A) 1B)2 C) 3 D) 4
29.下面程序段执行后的输出结果是____________。
int a,b,c;int x=5,y=l0;
a=(--y= =x++) ?-y:++x;
b=y++;c=x;
printf("%d,%d,%d",a,b,c);
A) 6,9,7 B) 6,9,6C) 7,9,6 D) 7,9,7
A) x%2= =0B)!x%2!=0c)(x/2*2-x) = =0D)!(x%2]
34.下列表达式中,能正确表示“当x的取值在[1,l0]和[200,210]范围内为真,否则为假”的表达式是_______________。
A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
9.int a=1,b=2,c=4;经过表达式(c=a!=b)&&(a= =b)&&(c=b)运算后,a,b和c的值分别是___________。
A) 1,2,0 B) 1,2,1 C) 1,2,2 D) 1,2,3
10.表达式!x||a= =b等效于____________。
A)!((x||a)= =b) B)!(x||y)= =bC) !(x||(a= =b) ) D)(!x)||(a= =b)
32.若变量c为char类型,能正确判断出c为小写字母的表达式是____________。
A)'a'<=c<='z'B)(c>='a') || (c<='z')
C)!((c>='a') || (c<='z'))D)(c>='a') && (c<='z')
33.下列表达式中,__________不满足“当x的值为偶数时值为其,为奇数时值为假”的要求。
16.设有定义:inta=2,b=3,c=4;以下选项中值为0的表达式是_____________。
A) a||(b+b) && (c-a)B)(a<B) && !c || 1
C) a&&bD)(!a= =1)&& (!b= =0)
17.设有定义:int k=1,m=2;floatf=7;则以下选项中错误的表达式是__________。
A)1B)3 c) 4 D)不定值
14.已有定义int x=3,y=4,z=5;则表达式!(x+y)+z-1 && y+z/2的值是_________。
A) 6B)2C)1D)0
15.以下选项中非法的表达式是___________。
A)0<=x<100B)i=j= =0C) (char)(x<100) D) x+1=x+1
B)(x>=1)|| (x<=10)|| (x>=200)|| (x<=210)
C)(x>=1)&&(x<=10)|| (x>=200)&&(x<=210)
D)(x>=1)|| (x<=10)&&(x>=200)|| (x<=210)
35.下述表达式中,___________可以正确表示x≤0或x≥1的关系。
C)假为-l,真为l D)假为0,真为不确定的值
3.下列运算符中,优先级从高到低依次为__________。
A)&&! || B) ||&&! C)&&|| ! D) ! && ||
4.设inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为____________。
printf("%d,%d,%d", a,b,c);
A)6,7,7 B) 6,7,8C)8,7,6 D) 8,7,8
47.程序段执行后的输出结果是______________。
int a=1,b=2,x=0;
if(!(--a)) x--;
if(!b) x=7;
else ++x;
printf("%d",x);
A) k=k>=k B)-k++C) k%f D) k>=f>=m
18.下面各组表达式运算结果均为真的是_________。
A)①0 && a= =0②0|| a= =l
B)①a || !a= =0②a && !a= =0
C)①! (a | |b)= =!a || !b②!(a&&b)= =!a || !b
#include <stdio.h>
void main()
{
int x,y;
scanf("%d%d",&x,&y);
if(x>y)
x=y; y=x;
else
x++; y++;
printf("%d,%d",x,y);
}
A)有语法错误,不能通过编译B)若输入3和4,则输出4和5
C)若输入4和3,则输出3和4B)若输入4和3,则输出4和5
A) l B)2 C) 3 D) 4
5.若有定义:inta=3,b=2,c=1;并有表达式:①a%b,②a>b>c,③b&&c+1,④c+=1,则表达式值相等的是______________。
A)①和②B)②和③C)①和③D)③和④
6.设int i=10;表达式30-i<=i<=9的值是________________。
C) y=-1; D) if(x>0) y=1;
if (x) else if(x<0) y=-1;
A) if(a=b) x++;B)if(a=<b) x++;
C)if(a-b) x++;D)if(x) x++;
43.下面程序段执行后的输出结果是____________
int a=0,b=0,c=0;
if(++a>0 || ++b>0) ++c;
printf("%d,%d,%d",a,b,c);
A) 0,0,0B) l,l,1C) 1,0,1 D) 0,l,1
11.设int x=-1;执行表达式++x||++x||++x后x的值是_________________。
A) 3B)2C)1D)0
12.设int x=1,y=1;表达式(!x||y--)的值是_____________。
A)-l B)0C) l D) 2
13.设x,y,t均为int型变量,则执行语句:x=y=3; t=++x||++y;后y的值为_________。
A) (x>=1)||(x<=0) B)(x>=1) | (x<=0)
C)(x>=1) && (x<=0)D)(x>=1) & (x<=0)
36.若x和y为整型数,以下表达式中不能正确表示数学关系|x-y|<10的是___________
A) abs(x-y)<l 0B) x-y>-10&&x-y<10
A) 110B)111 C)120 D) 121
27.设int m1=5,m2=3;表达式m1>m2?(m1=1)m2=-1)运算后,m1和m2的值分别是________。
A) 1和3B) 1和-1C) 5和-1D) 5和3
28.若整型变量a,b,c,d的值依次为1,2,3,4,则表达式a<b?a:c<d?c:d的值是________。
41.对于下面程序段,__________是正确的判断,