c语言第四章流程控制选择结构.ppt

上传人:牧羊曲112 文档编号:6504299 上传时间:2023-11-07 格式:PPT 页数:50 大小:277.50KB
返回 下载 相关 举报
c语言第四章流程控制选择结构.ppt_第1页
第1页 / 共50页
c语言第四章流程控制选择结构.ppt_第2页
第2页 / 共50页
c语言第四章流程控制选择结构.ppt_第3页
第3页 / 共50页
c语言第四章流程控制选择结构.ppt_第4页
第4页 / 共50页
c语言第四章流程控制选择结构.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《c语言第四章流程控制选择结构.ppt》由会员分享,可在线阅读,更多相关《c语言第四章流程控制选择结构.ppt(50页珍藏版)》请在三一办公上搜索。

1、第四章 C语言流程控制,复合语句选择结构循环结构,什么是分支结构?它的作用是什么?switch 语句中的 break 起什么作用?什么是循环?为什么要使用循环?如何实现循环?实现循环时,如何确定循环条件和循环体?如何实现多重循环?,本章要点,4.1 复合语句,复合语句是用“”括起来的一组语句,例如:t=a;a=b;b=t;复合语句的一般形式为:说明部分;语句部分;,4.2 选择结构,例4-1 输入两个整数,输出其中最大值,解题思路(1)定义a,b,max;(2)读入a,b(3)如果ab 把a赋给max 否则,把a赋给max(4)输出max的值,#includeint main()int a,b

2、,max;scanf(%d%d,4.2.1 if-else语句,if(表达式)语句1else 语句2,if(ab)max=a;else max=b;,语句1和语句2可以是单个语句,也可以是用括起来的复合语句,4.2 选择结构,例4-2 分段计算水费要解决的问题:输入计算分段函数输出,并保留2位小数,程序解析求分段函数,#include int main(void)double x,y;printf(Enter x(x=0):n);/*输入提示*/scanf(%lf,Enter x(x=0):9.5f(9.500000)=12.67,Enter x(x=0):15f(15.000000)=20.

3、00,Enter x(x=0):21.3f(21.300000)=42.75,小练习,输入一个整数,判断该数是奇数还是偶数,若为奇数输出”奇数”,若为偶数,输出”偶数”,条件运算符(第2章的内容),在if语句中,在“表达式”为“真”和“假”时,都只执行一个赋值语句给同一变量赋值,例 if(ab)max=a;else max=b;可以用如下条件运算符来处理:max=(ab)?a:b,其中,“(ab)?a:b”是一个条件表达式,若条件(ab)成立,则条件表达式取值a;否则,取值b。,条件表达式的一般形式:,表达式1?表达式2:表达式3,条件表达式的求解过程先求解表达式1的值若表达式1的值为真(非0

4、);则求解表达式2的值,将其作为条件表达式的值。表达式3不计算。若表达式1的值为假(0);则求解表达式3的值,将其作为条件表达式的值。表达式2不计算。,条件表达式不能取代一般的if 语句,只有在if 语句中内嵌语句是赋值语句时,且两个分支都对同一个变量赋值时,才能代替if 语句。如:if(ab)max=a;else max=b;此时可用 max=ab?a:b;代替前面的if 语句。其它情况的if 语句不能用条件表达式代替。,4.2.2 if 语句,if(表达式)语句1,如果表达式成立执行语句1,否则什么也不做,例4.3 输入一个字符,若是小写字母则变为大写字母输出,否则原样输出,#includ

5、eint main()char ch;ch=getchar();if(ch=a,如果是小写则变为大写,否则什么也不用做,ch减去32再赋给ch,这是允许的,还可以写成:ch-=32,复合赋值语句(P29),C语言允许一个变量参与运算后,再把运算结果赋给自身,如:i=i+1;ch=ch-32;y=y*10;a=a/2,要求能看懂,你不喜欢可以不这样写,例4.4 两个整数排序,编程:输入2个整数a,b,要求把小数存入a中,把大数存入b中,然后顺序输出这两个数。,解题思路:(1)从键盘读入两个整数存入a,b(2)如果ab,则互换a和b的内容,难点:如何交换两个数的内容?,想想:你有一瓶酱油和一瓶醋,

6、现在,你想让装酱油的瓶子装醋,装醋的瓶子装酱油,如何实现?,找一个空瓶子来周转!,(1)把a中的酱油倒入空瓶t中,酱油,(2)把b中的醋倒入a中,醋,(3)把暂存在t中的醋倒入b中,酱油,用C语言表达,#includeint main()int a,b,t;scanf(%d%d,输入:3 5输出:3 5,输入:5 3输出:3 5,注意:if条件下要执行的内容多于一个语句,一定要用花括弧括成一个复合语句,#includeint main()int a,b,t;scanf(%d%d,输入:3 5输出:5-858993460,输入:5 3输出:3 5,为什么出现这样的结果?到VC下面单步执行一下看看

7、!,你会发现:a=b;b=t;这两句不受if限制,当if不成立时也执行了,小练习:,编程:输入3个整数a,b,c,要求把最小数存入a中,把最大数存入c中,然后顺序输出这三个数。,解题思路:(1)如果ab,则互换a和b的内容(2)如果bc,则互换b和c的内容(3)如果ab,则互换a和b的内容,4.2.3 多分支if语句,例4-5:编程,判断字符类型。输入一个字符,若该字符是字母,则输出“字母”;若该字符是数字,则输出“数字”;若该字符是空格或回车,则输出“分隔符”;若以上都不是,则输出“其他”,#includeint main()char ch;ch=getchar();if(ch=a,程序解析

8、,多分支 if 语句,if(表达式1)语句1 else if(表达式2)语句2 else if(表达式m)语句m else 语句 n,if(ch=a,2023/11/7,23,多分支If语句流程图,表达式m?,(1)依次计算并判断表达式i,若成立则执行后面的语句(2)若都不成立,执行语句n(3)无论执行完那个语句分支,都不会再执行其他分支,例4-6 将百分制成绩转化为五级制成绩,即90分以上为A,8089为B,7079为C,6069为D,60分以下为E。,解题思路:(1)定义score为int型;定义grade为char型(2)读入成绩score;(3)如果score=90,则把A赋给grad

9、e否则如果score=80,则把B赋给grade否则如果score=70,则把C赋给grade否则如果score=60,则把D赋给grade否则,把E赋给grade(4)输出grade的值;,程序解析,#includeint main()int score;char grade;scanf(%d,#includeint main()int score;scanf(%d,先求出等级赋给字符变量grade,再输出grade的值,直接输出等级,小练习,分段计算水费,输入x表示用水量,输出水费y,参考程序-分段计算水费,#include int main(void)double x,y;printf(

10、Enter x:);scanf(%lf,Enter x:-0.5f(-0.50)=0.00,Enter x:9.5f(9.50)=12.67,Enter x:21.3f(21.30)=42.75,嵌套的 if else 语句,if(表达式1)if(表达式2)语句1else 语句2 elseif(表达式3)语句3 else 语句4,例4-7:分段计算水费用嵌套的if语句,分段计算水费,输入x表示用水量,输出水费y,解题思路1:如果x0 如果x=15,y=4x/3;否则,否则 y=0;,if(x0)if(x=15)y=4*x/3;else y=2.5*x-10.5else y=0;,参考程序-分段

11、计算水费,#include int main(void)double x,y;printf(Enter x:);scanf(%lf,if(条件1)if(条件2)语句1else/*这个 else 部分属于哪个 if?*/if(条件3)语句2;else 语句3;,else 和 if 的匹配,C语言规定,每个 else 部分总属于前面最近的那个缺少对应的else 部分的 if 语句。提倡使用大括号括起来以避免看起来有二义性。,?,if(条件1)if(条件2)语句1else/*这个 else 部分属于哪个 if?*/if(条件3)语句2 else 语句3,课下作业,1、输入三个整数,排序输出2、求一元

12、二次方程的根(实根或虚根),对各种可能输入都要有相应输出3、用多分支if语句和嵌套的if语句实现百分制转换成五级制;4、用多分支if语句和嵌套的if语句实现分段函数的计算,2023/11/7,33,【例4.7】从终端输入两个实数,和一个四则运算符(、),执行相应的运算并输出运算结果,若运算符不是以上四种符号,则显示“输入错误”,4.2.5 switch 语句,思路分析,(1)读入两个实数x,y和一个运算符op;(2)根据op的值若为+,则输出x+y的值若为-,则输出x-y的值若为*,则输出x*y的值若为/,则输出x/y的值若为其他,显示“输入错误”,可以用多分支if语句实现,下面我们学习用sw

13、itch语句实现,2023/11/7,35,#include int main()char op;double x,y;printf(Input x y op:);scanf(%lf%lf%c,如果除数为0?,2023/11/7,36,switch语句的一般形式 switch(表达式)case 常量表达式1:语句序列1 case 常量表达式2:语句序列2 case 常量表达式n:语句序列n default:语句序列n+1 功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、n+1若与所有常量表达式值都不相等,执行语句序列n+1。,switch语句处理多分支选

14、择问题3种情况,1、在switch语句的每个语句段中都使用break语句switch(表达式)case 常量表达式1:语句段1;break;case 常量表达式2:语句段2;break;.case 常量表达式n:语句段n;break;default:语句段n+1;break;,switch(表达式)case 常量表达式1:语句段1;break;case 常量表达式2:语句段2;break;.case 常量表达式n:语句段n;break;default:语句段n+1;break;,用else-if 如何实现?,完全可以,switch(op)case+:printf(=%.2fn,x+y);bre

15、ak;case-:printf(=%.2fn,x-y);break;case*:printf(=%.2fn,x*y);break;case/:printf(=%.2fn,x/y);break;default:printf(运算符错误n);break;,完全可以用多分支语句else-if来实现!,2、在switch中不使用break,switch(表达式)case 常量表达式1:语句段1;case 常量表达式2:语句段2;.case 常量表达式n:语句段n;default:语句段n+1;,switch(表达式)case 常量表达式1:语句段1;case 常量表达式2:语句段2;.case 常量表

16、达式n:语句段n;default:语句段n+1;,switch(op)case+:printf(=%.2fn,x+y);case-:printf(=%.2fn,x-y);case*:printf(=%.2fn,x*y);case/:printf(=%.2fn,x/y);default:printf(运算符错误n);,去掉了break若输入2 3+,输出结果是什么?若输入2 3*,输出结果是什么?到VC中试试,case只是起到语句标号的作用,匹配之后就等于找到一个入口,进入后顺序往下执行,不再判断,遇到break才会跳出结构,例4.8 输入一个整数n(n100000),请输出n的位数并逆序输出n

17、的每一位数字,如 输入:12567 输出:n为5位数 76521,#include#includeint main()int n,ws;scanf(%d,通过单步执行让同学们理解:case只是起到语句标号的作用,匹配之后就等于找到一个入口,进入后顺序往下执行,不再判断,遇到break会跳出结构,利用switch这一特点达到这样一个效果:若n是5位数从第1行进入,执行5次;若n是4位数从第2行进入,执行4次;.若n是1位数从第5行进入,执行1次;,3、在switch的某些语句段中使用break,例4-9 用switch语句实现将百分制成绩转换为5级制成绩,#include#includeint

18、main()int score,g;scanf(%d,case 5:case 4:case 3:case 2:case 1:case 0:putchar(E);break;default:printf(“输入错误n”);,case只是起到语句标号的作用,匹配之后就等于找到一个入口,会顺序往下执行,直到遇到break,2023/11/7,47,四则运算(书本例4.5讲解),为了降低学习的难度,我们在学会了switch语句之后,在来学习书本例4.5,这里有一个很重要的编程技巧:使用一个变量做标志,(书本58页例4.5)四则运算:从终端输入两个实数,和一个四则运算符(、),执行相应的运算并输出运算结

19、果,若运算符不是以上四种符号,或进行除法运算时除数为0,则显示“输入错误”,思路分析,(1)读入两个实数x,y和一个运算符op;(2)将一个变量flag置为1(3)根据op的值若为+,则将x+y的值赋给result若为-,则将x-y的值赋给result若为*,则将x*y的值赋给result若为/,若y为0,则无法计算,变量flag置0 否则,将x/y的值赋给result若为其他,则无法计算,变量flag置0(4)若flag为1,则计算成功,输出result的值 否则计算失败,输出“输入错误”,2023/11/7,49,#include int main()char op;double x,y,

20、result;int flag;printf(Input x y op:);scanf(%lf%lf%c,case/:if(y)/if(y!=0)result=x/y;else flag=0;break;default:flag=0;if(flag)/或if(flag=1)printf(result=%fn,result);else printf(运算符错误n);,先将flag置1,当出现运算符或操作数错误时将flag置0;最后根据flag的值输出相应的信息,作业,1、把百分制转化为等级制2、四则运算3、将一个整数(n100000)的各位数字逆序输出,每个数字后空一个空格4、将一个整数(n100000)的各位数字逐个输出(按原来顺序,每个数字后空一个空格5、输入一个月份,输出该月的天数,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号