C语言程序设计选择结构程序设计.ppt_第1页
C语言程序设计选择结构程序设计.ppt_第2页
C语言程序设计选择结构程序设计.ppt_第3页
C语言程序设计选择结构程序设计.ppt_第4页
C语言程序设计选择结构程序设计.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 选择结构程序设计 C C 语言程序设计语言程序设计 北京航空航天大学北京航空航天大学 交通科学与工程学院交通科学与工程学院 徐国艳徐国艳 * 2 本章主要内容本章主要内容 4 4.1 .1 关系运算符和关系表达式关系运算符和关系表达式 4 4.2 .2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 4 4.3 .3 if if语句语句 4.1.1 4.1.1 if if语句的一般形式语句的一般形式 4.1.2 4.1.2 if if语句的嵌套语句的嵌套 4 4.4 .4 switchswitch语句语句 4.2.1 4.2.1 switchswitch语句的一般形式语句的一般形式 4.2.2 4.2.2 breakbreak语句语句 4 4.5 .5 选择结构程序设计举例选择结构程序设计举例 * 3 4.1 关系运算符和关系表达式 一、关系运算符及其优先顺序 1. 关系运算符:、=、= =、!=、 优先顺序相同 (低) 优先顺序相同 (高) 关系运算符的 优先级高于赋值运 算符,但低于算 术运算符 2. 优先顺序 例如:ca+b等价于c(a+b) ab=c等价于(ab)=c错误表达式 * 4 二二、关系表达式 用关系运算符将两个表达式连接起来的 式子称为关系表达式 关系表达式 的值是一个逻 辑值,即“真” 或“假”,用 “1”或“0” 表示 例如:当a=1,b=2,c=3时, ab值为0,若有d=ab,则d的值为0 b0) m+; if if ( ab ) c=a; a=b; b=c; 表达式非0 T F 语句 N-S结构图 语句 流程图 N Y 表达式非0? * 10 双重分支语句双重分支语句 l l 语句一般格式语句一般格式 if if (表达式表达式) 语句语句1 1 else else 语句语句2 2 功能:功能: 计算表达式的值,如果它的值是一个非计算表达式的值,如果它的值是一个非0 0值(逻辑真值(逻辑真 ),就执行内嵌语句),就执行内嵌语句1 1,之后跳过内嵌语句,之后跳过内嵌语句2 2,执行后,执行后 续语句;否则跳过内嵌语句续语句;否则跳过内嵌语句1 1,执行内嵌语句,执行内嵌语句2 2,之后,之后 执行后续语句。执行后续语句。 * 11 双重分支语句的算法:双重分支语句的算法: l l 例如:例如: if if (x0) m+; elseelse m-; if if ( ch= a max=a; else else max=b; max=b; max = (a b) ? a : b; 条件运算符 max = (a b) ? a : b; 条件表达式 条件运算符和条件表达式条件运算符和条件表达式 l l 有有一种一种if if语句,当被判别的表达式的值为语句,当被判别的表达式的值为 “ “真真” ”或或“ “假假” ” 时,都执行一个赋值语句且时,都执行一个赋值语句且 向同一个变量赋值向同一个变量赋值 l l 如:如:if (ab)if (ab) max=a; max=a; else else max=b; max=b; l l 条件表达式的一般形式为条件表达式的一般形式为 表达式表达式?表达式表达式: : 表达式表达式 条件运算符和条件表达式条件运算符和条件表达式 l l 条件运算符的执行顺序:条件运算符的执行顺序: 求解表达式求解表达式1 1; 若为非若为非0 0(真)则求解表达式(真)则求解表达式2 2,此时,此时 表达式表达式2 2的值就作为整个条件表达式的的值就作为整个条件表达式的 值值; 若表达式若表达式1 1的值为的值为0 0(假),则求解表(假),则求解表 达式达式3 3,表达式,表达式3 3的值就是整个条件表的值就是整个条件表 达式的值达式的值; 条件运算符和条件表达式条件运算符和条件表达式 l l 条件运算符优先于赋值运算符条件运算符优先于赋值运算符 l l 条件运算符的结合方向为条件运算符的结合方向为“ “自右至左自右至左” ” l l 以下为合法的使用方法:以下为合法的使用方法: ab ? (max=a):(max=b);ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);ab ? printf(“%d”,a): printf(“%d”,b); 条件运算符和条件表达式条件运算符和条件表达式 例例4.1 4.1 输入一个字符,判别它是否大写字输入一个字符,判别它是否大写字 母,如果是,将它转换成小写字母;如母,如果是,将它转换成小写字母;如 果不是,不转换。然后输出最后得到的果不是,不转换。然后输出最后得到的 字符。字符。(用条件表达式)(用条件表达式) 条件运算符和条件表达式条件运算符和条件表达式 #include #include int main()int main() char ch; char ch; scanf(“%c“, scanf(“%c“, ch=(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(“50=50) printf(“50=50) printf(“50150n“); printf(“c150n“); if (c=50) printf(“50=50) printf(“50b)if(ab) if(ac)if(ac) if(ad) m=1; if(ad) m=1; else m=2; else m=2; else m=3;else m=3; 问题:哪一个问题:哪一个 else else 和哪一个和哪一个 if if 相匹配相匹配? ? 规则:在规则:在嵌套的嵌套的if ifelseelse语句语句中,中,elseelse总是与总是与 上面的离它最近的尚未配对的上面的离它最近的尚未配对的if if 配对。配对。 * 28 举例举例 【例【例4 4.3.3】输入一个数,判断它是奇数还是】输入一个数,判断它是奇数还是 偶数,如果是奇数则进一步判断偶数,如果是奇数则进一步判断 它是否为它是否为5 5的倍数。的倍数。 定义变量x 输入x的值 x是奇数 T F 输出“odd” x是5的倍数 输出“even” T F 是5的倍数 * 29 程序:程序: #include void main( ) int x; scanf (“%d“, if if (x%2 != 0x%2 != 0) printf(“%d is an odd n“,x) ; if if (x%5=0x%5=0) printf(“%d is the times of 5 n“,x) ; elseelse printf(“%d is an even n“,x) ; 思考:如果没有,算法和输出如何?思考:如果没有,算法和输出如何? (假定输入(假定输入x x=15=15或或1111) * 30 学习学习if if语句的难点语句的难点 l l if if else else 语句的配对语句的配对 l l 正确用表达式描述条件正确用表达式描述条件 例如:当例如:当x x大于大于5 5小于小于1010时令时令x x自增自增 if ( 55 else printf (“%c is not an operatorn“,op); 实型数通常不使用 z=0或z!=0的比较 可用fabs(z)fabs(z) 代替 * 37 注意:注意: l l switchswitch语句的语句的书写格式书写格式:语句体本身必须用花括:语句体本身必须用花括 号括起;号括起; l l casecase和和defaultdefault后面如果有多条语句,可以不必后面如果有多条语句,可以不必 使用花括号;使用花括号; l l casecase和常量表达式之间必须有空格;和常量表达式之间必须有空格; l l defaultdefault可以写在语句体的任何位置,也可以省可以写在语句体的任何位置,也可以省 略不写;略不写; l l breakbreak语句语句可以改变可以改变casecase的语句标号作用,终止的语句标号作用,终止 后续后续casecase语句序列的执行。语句序列的执行。 switchswitch语句和语句和breakbreak 语句结合,可以实现程序的选择控制语句结合,可以实现程序的选择控制(breakbreak语语 句还可以在循环语句中使用句还可以在循环语句中使用);); l l 允许允许switchswitch嵌套使用嵌套使用,但同一个,但同一个switchswitch语句中,语句中, 任意两个任意两个casecase的常量表达式值不能相同。的常量表达式值不能相同。 * 38 4 4.4 .4 选择结构程序设计举例选择结构程序设计举例 【例【例4 4.5.5】求一元二次方程】求一元二次方程axax 2 2 +bx+c=0+bx+c=0的根。的根。 思路:思路:一元二次方程的根取决于系数一元二次方程的根取决于系数a,b,ca,b,c 求根公式:求根公式: 判别式判别式d = bd = b 2 2 - 4ac- 4ac 当当 d = 0d = 0时,方程有两个相等的时,方程有两个相等的实根实根: x1=x2=x1=x2=- -b/(2*a) b/(2*a) 当当d 0d 0时,方程有时,方程有两个不相等的实根两个不相等的实根: x1=(x1=(- -b+sqrt(d)/(2*a) b+sqrt(d)/(2*a) x2=(x2=(- -b-sqrt(d)/(2*a) b-sqrt(d)/(2*a) 当当d 0 d 0 计算重根计算重根 T FT F 输出重根输出重根 计算实根计算实根 计算虚根计算虚根 输出实根输出实根 输出虚根输出虚根 * 40 程序:程序: #include “stdio.h“ #include “math.h“ void main( ) float a,b,c,d,x1,x2,lp,ip; 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 /* /* 虚根虚根 */ */ 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); * 42 举例(续):举例(续): 【例【例4 4. .6 6】输入年份,判别该年是否为闰年。输入年份,判别该年是否为闰年。 思路:思路:年份年份yearyear为闰年的条件为:为闰年的条件为: 能够被能够被4 4整除,但不能被整除,但不能被100100整除的年份;整除的年份; 能够被能够被400400整除的年份。整除的年份。 只要满足任意一个就可以确定它是闰年。只要满足任意一个就可以确定它是闰年。 例如:例如: 19961996年、年、20002000年是闰年年是闰年 19981998年、年、19001900年不是闰年年不是闰年 设定标志变量leapleap,只要符合其中一个条件的就 是闰年,令 leap =1leap =1;否则令 leap=0leap=0 * 43 算法:算法: 定义变量year、leap 输入年份year 能被能被4 4整除且整除且 不能被不能被100100整除?整除? T F 能被能被400400整除?整除? leap=1 T F leap = 1 leap = 0 leap=1? T F 是闰年 不是闰年 year%400=0year%400=0 year%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); else printf(“%d is not a leap year n“, year); 例例4.7 4.7 要求按照考试成绩的等级输出百分要求按照考试成绩的等级输出百分 制分数段,制分数段,A A等为等为8585分以上,分以上,B B等为等为7070 8484分,分,C C等为等为60606969分分 ,D D等为等为 6060分以分以 下下 。成绩的等级由键盘输入。成绩的等级由键盘输入。 l l 解题思路:解题思路: 判断出判断出这是一个多分支选择问题这是一个多分支选择问题 根据百分制分数将学生成绩分为根据百分制分数将学生成绩分为4 4个等个等 级级 如果用如果用if if语句语句,至少要用至少要用3 3层嵌套的层嵌套的if if, 进行进行3 3次检查判断次检查判断 用用switchswitch语句进行一次检查即可得到结语句进行一次检查即可得到结 果果 #include #include int main()int main() char grade; char grade; scanf(“%c“, scanf(“%c“, printf(“Your score:“); printf(“Your score:“); switch(grade) switch(grade) case A: printf(“85 case A: printf(“85100n“);break;100n“);break; case B: printf(“70 case B: printf(“7084n“);break;84n“);break; case C: printf(“60 case C: printf(“6069n“);break;69n“);break; case D: printf(“#include int main()int main() char grade; char grade; scanf(“%c“, scanf(“%c“, printf(“Your score:“); printf(“Your score:“); switch(grade) switch(grade) case A: printf(“85 case A: printf(“85100n“);break;100n“);break; case B: printf(“70 case B: printf(“7084n“);break;84n“);break; case C: printf(“60 case C: printf(“6069n“);break;69n“);break; case D: printf(“#include int main()int main() char grade; char grade; scanf(“%c“, scanf(“%c“, printf(“Your score:“); printf(“Your score:“); switch(grade) switch(grade) case A: printf(“85 case A: printf(“85100n“);break;100n“);break; case B: printf(“70 case B: printf(“7084n“);break;84n“);break; case C: printf(“60 case C: printf(“6069n“);break;69n“);break; case D: printf(“#include int main()int main() char grade; char grade; scanf(“%c“, scanf(“%c“, printf(“Your score:“); printf(“Your score:“); switch(grade) switch(grade) case A: printf(“85 case A: printf(“85100n“);break;100n“);break; case B: printf(“70 case B: printf(“7084n“);break;84n“);break; case C: printf(“60 case C: printf(“6069n“);break;69n“);break; case D: printf(“60n“);break; case D: printf(“60n“);break; default: printf(“enter data error!n“); default: printf(“enter data error!n“); return 0; return 0; 值为F l l switchswitch语句的作用是根据表达式的值,使语句的作用是根据表达式的值,使 流程跳转到不同的语句流程跳转到不同的语句 l l switchswitch语句的一般形式语句的一般形式: switchswitch(表达式)(表达式) case case 常量常量1 1 :语句:语句1 1 case case 常量常量2 2 :语句:语句2 2 case case 常量常量n n :语句:语句n n default : default : 语句语句n+1n+1 整数类型(包括字符型) l l switchswitch语句的作用是根据表达式的值,使语句的作用是根据表达式的值,使 流程跳转到不同的语句流程跳转到不同的语句 l l switchswitch语句的一般形式语句的一般形式: switchswitch(表达式)(表达式) case case 常量常量1 1 :语句:语句1 1 case case 常量常量2 2 :语句:语句2 2 case case 常量常量n n :语句:语句n n default : default : 语句语句n+1n+1 不能相同 scanf(“%c“, scanf(“%c“, printf(“Your score:“); printf(“Your score:“); switch(grade) switch(grade) case A: printf(“85 case A: printf(“85100n“);break;100n“);break; case B: printf(“70 case B: printf(“7084n“);break;84n“);break; case C: printf(“60 case C: printf(“6069n“);break;69n“);break; case D: printf(“60n“);break; case D: p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论