当前位置:文档之家› 07 《C语言程序设计》教案 第三章 程序的控制结构(3)—选择结构 if

07 《C语言程序设计》教案 第三章 程序的控制结构(3)—选择结构 if


首先先判断表达式的值 若为非 0 则执行下面的语句 若为 0 则跳过该语句
1)单分支选择语句 一般形式:i f (表达式)
语句
表达式
假(0)
真(非0) 语句
例:main() { float x , y; scanf(“%f ”, &x); y=2*x; if ( x < 0 ) printf(“y= %6.2f”, y ); } 如果 x<0 为真,则打印 y 的值,否则跳过 printf(“y= %6.2f”, y )直接执行下面的语句。 练习:运行下面程序时,若从键盘输入“3,4<CR>”,则程序的输出结果是[ ] main() { int a,b,s; scanf(“%d,%d”,&a,&b); s=a; if(s<b) s=b; s=s*s; printf(“%d\n”,s); } A、14 B、16 C、18 D、20 2)双分支选择语句 if (表达式) 语句 1 else 语句 2 例: 输入两个数, 比较其大小, 将较大的数输出 流程分析: • (1) 输入两个数据 a,b ; • (2) 如果 a>b 则输出 a ;否则,输出 b。 #include <stdio.h> main( ) { float a, b; scanf(“%f, %f”,&a, &b);
注意:C 语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值, 还可以参与其它种类的运算,例如算术运算、逻辑运算等。 3)关系运算符的结合律 C 语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时, 则按从左到右结合方向处理。 例如: int a=2,b=3,c=1; a>b<c 值 :1 先计算 a>b,值是 0 , 再计算 0<c,值是 1 6>3<2 值 :1 先计算 6>3 ,值是 1 , 再计算 1<2,值为 1 2、逻辑运算符和逻辑表达式 (1)逻辑运算符 C 语言提供 3 种逻辑运算符: && 逻辑与(相当于“同时”) || 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”) 其中,&&和||为双目运算符,且结合方向为自左至右;! 为单目运算符,仅对其右边的 操作数进行逻辑求反运算。 1)逻辑非 ! 逻辑非是一元运算符。 操作数值为 0,逻辑非运算的结果为 1(逻辑真); 当操作数值为非 0 时,逻辑非运算的结果为 0。 例如: int a=5,b=3; !a 结果:0 !(a < b) 结果:1。因为 a < b 的值为 0 2)逻辑与 && 逻辑与是二元运算,只有参加逻辑与运算的两个操作数值均为非 0(逻辑真)时,结果才 为真。例如: int a = 5,b = 3; a && b 值: 1 (a < b) && (a > 0) 值:0,因为 a<b 的值为 0。 3)逻辑或 ¦¦ 逻辑或也是二元运算,只要两个操作数中有一个为非 0(逻辑真),结果就为 1。 例如: int a=5,b=3 a ¦¦ b 值:1 (a < b) ¦¦ (a > 0) 值:1 因为 a > 0 的值为 1。 (2) 逻辑运算符优先级
printf( “You are right ! “ ); } 练习: 以下不正确的语句为[ ] A、if(x>y) ; B、if(x>y) { x++; y++; } C、if(x=y)&&(x!=0)x+=y; D、if(x!=y) scanf(“%d”,&x); else scanf(“%d”,&y); 运行下面程序时,若从键盘输入字母“b”,则输入结果是[ ] main( ) { char c; c=getchar(); if (c>=„a‟&&c<=„u‟) c=c+4; else if (c>=„v‟&&c<=„z‟) c=c-21; else printf(“input error!\n”); putchar(c); } A) g B)w C)f D) d 5)if 语句的嵌套 一个 if 又包含一个或多个 if 语句,称为 if 语句的嵌套。在 if 语句中可以根据需要,用 if 语句的三种形式进行互相嵌套。一般形式如下: ① if( )内嵌 if if( ) 〈语句 1〉 else 〈语句 2〉 else if( ) 〈语句 3〉 else 〈语句 4〉 ② if( ) if( ) 〈语句 1〉 else if( ) 〈语句 2〉 else 〈语句 3〉 说明:①if 与 else 的配对关系,从最内层开始,else 总是与离它最近的未曾配对的 if 配对。 ②if 与 else 的个数最好相同,从内层到外层一一对应,以避免出错。 ③如果 if 与 else 的个数不相同,可以用花括号来确定配对关系。例如: if( ) {if( ) 〈语句 1〉 } else 〈语句 2〉 这时{ }限定了内嵌 if 语句的范围,因此 else 与第一个 if 配对。
if (a>b) else
printf (“%f”, a ); printf (“%f”, b );
} 练习:下面程序的输出结果是[ ] main() { int x=2,y=-1,z=2; if(y<0) z=0 else z+=1; printf(“%d\n”,z); } 3)多分支选择语句 一般形式:if (表达式) 语句 1 else if (表达式)语句 2 else … 写一个程序完成下列功能: 1 输入一个分数 score 2 score<60 输出 E 3 60<=score <70 输出 D 4 75<=score <80 输出 C 5 80<=score <90 输出 B 5 90<=score 输出 A main( ) { int score; scanf(“%d”, &score); if ( score<60) printf(“%c” , ‟E‟); else if ( score <70) printf(“%c” , ‟D‟); else if (score <80) printf(“%c” , ‟C‟); else if (score <90) printf(“%c” , ‟B‟); else printf(“%c” , ‟A‟); } 说明:if 语句中的表达式一般为关系或逻辑表达式,也可以为任何数值类型的表达式。 执行语句可以是一条简单语句、空语句或复合语句,也可以嵌套其它流程控制语句。 4)复杂条件选择 问题: 输入两个字符 ch1 和 ch2, 如果 ch1==„Z‟ 且 ch2==„B‟, 则输出“You are right ! “ main() { char ch1,ch2; ch1=getchar( ); ch2=getchar( ); if ( ch1 == „Z‟ && ch2==„B‟ )
C 语言逻辑运算符的优先级规定如下: 1) 优先级顺序为 ! → && → ¦¦ 2) 与其他种类运算符的优先关系: 高 ! (非) 算术运算符 关系运算符 &&和 || 赋值运算符 低 例如:!a&& b > 5 计算顺序: (!a)&&(b > 5)a = = b ¦¦ a < c 计算顺序:a = = (b¦¦(a< c)) (3)逻辑表达式 1)逻辑表达式的概念 所谓逻辑表达式是指,用逻辑运算符将 1 个或多个表达式连接起来,进行逻辑运算的式 子。在 C 语言中,可以用逻辑表达式表示多个条件的组合。 例如: !(a > b) 对关系表达式的值取非, (a > b)&&(b > c) (a > b)&&(b > c)¦¦(b == 0) 2)逻辑量的真假判定 C语言用整数“1”表示“逻辑真”,用“0”表示“逻辑假”。但在判断一个表达式 或变量的“真”或“假”时,如果为 0,则判定为“逻辑假”;如果为非 0,则判定为“逻 辑真”。 3)逻辑运算符的结合性 C 语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时, 按从 左到右的结合方向处理。例如:a && b && c 计算顺序为:(a&& b)&& c。 3、条件语句(25 分钟) (1)if 语句的三种格式 引子:例如计算分段函数 3-x (x<0) y= 2x (x>=0) 计算 x<0 ,如果结果为 1:计算:y=3-x; 否则,计算:y=2 * x; 需要根据 x 的值进行流程选择(分支) 。
例 4.3 对下面的函数编程,要求输入一个 x 值,输出对应的 y 值 -1 (x<0) y= 0 (x=0) 1 (x>0) 方法 1:main() { int x,y; scanf(″%d″,&x); if(x<0) y=-1; else if(x= =0) y=0; else y=1; printf(″x=%d,y=%d\n″,x,y); } 方法 2:main() { int x,y; scanf(″%d″,&x); y=-1; if(x= =0) y=0; else if(x>0) y=1; printf(″x=%d,y=%d\n″,x,y); } 练习:运行下面程序,若从键盘输入“3”和“5”,则程序的输出结果是[ main() { int x,y; scanf(“%d,%d”,&x,&y); if(x==y) printf(“x==y”); else if(x>y) printf(“x>y”); else printf(“x<y”); } A)3<5 B)5>3 C)x>y D)x<y 执行下列程序的输出结果是[ ] main() { int a=258; if(a>=100) { if(a>=1000) printf(“%d is greater than 1000\n”,a); else printf(“%d is 100 to 999\n”,a); } else { if(a<10) printf(“%d is less than 10\n”,a);
相关主题