《C语言程序设计教程》课件-第4章.ppt

上传人:小飞机 文档编号:5896116 上传时间:2023-08-31 格式:PPT 页数:32 大小:346.11KB
返回 下载 相关 举报
《C语言程序设计教程》课件-第4章.ppt_第1页
第1页 / 共32页
《C语言程序设计教程》课件-第4章.ppt_第2页
第2页 / 共32页
《C语言程序设计教程》课件-第4章.ppt_第3页
第3页 / 共32页
《C语言程序设计教程》课件-第4章.ppt_第4页
第4页 / 共32页
《C语言程序设计教程》课件-第4章.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《《C语言程序设计教程》课件-第4章.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计教程》课件-第4章.ppt(32页珍藏版)》请在三一办公上搜索。

1、第4章 选择结构程序设计,北京科技大学 计算机系,C 语言程序设计,2,本章主要内容,4.1 if语句4.1.1 if语句的一般形式4.1.2 if语句的嵌套4.2 switch语句4.2.1 switch语句的一般形式4.2.2 break语句4.3 选择结构程序设计举例,3,简单分支语句,语句一般格式 if(表达式)语句,功能:计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。,4,简单分支语句的算法:,例如:if(x0)m+;if(ab)c=a;a=b;b=c;,5,双重分支语句,语句一般格式if(表达式)语句1 else 语句

2、2 功能:计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。,6,双重分支语句的算法:,例如:if(x0)m+;else m-;if(ch=a,7,多重分支语句,语句一般格式if(表达式1)语句1 else if(表达式2)语句2 else if(表达式m)语句m else 语句 n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完那个语句分支,都转到后续语句,8,多重分支语句的算法,流程图,表达式m?,9,多重分支语句的算法,N-S结构图,例如:if(a

3、0)x=-1;else if(a=0)x=0;else x=1;,10,if语句的简单应用,【例4.1】输入一个字符,如果是大写字母,则将其转换为小写字母输出,否则直接输出。,输入:用 getchar 或 scnaf 函数ch是否为大写字母:ch=A&ch=65&ch=90)大写字母转换为小写字母:ch=ch+32输出:用 putchar 或 printf 函数,思路:,11,程序:,#include stdio.hmain()char ch;ch=getchar();if(ch=A,程序运行情况如下:Gg,运行jc4_1,可使用条件表达式代替,putchar(ch=A putchar(n),

4、12,4.1.2 if语句的嵌套,如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。,【例4.a】比较两个整数的关系。#include main()int x,y;printf(Enter integer X and Y:);scanf(%d%d,应该正确判断:if的内嵌语句if和else的配对,运行jc4_a,提倡缩格书写有利于阅读程序,13,if语句嵌套的形式,简单if语句的嵌套形式 if(表达式)if 语句双重(或多重)分支if语句的嵌套形式 if(表达式)if 语句 else if 语句,可以是各种形式的if语句,可以是各种形式的if语句,如果是简单if语句,必须用“”括

5、起,14,例如:,if(c=50)printf(50=50)printf(50150n);if(c=50)printf(50=c=100n);else printf(c50n),与哪个if 配对?,15,再例如:,if(ab)if(ac)if(ad)m=1;else m=2;else m=3;,问题:哪一个 else 和哪一个 if 相匹配?,规则:在嵌套的ifelse语句中,else总是与上面的离它最近的尚未配对的if 配对。,16,举例,【例4.4】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。,17,程序:,main()int x;scanf(%d,运行jc4

6、_4,18,学习if语句的难点,if else 语句的配对正确用表达式描述条件例如:当x大于5小于10时令x自增 if(5x10)x+;,正确判断内嵌语句例如:if(xy)x=x+3;y=y-2;else x=x-3;y=y+2;,if(x5,19,熟悉常用的if 表达式形式,例如有定义:int a,b=0;a等于什么值时,执行b=2;语句?if(a=0)b=2;if(a=1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;,等价于,等价于,20,4.2 switch语句,switch语句的一般形式 switch(表达式)cas

7、e 常量表达式1:语句序列1 case 常量表达式2:语句序列2 case 常量表达式n:语句序列n default:语句序列n+1 功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、n+1若与所有常量表达式值都不相等,执行语句序列n+1。,21,switch语句的算法描述,N-S结构图,例如:switch(a)case 5:printf(,当a等于5,输出:&#$当a等于2,输出:#$当a是其他值,输出:$,22,说明:,“case 常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。语句位置影响运行结

8、果,例如:switch(a)case 2:printf(#);default:printf($);case 5:printf(,switch与break语句结合才能实现程序的分支,break;break;break;,23,switch语句的简单应用,【例4.3】已知x=100,y=15,要求输入一个算术运算符(+、-、*或/),并对x和y进行指定的算术运算。,思路:设x和y为float型变量并赋初值;输入的运算符op为char型变量;根据op的值(为+、-、*、/)进行x和y的相加、相减、相乘、相除运算(选择分支);还要考虑到输入字符不是+、-、*或/时的情况,24,程序:,#include

9、 stdio.hmain()float x=100,y=15,z;char op;op=getchar();switch(op)case+:z=x+y;break;case-:z=x-y;break;case*:z=x*y;break;case/:z=x/y;break;default:z=0;if(int)z!=0)printf(%f%c%f=%fn,x,op,y,z);else printf(%c is not an operatorn,op);,运行jc4_3,实型数通常不使用z=0或z!=0的比较可用if(int)z)代替,25,注意:,switch语句的书写格式:语句体本身必须用花括

10、号括起;case和default后面如果有多条语句,则可以不必使用花括号;case和常量表达式之间必须有空格;default可以写在语句体的任何位置,也可以省略不写break语句可以改变case的语句标号作用,终止后续case语句序列的执行。switch语句和break语句结合,可以实现程序的选择控制(break语句还可以在循环语句中使用)允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。,26,4.3 选择结构程序设计举例,【例4.6】求一元二次方程ax2+bx+c=0的根。,思路:一元二次方程的根取决于系数a,b,c 求根公式:,判别式d=b2-

11、4ac 当 d=0时,方程有两个相等的实根:x1=x2=-b/(2*a)当d 0时,方程有两个不相等的实根:x1=(-b+sqrt(d)/(2*a)x2=(-b-sqrt(d)/(2*a)当d 0时,方程有两个虚根:x1=jp+ipi x2=jp-ipi,实部 jp=-b/(2*a)虚部 ip=sqrt(-d)/(2*a),27,算法:,28,程序:,#include math.hmain()float a,b,c,d,x1,x2,lp,ip;scanf(%f%f%f,29,程序(续):,else if(d1e-6)/*不相等的实根*/x1=(-b+sqrt(d)/(2*a);x2=(-b-s

12、qrt(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);,运行jc4_6,30,举例(续):,【例4.b】输入年份,判别该年是否为闰年。,思路:年份year为闰年的条件为 能够被4整除,但不能被100整除的年份;能够被400整除的年份。只要满足任意一个就可以确定它是闰年。例如:1996年、2000年是闰年1998年、1900年不是闰年,设定标志变量leap,只要符合其中一个条件的就是闰年,令 leap=1;否则令 leap=0,31,算法:,year%4=0&year%100!=0,32,程序:,main()int year,leap;scanf(%d,运行jc4_b,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号