《--选择结构程序设计》由会员分享,可在线阅读,更多相关《--选择结构程序设计(36页珍藏版)》请在金锄头文库上搜索。
1、第3章 选择结构程序设计西南林学院计科系 鲁莹C C语言程序设计语言程序设计本章主要内容3.1 if语句 3.2 条件运算符和表达式 3.3 switch语句 3.4 选择结构应用实例3.1 if语句 3.1.1 if语句的三种形式 3.1.2 if语句的嵌套3.1 if语句的三种形式 if语句一般格式(单分支)if (表达式) 语句l l功能:功能: 计算表达式的值,如果是一个非计算表达式的值,如果是一个非0 0值(即值(即 逻辑真),就执行内嵌语句,否则(即逻逻辑真),就执行内嵌语句,否则(即逻 辑假)跳过内嵌语句,顺序执行后续语句辑假)跳过内嵌语句,顺序执行后续语句 。 内嵌语句,可为:
2、 赋值语句 函数调用语句 控制语句 复合语句 空语句可为算术、关系、逻辑、赋值 等表达式简单分支语句的算法: 例如: if (x0) m+; if ( ab ) c=a; a=b; b=c; 语句流程图假真表达式 表达式非0T F语句N-S结构图双重分支语句 语句一般格式if (表达式) 语句1 else 语句2 功能: 计算表达式的值,如果它的值是一个非0值(逻辑 真),就执行内嵌语句1,之后跳过内嵌语句2,执 行后续语句;否则跳过内嵌语句1,执行内嵌语句2 ,之后执行后续语句。 注意:表达式的一般为关系表达式或逻辑表达式, 也可以为其他任意形式的表达式。 双重分支语句的算法: 例如: if
3、 (x0) m+; else m-; if ( ch= a printf (“Enter integer X and Y:“);scanf (“%d%d“, if ( x != y )if ( x y ) printf (“XYn“);else printf (“X=50) printf(“50=50) printf(“50150n“); if (c=50) printf(“50b) if(ac) if(ad) m=1; else m=2; else m=3;问题:哪一个问题:哪一个 else else 和哪一个和哪一个 if if 相匹配相匹配? ?规则:在规则:在嵌套的嵌套的if ifel
4、seelse语句语句中,中,elseelse总是与总是与 上面的离它最近的尚未配对的上面的离它最近的尚未配对的if if 配对配对 。举例 【例3.3】输入一个数,判断它是奇数还是偶 数,如果是奇数则进一步判断它是 否为5的倍数。 定义变量x 输入x的值x是奇数T F输出“odd”x是5的倍数 输出“even”T F 是5的倍数程序:main( ) int x;scanf (“%d“,if (x%2 != 0) printf(“%d is an odd n“,x) ;if (x%5=0)printf(“%d is the times of 5 n“,x) ; else printf(“%d i
5、s an even n“,x) ; 思考:如果没有,算法和输出如何?思考:如果没有,算法和输出如何?学习if语句的难点 if else 语句的配对 正确用表达式描述条件 例如:当x大于5小于10时令x自增if ( 55 scanf(“%f%f%f“,printf(“the equation “);if (fabs(a)1e-6) /* 不相等的实根 */ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a);printf(“has two real roots:n“) ;printf(“x1=%8.4f, x2=%8.4fn“,x1,x2);else /* 虚根
6、 */ lp=-b/(2*a);ip=sqrt(-d)/(2*a);printf(“has two complex roots: n“);printf(“x1=%8.4f+%8.4fin“,lp,ip);printf(“x2=%8.4f-%8.4fin“,lp,ip);举例(续):【例3.6】输入年份,判别该年是否为闰年。 思路:思路:年份年份yearyear为闰年的条件为为闰年的条件为 能够被能够被4 4整除,但不能被整除,但不能被100100整除的年份;整除的年份; 能够被能够被400400整除的年份。整除的年份。只要满足任意一个就可以确定它是闰年。只要满足任意一个就可以确定它是闰年。 例
7、如:例如: 19961996年、年、20002000年是闰年年是闰年 19981998年、年、19001900年不是闰年年不是闰年 设定标志变量leapleap,只要符合其中一个条件的就 是闰年,令 leap =1leap =1;否则令 leap=0leap=0 算法:定义变量year、leap输入年份year能被能被4 4整除且整除且不能被不能被100100整除?整除?T F 能被能被400400整除?整除?leap=1 T F leap = 1 leap = 0leap=1?T F是闰年 不是闰年year%400=0year%400=0year%4=0 scanf(“%d“, if (year%4=0 else if (year%400=0)leap=1;else leap=0;if (leap = 1) printf(“%d is a leap year n“, year);elseprintf(“%d is not a leap year n“, year);