欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    关关雎鸠南邮C语言课件第4章.ppt

    • 资源ID:5608996       资源大小:1.38MB        全文页数:46页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    关关雎鸠南邮C语言课件第4章.ppt

    2023/8/1,1,高级语言程序设计,第四章 程序流程控制,主讲:计算机学院 朱立华,2023/8/1,3,内容提要,算法的基本概念以及表示方法,简单介绍流程图C程序的3种基本流程控制结构:顺序结构、选择结构(也叫分支结构)、循环结构,每种结构的控制语句:if、switch控制选择结构for、while、dowhile控制循环结构break、continue、goto等语句的用法循环嵌套程序的设计及运行过程一些常用算法的基本思想:分段函数求解问题判断一个整数是否为质数求两个正整数的最大公约数各种求和问题,掷骰子游戏的多种解法,求阶乘,打印规则的图形,穷举问题的多种求解方法,2023/8/1,4,算法与语句,算法(Algorithm)就是为解决一个具体问题而采取的有限的操作步骤,算法通过语句来实现 计算机算法分两类:数值运算算法、非数值运算算法程序=数据结构+算法算法的正确性衡量标准:有穷性:算法包含有限步操作确定性:每一步都应确定无歧义 有效性:每一步都应能有效执行且能得到确定的结果 0或多个输入:程序允许无输入 1或多个输出:任何程序都必须有输出,哪怕是提示信息,解决求数值解的问题,解决需要用分析推理、逻辑推理才能解决的问题,数据的描述和组织形式,对操作或行为的描述,即操作步骤,2023/8/1,5,算法与语句,常用的算法描述方法有:自然语言、传统流程图、NS流程图、伪代码等,这里只介绍传统流程图。例:求n!的算法思想:n!=1*2*3*n由于计算机执行乘法时每次只能求两个数相乘,因此上面的公式在程序中必定需要通过反复相乘来实现。需要设定一个变量n,表明求多少的阶乘;第二个变量,存当前累乘的结果;第三个变量存当前将要与累乘器相乘的因子,并且该因子的变化是从1到n每次增加1流程图如下页所示,2023/8/1,6,3种基本结构的特点:单入口,单出口,2023/8/1,7,C语句分类,C语言的语句有五大类:(1)9种控制语句:这一类语句用于实现流程控制,选择结构和循环结构必须通过控制语句实现。ifelse语句:是实现选择结构最常用的语句switch语句:用于控制某些多分支的选择结构 for()语句:最常用最灵活的循环控制语句,当型循环while()语句:循环结构最安全的控制语句,当型循环dowhile()语句:控制先执行后判断的直到型循环结构continue语句:表示提前结束本次循环,忽略其后循环体中的其他语句break语句:可用于switch语句(结束switch)或循环体中(结束本层循环)goto语句:流程跳转语句,很灵活,可实现各种结构,建议少用或不用 return语句:专门用于函数返回,被调函数执行到return就返回到调用点(2)变量声明语句:用来定义变量,形如:int a,b;(3)表达式语句:C语言中任何一个表达式最后加上分号构成表达式语句,赋值语句和函数调用语句是最常用的表达式语句(4)复合语句:以一对大括号括起的0或多条语句,在语法上仍为一条语句(5)空语句:只有一个分号构成的语句,表示什么也不做,2023/8/1,8,顺序结构,顺序结构的特点:语句按顺序依次执行,不涉及到任何条件的判断。顺序结构所使用的语句:变量声明语句、读写函数调用语句、赋值语句、return语句等。无需用其他流程控制语句优点:结构简单易懂缺点:对程序的健壮性、完备性往往无法兼顾例:程序4.1 从键盘上输入a,b,c的值,并以它们为三角形的三条边,求三角形的面积。算法思想:根据数学知识,设一个变量s用于求三角形周长的一半,即s=(a+b+c)/2,再利用一般三角形求面积的公式求解:,2023/8/1,9,程序4.1 求任意三角形的面积#include#include/包含平方根函数sqrt的声明int main()double a,b,c,s,area;/定义5个double变量 printf(“Please input a,b,c:n”);/屏幕提示 scanf(%lf%lf%lf,顺序结构,输入 3 4 5输出area=6.000000,编程提示:存原始数据的变量,用读入方式使其获得的值更灵活,也可赋值,但是通用性下降,问题1:可能会输入负数问题2:即使输入的都是正数,未必能构成一个三角形顺序结构无法解决需要作出判断的问题!,2023/8/1,10,选择结构的特点:通过某一个或若干条件的约束,有选择性地执行特定语句-在符合一定条件时,执行特定操作;在不符合条件时,不执行操作或执行另外的操作 选择结构使用的流程控制语句:if语句、switch语句优点:保证程序的健壮性、完备性ifelse语句形式:if(表达式)语句块1 else 语句块2 执行过程:先计算表达式,若非0(真)则执行语句块1;如果表达式为0(假)则执行语句块2,选择结构,不平衡的ifelse语句(单分支if),ifelse语句(双分支if),表达式可以是任何类型的,条件表达式和逻辑表达式最常用,不平衡的ifelse语句(if语句),不执行操作,2023/8/1,11,程序4.1 求任意三角形的面积#include#include/包含平方根函数sqrt的声明int main()double a,b,c,s,area;/定义5个double变量 printf(“Please input a,b,c:n”);/屏幕提示 scanf(“%lf%lf%lf”,选择结构(if语句),问题1:可能会输入负数问题2:即使输入的都是正数,未必能构成一个三角形顺序结构无法解决需要作出判断的问题!,程序4.2 改进程序4.1,在构成三角形时求面积,否则给提示信息,if(a0&b0&c0&a+bc&a+cb&b+ca),else printf(Error input!n);,此else分支不能省略,否则在不能构成三角形时将没有任何输出,就不是一个正确的算法了,2023/8/1,12,程序4.3 生成50以内的两个随机数,比较大小,输出较大者及两者之差的值。若第1个数大于第2个数,输出you are lucky!#include#include/含srand和rand函数的原型#include/含time函数的原型int main()int a,b;/定义两个整型变量a和bsrand(time(NULL);/调用当前系统时钟产生随机种子a=rand()%50;/产生一个50以内的随机数赋给ab=rand()%50;/产生另一个50以内的随机数赋给bif(ab)/如果a大于b printf(“the larger number is a:%dn”,a);/输出较大者 printf(a-b=%dn,a-b);/输出a与b的差值 else/如果a不大于b,即ab)printf(“you are lucky!n”);/if语句return 0;,选择结构(if语句),若删除此句,则每次产生的随机数都是一样的,这是调用系统时钟产生随机种子,上机运行观察结果,上机测试观察运行结果并分析:(1)删除srand(time(NULL);(2)删除else后的一对大括号,若删除此一对括号,则语句printf(“b-a=%dn”,b-a);成为一条不受条件控制的语句,2023/8/1,13,ifelse语句形式:if(表达式)语句块1 else 语句块2 if语句形式:if(表达式)语句块1最常用的嵌套ifelse语句形式:if(表达式1)语句块1 else if(表达式2)语句块2 else 语句块n,选择结构(if语句),else总是与其前面与之最靠近的并且未与其它else匹配过的if相对应;每个else都代表了与其对应if完全相反的条件,编程时应充分利用else所代表的条件简化程序,整个嵌套的ifelse语句从语法上仍为一条语句,2023/8/1,14,选择结构(if语句),程序4.4 用嵌套if进行符号函数求解#include int main()int x,sign;printf(Please input x:);scanf(%d,/语句2处嵌入ifelse,此else代表的条件是x=0,此else代表的条件是x0,if(x=0)if(x0)sign=1;else sign=0;else sign=-1;,语句1处嵌入ifelse,此else代表的条件是x0,此else代表的条件是x=0,显然左边的方法更直观,此题还有多种其他写法请读者思考,2023/8/1,15,选择结构(if语句),程序4.5 根据输入的百分制成绩score,转换成相应的五分制成绩grade并打印输出。转换标准为:.int score;char grade;/定义两个变量scanf(%d,/输出百分成绩及等级.,有效的分数应满足:0=score=100,此else代表的条件为:0=score&score=100,完整的条件为:90=score&score=100,此else代表的条件为:0=score&score90,完整的条件为:80=score&score90,此else代表的条件为:0=score&score80,完整的条件为:70=score&score80,此else代表的条件为:0=score&score70,完整的条件为:60=score&score70,此else代表的条件为:0=score&score60,2023/8/1,16,选择结构(switch语句),switch语句是控制选择结构流程的又一主要语句,某些嵌套的if-else语句可以改用switch语句switch case的语句格式为:switch(表达式)case 常量表达式1:语句系列1case 常量表达式2:语句系列2case 常量表达式n:语句系列ndefault:语句系列n+1,表达式类型可以是整型、字符型、枚举型,但不能是实型,常量表达式是switch中的表达式可能得到的有限个常量值,类型应与switch中的表达式一致,每个case后只能有1个常量表达式,switch中的表达式计算得到的结果与哪一个常量表达式的值相等,程序流程就从该常量后开始,执行其后的语句系列,default分支语法上可以省略,但是建议要有,这表示switch后的表达式与以上n个常量表达式都不相等的时候所进行的处理,有利于提高程序的健壮性,break语句和switch最外层的右大括号就是该选择结构的出口,遇到第一个break结束,如果没有break则到右大括号才结束,2023/8/1,17,程序4.5 根据输入的百分制成绩score,转换成相应的五分制成绩grade并打印输出。转换标准为:.int score;char grade;/定义两个变量scanf(%d,.,选择结构(switch语句),方法二:用switch语句实现百分制转五级分制,此break可以省略,在VC+下运行程序观察结果,遗憾:每次运行程序只能输入一个成绩,一次运行无法输入多个百分成绩进行转换!,2023/8/1,18,循环结构的特点:某些操作在一定条件约束下在程序中可被重复执行,或者重复执行到满足一定的条件时停止 循环结构使用的流程控制语句:for语句、while语句、dowhile语句;辅助语句:break语句、continue语句for语句形式:for(表达式1;表达式2;表达式3)语句块执行过程见右边流程图注意:for语句中的3个表达式可以省略 1个或多个,最多3个都可省略,但是 分号不能省,且应保证执行结果不变,不能死循环,循环结构,当型循环,直到型循环,用于求初值,只计算一次,用来作为控制循环的条件,非0值则执行语句块;若为0,则结束for语句,语句块执行结束后自动执行此表达式,然后再重新计算表达式2,就是循环体,通常用复合语句,只能是一条语句,整个for语句在语法上就是一条语句,假,表达式2,真,语句块,表达式1,表达式3,2023/8/1,19,循环结构(for语句),程序4.6 从键盘上输入一个非负整数n,求n!#includeint main()int n,i;/定义两个整型变量,i表示乘数 double fac=1;printf(Please input n:n);/提示输入数据的信息 scanf(“%d”,若输入为:-5 输出结果为:Error input!若输入为:4 输出结果为:4!=2.400000e+001若输入为:100 输出结果为:100!=9.332622e+157,fac的类型应当定义为double类型,因为阶乘的结果很容易非常大,应当定义范围最广的数据类型作为累乘器的类型,并且一定要初始化为1,对n作判断,保证程序的健壮性,用%e以指数形式输出一个较大的结果比较合理,执行的操作不变,但是变量是在不断变化的,for语句中表达式省略示例,=1;,+;,fac*=i+;if(in)break;,循环次数确定,2023/8/1,20,程序4.7 输入1个正整数m,判断m是否为质数,输出判断结果 质数的概念:除了1和它自己外,不能被任何其他整数所整除 算法思路:设一个变量prime表示结果,值为1表示是质数,值为0则不是质数 最初可以先假定m是质数,即prime初值为1,设一个变量i作为除数,从2变化到m-1,只要其中有一个能被m整除(即满足m%i=0),就说明m不是质数,立即修改prime为0,否则继续取下一除数计算 除数终值到底取多少:除数的终值需要到m-1吗?数学已上证明,除数最大只要到sqrt(m)就已经保证所有可能的因子均已被判断循环条件的控制:本题是循环次数不可确定的循环问题,用for语句也可以解决.以上分析表明循环终止有两种可能:(1)被某一个i整除,(2)i的值已变到终值处.因此循环条件体现为两个条件共同控制,即:prime&i=(int)sqrt(m)特殊正整数的处理:当m为1时,直接给出prime=0,不必循环,循环结构(for语句),2023/8/1,21,循环结构(for语句),程序4.7 从键盘输入一个正整数m,判断m是否为质数,输出判断结果#include#include/包含sqrt的原型 int main()int m,i,k,prime=1;scanf(%d,对prime的初始化不能缺少,如果m是负数,则返回不再进行判断,对于特殊正整数1直接给出不是质数的结论,变量k存除数的上界,变量i是每一次参与运算的除数,从2变化到k,增加步长为1,用两个条件共同控制,循环必将因为prime为0或ik而终止,前者表明m不是质数,后者表明m是质数,prime保持初值1,判断m是否能被i整除,若能则prime赋值为0,不是质数,循环终止时prime可能为1可能为0,根据其值输出不同的结论,循环体是这一条if语句,2023/8/1,22,while语句:与for语句一样能控制当型循环while语句的形式:while(表达式)语句块执行过程见右边流程图for语句与while语句的等价关系:(1)for中的表达式1相当于出现在 while之前的对循环变量的初始化(2)for语句的表达式2相当于while语句的表达式,都表示当该表达式为真时执行循环体(3)for语句的语句块和表达式3一起,相当于while循环的语句块,是被反复执行的循环体,循环结构(while语句),假,表达式,真,语句块,循环控制条件,循环体,通常用一条复合语句,2023/8/1,23,循环结构(while语句),程序4.6 从键盘上输入一个非负整数n,求n!#includeint main()int n,i;double fac=1;printf(Please input n:n);scanf(“%d”,方法二:改用while循环求阶乘,i=1;while(i=n)fac*=i;i+;,再论for与while:虽然都可处理当型循环,for语句一定可以转化为等效的whie语句,但是并不是所有的while都可以等效转为for。因为在while语句中,可以有条件地修改循环控制变量的值,而for语句中修改循环控制条件一般通过表达式3,是无条件执行的。从这个意义上看,while的使用范围比for更广,但for语句更简洁,2023/8/1,24,程序2.2:三位的非负整数按位分离输出,#include int main()int i,n;/定义两个整型变量i,n,变量先定义后使用 n=578;/通过赋值语句使n获得一个3位整数值 i=n%10;/对10取余求得个位数 printf(%d,i);/输出个位数 i=n/10%10;/先整除10再对10取余求得十位数 printf(%d,i);/输出十位数 i=n/100;/用整除100求得百位数 printf(%dn,i);/输出百位数 return 0;,该程序显然不具有通用性,不能处理任意位数的整数按位分离问题,2023/8/1,25,循环结构(while语句),程序4.8 从键盘读入任意位的非负整数,按位分离后逆序输出#includeint main()int i,n;scanf(“%d”,算法思想:在被处理的数不等于0时:(1)利用对10取余得到个位数(2)输出该个位数(3)对被分离的数利用整除10降一阶,若不为0回到步骤(1)若为0停止处理,等价于n!=0,用循环求解问题的关键:(1)以什么作为控制循环的条件(2)重复不断地执行的是哪些操作,即循环体是什么(3)在循环体内对变量如何变化每个变量的意义要明确,2023/8/1,26,循环结构(while语句),程序4.9 从键盘读入两个正整数,用辗转相除法求最大公约数#includeint main()int dividend,divider,remainder;./读入dividend,divider remainder=dividend%divider;while(remainder)dividend=divider;divider=remainder;remainder=dividend%divider;printf(hcd:%dn,divider);return 0;,算法思想:(1)将两个正整数分别作为被除数(dividend)和除数(divider)(2)被除数整除除数得余数(remainder)(3)若余数不为0,则除数转为被除数,余数转为除数,继续步骤(2)(4)若余数为0则结束循环,使余数为0的除数就是最大公约数,余数不为0为循环条件,上一次的除数作为下次的被除数,上一次的余数作为下次的除数,求新的余数,使余数为0的除数就是最大公约数,第一次求余数,2023/8/1,27,while语句与for语句都控制当型循环,共同特点:先判断循环条件,为真才执行循环体,故循环体最少执行0次dowhile语句控制直到型循环,其特点是:先执行循环体,再判断条件,当条件为真时继续执行循环体,条件为假,循环结束。因此循环体至少执行1次。dowhile语句的形式:do 语句块 while(表达式);执行过程见右边流程图,循环结构(dowhile语句),假,表达式,真,语句块,循环控制条件,循环体,可以是多条语句,此处一定要有分号,2023/8/1,28,循环结构(dowhile语句),程序4.10 模拟投骰子,以6点为目标,投中目标两次获胜,最多允许投10次(方法1:用dowhile语句)#include#include#includeint main()int count=0,y=0,dice;srand(time(0);do dice=1+rand()%6;count+;if(dice=6)y+;while(count10,模拟投骰子可以通过调用随机函数产生1至6之间的随机数.在程序中必须设置一个变量用来统计已经投了多少次,再设另一个变量统计投中了多少次。投骰子的动作肯定要做,且做一次还不能完成,因此适合使用dowhile语句实现。循环体应该完成:(1)调用随机函数产生一个随机数来模拟投骰子;(2)统计投掷次数的变量无条件加1;(3)如果随机数的值等于6,则统计投中次数的变量值加1循环条件是:投掷次数小于10并且投中次数小于2,记录投中的次数,记录投掷的次数,记录点数,产生随机种子,生成16随机数模拟投骰子,投掷次数无条件加1,如果点数等于6,投中次数加1,投掷次数小于10且投中次数小于2为循环条件,输出投掷次数和投中次数,2023/8/1,29,循环结构(dowhile语句),程序4.10 模拟投骰子,以6点为目标,投中目标两次获胜,最多允许投10次(方法1:用dowhile语句)#include#include#includeint main()int count=0,y=0,dice;srand(time(0);do dice=1+rand()%6;count+;if(dice=6)y+;while(count10,while(count10,(方法2:用while语句),此处不能加分号,如果加了分号,语法上正确,表示该循环体为空语句,而语句块就成为一条无条件的语句,结果将出错,(方法3:用for语句),for(;count10,2023/8/1,30,程序4.11 利用格里高利公式求的近似值 格里高利公式为:/4=1-1/3+1/5-1/7+两种求解要求:算法分析:先求/4,最后再乘以4,用一个累加器进行求和;分子无变化,分母可用项号i的表达式:2*i-1表示每一个累加项正负号交替,设一个符号变量,每项加过以后取负循环体内的主要操作:(1)求当前项,即符号变量*1.0/(2*i-1)(2)将当前项加入到累加器中(3)改变符号变量的值,以保证累加项正负号交替(4)表示第几项的变量i加1 循环条件根据题目要求设定,循环结构(3种语句),项数确定,适合用for语句,规定求解精度,适合用whie或dowhile语句,2023/8/1,31,/要求1:求前5001项的/累加和作为的近似值#includeint main(void)int sign,i;double item,pi,sum=0;sign=1;for(i=1;i=5001;i+)item=sign*1.0/(2*i-1);sum=sum+item;sign=-sign;pi=4*sum;printf(pi=%fn,pi);return 0;,/要求2:求的近似值直到/最后累加项绝对值小于1E-4#include#includeint main(void)int sign,i=1;double item,pi,sum=0;sign=1;do item=sign*1.0/(2*i-1);sum=sum+item;sign=-sign;i+;while(fabs(item)=1e-4);pi=4*sum;printf(pi=%fn,pi);return 0;,2023/8/1,32,dowhile语句一个非常实用的用法:保证读入的数据符合要求,也就是说,如果读入的数不符合要求,则提示重新读入,直到满足要求为止 例4.7:判断一个输入的正整数m是否为质数当时对输入的m,如果小于等于0,则简单地返回不做任何处理。现在使用dowhile可以要求读到m大于0为止。int main()int m,i,k,prime=1;scanf(%d,循环结构(dowhile语句),do printf(input a data0:n);scanf(%d,读到第一个大于0的整数就停止,2023/8/1,33,3种控制循环结构的语句在语法上都是一条语句 for和while语句的循环体要求是一条语句,如果使用复合语句作循环体,实际上是允许有多条语句的;dowhile语句本身循环体就可以是多条语句,因此,它们的循环体内可以嵌入更深层次的循环控制语句,从而构成了循环的嵌套,3种语句可以互相嵌套。循环嵌套最主要的是理解其执行过程:(1)先对外层循环控制变量取一个值,满足条件进入循环体(2)执行循环体中的内层循环,内层循环结束后,回到外层(3)改变外层循环控制变量的值,回到步骤(1)(4)当外层循环条件不满足时停止整个循环,循环嵌套,2023/8/1,34,例4.12:从键盘上输入1个正整数n,求1!+2!+3!+n!的结果#include int main()int i,j,n;double f,sum=0;do printf(Please input n:n);scanf(%d,内循环,求i!,外循环,求1!+2!+n!,如果读入3,结果sum=9.000000E+000,2023/8/1,35,循环嵌套,程序4.13 打印一个由*号组成的 五 行等腰上三角形。#includeint main()int i,j;for(i=1;i=5;i+)for(j=1;j=(5-i)+14;j+)/+14使图形居中 printf(%2c,);/打印前导空格 for(j=1;j=2*i-1;j+)/打印本行图形printf(%2c,*);printf(n);/换行 return 0;,算法:一般用两层循环打印一个形状规则的图形外层循环控制行变化 外层循环体中依次完成下面3个步骤:(1)根据行数和图形的形状,打印每行的前导空格(确定本行图形的起始位置)。若行号为i,i从1开始计,考虑最后一行(假设为n)前不留前导空格,则第i行前导空格的单位为:n-i,用一个内层循环控制打印前导空格(2)根据行号与当前行图形的个数及形状的关系进行控制输出当前行的图形。等腰三角形,其图形元素个数为2*i-1,这里i为当前行的行号,用一个内层循环打印图形(3)换行,外层循环控制行的变化,n,n;,scanf(“%d”,n,n-i,打印一个n行等腰上三角形,每行图形依次为ABCD,读入控制的完整代码如教材所示,用dowhile保证n在一定的范围内,i+64);,2023/8/1,36,一个用穷举法解决问题的典型例,注意算法设计的重要性,同一题有多种解法,效率不一样.程序4.14 百钱百鸡问题:鸡翁一,值钱5;鸡母一,值钱3;鸡雏三,值钱1。百钱买百鸡,问鸡翁、母、雏各几何?分析:设公鸡,母鸡和雏鸡的数量分别为x,y,z,有下列关系成立:x+y+z=100(百鸡)5x+3y+z/3=100(百钱)15x+9y+z=300(百钱)3个变量的范围:0=x=20,0=y=33,0=z=100,循环嵌套,2023/8/1,37,/例4.14百鸡百钱问题方法1/用3 层循环控制#includeint main(void)int x,y,z;for(x=0;x=20;x+)for(y=0;y=33;y+)for(z=0;z=100;z+)if(x+y+z=100,/例4.14百鸡百钱问题方法3/用1层循环控制/方法:公式-公式得到:14x+8y=200 即:7x+4y=100由公式,显然0int main(void)int x,y,z;for(x=0;x=14;x+)y=(100-7*x)/4;z=100-x-y;if(15*x+9*y+z=300)printf(%5d%5d%5d,x,y,z);return 0;,满足百鸡,满足百钱,同时满足,2,两,z=100-x-y;,利用百鸡条件用x,y的表达式表示z,从而去掉第3层循环,if(,这时只需要判断百钱的条件就可以了,这时只需要判断百钱的条件就可以了,2023/8/1,38,break语句的用法1:用于switch语句中,表示结束该分支的操作,从而结束switch语句,真正实现了多分支控制break语句的用法2:用于3种循环语句的循环体中,配合一定的条件,执行到break直接退出本层循环,从而增加了从循环体中结束循环的方式(此前只能因循环控制条件为假而终止循环)程序4.10 模拟投骰子问题的第4种实现方法使用break语句 模拟投骰子循环条件是两个:投掷次数小于10并且投中次数小于2,前3种方法都是将这两个条件同时列在控制循环的条件表达式中,用break就可以减少一个循环条件,其他流程控制语句(break),2023/8/1,39,程序4.10 模拟投骰子问题的第4种实现方法循环体中使用break语句,#include#include#includeint main()int count=0,y=0,dice;srand(time(0);while(count10,两个条件同时满足,这是原方法2的代码,用while语句控制循环,if(y=2)break;,),减少一个条件,break用于循环体中,一般要配合if使用才有意义,流程图,增加了从循环体中退出循环的出口,2023/8/1,40,continue语句的用法:只能用于循环语句的语句块中continue语句的功能:提前结束本次循环,忽略循环体中其后的语句,直接进入下一次条件的判断与break语句不同:continue不能退出循环程序4.10 模拟投骰子问题的第5种实现方法使用continue语句 模拟投骰子的循环体中,变量y自增1是有条件的,必须在dice=6时,换句话说,当dice!=6时,y+不执行,这可以用continue来改写,其他流程控制语句(continue),2023/8/1,41,程序4.10 模拟投骰子问题的第5种实现方法循环体中使用continue语句,#include#include#includeint main()int count=0,y=0,dice;srand(time(0);while(count10,两个条件同时满足,这是原方法2的代码,用while语句控制循环,流程图,!,continue,增加了一种提前结束循环体回到循环条件重新判断的方式,2023/8/1,42,goto语句:为无条件转移语句,它可以在不需要任何条件的情况下直接使程序转跳到语句标号所标识的语句处,但是通常与if语句配合使用,可以实现顺序结构、选择结构和循环结构这3种流程的控制。goto语句的格式:goto 语句标号;语句标号:是一个用户自定义标识符,它标识程序的一个特定位置,只能在goto语句中引用 goto语句使用建议:因自由跳转破坏基本结构,影响可读性和和可维护性,不提倡使用goto语句,应合理、有节制地使用。程序4.10 模拟投骰子问题的第6种实现方法使用goto语句实现循环结构,其他流程控制语句(goto),2023/8/1,43,程序4.10 模拟投骰子问题的第6种实现方法使用goto语句实现循环,#include#include#includeint main()int count=0,y=0,dice;srand(time(0);do dice=1+rand()%6;count+;if(dice=6)y+;while(count10,这是原方法1的代码,用dowhile语句控制循环,repeat:,if,goto repeat;,此为语句标号,后面跟冒号,位于goto要跳转执行的第一句话之前,原来的while改成if,用goto语句跳转到repeat标识的语句处,从而使repeat和此if语句之间的语句成为循环体,2023/8/1,44,本章小结,本章内容是C语言编程的基础,非常重要!重点掌握控制3种基本结构(顺序结构、选择结构、分支结构)实现的各种语句的使用方法3种if语句(ifelse、if、嵌套的if)的正确使用switch与break语句配合使用,才能真正处理多分支问题for与while控制当型循环的执行过程,语法要点,以及for语句灵活多变的形式dowhile控制直到型循环的执行过程,与当型循环的区别break与continue用于循环体中的不同作用:退出本层循环与提前结束本次循环进入下一次条件判断之间的区别一般了解goto语句,知道其用法,谨慎使用难点:正确设置控制循环的条件以及分析循环结构中的不变与变哪些是不变的操作,这是循环体中的语句;每次循环如何变化哪些变量,2023/8/1,45,本章小结,重点理解本章经典算法并能举一反三解决类似问题:五级分制的两种求解方法-用if或switch求解多分支问题判断某一个整数是否为质数-寻找一定范围内所有的质数,哥德巴赫猜想求两个整数的最大公约数-求两数的最小公倍数,多个数的最大公约数按位分离十位数的每一位数字-进制转换问题项数确定或要求精度的格里高利公式求和-求和题的解法模拟投骰子游戏的多种实现-猜字谜游戏的灵活设计打印等腰三角形-规则图形的打印方法百鸡百钱问题的多种解法-穷举题的一题多解及算法效率掌握一些实用技术:用dowhile语句保证读入符合特定要求的数据调用srand(time(NULL)产生随机种子,保证数的随机性调用rand()函数产生一定范围的随机整数,The end of chapter 4,

    注意事项

    本文(关关雎鸠南邮C语言课件第4章.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开