c语言第四章流程控制选择结构.ppt_第1页
c语言第四章流程控制选择结构.ppt_第2页
c语言第四章流程控制选择结构.ppt_第3页
c语言第四章流程控制选择结构.ppt_第4页
c语言第四章流程控制选择结构.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第四章 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的值,#include int main() int a,b,max; scanf(“%d%d“, ,4.2.1 if - else语句,if (表达式) 语句1 else 语句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.5 f(9.500000)=12.67,Enter x (x=0): 15 f(15.000000)=20.00,Enter x (x=0): 21.3 f(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);则求解表达式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 输入一个字符,若是小写字母则变为大写字母输出,否则原样输出,#include int 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的内容,难点:如何交换两个数的内容?,想想:你有一瓶酱油和一瓶醋,现在,你想让装酱油的瓶子装醋,装醋的瓶子装酱油, 如何实现?,找一个空瓶子来周转!,(1)把a中的酱油倒入空瓶t中,酱油,(2)把b中的醋倒入a中,醋,(3)把暂存在t中的醋倒入b中,酱油,用C语言表达,#include int main() int a,b,t; scanf(“%d%d“, ,输入:3 5 输出:3 5,输入:5 3 输出:3 5,注意:if条件下要执行的内容多于一个语句,一定要用花括弧括成一个复合语句,#include int main() int a,b,t; scanf(“%d%d“, ,输入:3 5 输出:5 -858993460,输入:5 3 输出:3 5,为什么出现这样的结果? 到VC下面单步执行一下看看!,你会发现: 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:编程,判断字符类型。 输入一个字符, 若该字符是字母,则输出“字母”; 若该字符是数字,则输出“数字”; 若该字符是空格或回车,则输出“分隔符”; 若以上都不是,则输出“其他”,#include int main() char ch; ch=getchar(); if(ch=a ,程序解析,多分支 if 语句,if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式m) 语句m else 语句 n,if(ch=a ,2019/9/11,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赋给grade 否则如果score=80,则把B赋给grade 否则如果score=70,则把C赋给grade 否则如果score=60,则把D赋给grade 否则,把E赋给grade (4)输出grade的值;,程序解析,#include int main() int score; char grade; scanf(“%d“, ,#include int main() int score; scanf(“%d“, ,先求出等级赋给字符变量grade,再输出grade的值,直接输出等级,小练习,分段计算水费,输入x表示用水量,输出水费y,参考程序-分段计算水费,# include int main(void) double x, y; printf(“Enter x:“); scanf(“%lf“, ,Enter x: -0.5 f(-0.50) = 0.00,Enter x: 9.5 f(9.50) = 12.67,Enter x: 21.3 f(21.30) = 42.75,4.2.4嵌套的 if else 语句,if(表达式1) if(表达式2) 语句1 else 语句2 else if(表达式3) 语句3 else 语句4,例4-7:分段计算水费用嵌套的if语句,分段计算水费,输入x表示用水量,输出水费y,解题思路1: 如果x0 如果x=15, y=4x/3; 否则, y=2.5x-10.5 否则 y=0;,if(x0) if(x=15)y=4*x/3; else y=2.5*x-10.5 else y=0;,参考程序-分段计算水费,# include int main(void) double x, y; printf(“Enter x:“); scanf(“%lf“, ,if (条件1 ) if (条件2 ) 语句1 else /*这个 else 部分属于哪个 if?*/ if(条件3)语句2; else 语句3;,else 和 if 的匹配,C语言规定,每个 else 部分总属于前面最近的那个缺少对应的else 部分的 if 语句。 提倡使用大括号括起来以避免看起来有二义性。,?,if (条件1 ) if (条件2 ) 语句1 else /*这个 else 部分属于哪个 if?*/ if(条件3)语句2 else 语句3,课下作业,1、输入三个整数,排序输出 2、求一元二次方程的根(实根或虚根),对各种可能输入都要有相应输出 3、用多分支if语句和嵌套的if语句实现百分制转换成五级制; 4、用多分支if语句和嵌套的if语句实现分段函数的计算,2019/9/11,33,【例4.7】从终端输入两个实数,和一个四则运算符(、),执行相应的运算并输出运算结果,若运算符不是以上四种符号,则显示“输入错误”,4.2.5 switch 语句,思路分析,(1)读入两个实数x,y和一个运算符op; (2)根据op的值 若为+,则输出x+y的值 若为-,则输出x-y的值 若为*,则输出x*y的值 若为/,则输出x/y的值 若为其他,显示“输入错误”,可以用多分支if语句实现,下面我们学习用switch语句实现,2019/9/11,35,# include int main() char op; double x, y; printf(“Input x y op: “); scanf(“%lf%lf%c“, ,如果除数为0?,2019/9/11,36,switch语句的一般形式 switch (表达式) case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 case 常量表达式n: 语句序列n default : 语句序列n+1 功能: 计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、 、 n+1 若与所有常量表达式值都不相等,执行语句序列n+1。,switch语句处理多分支选择问题 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); break; 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 常量表达式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的每一位数字,如 输入: 12567 输出: n为5位数 76521,#include #include int 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 #include int 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,2019/9/11,47,四则运算 (书本例4.5讲解),为了降低学习的难度,我们在学会了switch语句之后,在来学习书本例4.5,这里有一个很重要的编程技巧:使用一个变量做标志,(书本58页例4.5)四则运算:从终端输入两个实数,和一个四则运算符(、),执行相应的运算并输出运算结果,若运算符不是以上四种符号,或进行除法运算时除数为0,则显示“输入错误”,思路

温馨提示

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

评论

0/150

提交评论