C语言三种程序结构.ppt

上传人:tia****nde 文档编号:11495294 上传时间:2020-04-25 格式:PPT 页数:64 大小:993KB
返回 下载 相关 举报
C语言三种程序结构.ppt_第1页
第1页 / 共64页
C语言三种程序结构.ppt_第2页
第2页 / 共64页
C语言三种程序结构.ppt_第3页
第3页 / 共64页
点击查看更多>>
资源描述
2020年4月25日星期六,游志宇,电子科技大学成都学院微电子系,第四讲,4.1顺序结构,什么是顺序结构?,程序按语句的先后顺序依次执行的程序,例子:输入三角形的三边长,求三角形面积。,假设三个边长a,b,c能构成三角形。则面积公式为:area=s=(a+b+c)*0.5,#include#includevoidmain()floata,b,c,s,area;scanf(“%f,%f,%f,数学函数库因为要用到其中的sqrt函数,4.1顺序结构,例从键盘输入一个大写字母,要求改用小写字母输出。includevoidmain()char,;getchar();printf(,);printf(,);,运行情况:,,4.1顺序结构,例求x2方程的根。a,b,c由键盘输入,且设。众所周知,一元二次方程式的根为x1=x2=可以将上面的分式分为两项:p=,q=x1=p+q,x2=p-q,4.1顺序结构,#include#includevoidmain()floata,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,运行情况:,,4.1顺序结构,4.2选择结构,选择结构是3种基本结构之一。,选择结构的作用:根据所指定的条件是否满足,决定从给定的操作中选择其一执行;在C语言中选择结构是由if语句和switch语句实现的。正确使用选择结构,需要充分理解关系表达式和逻辑表达式。,4.2选择结构,一、if语句,if语句是用来判断所给条件是否满足,然后根据结果决定执行给出的操作。,if语句最常用的有三种基本形式,(1)if(表达式)语句例:if(xy)printf(“%d”,x);,4.2选择结构,#includevoidmain()floata,b,t;scanf(“%f,%f”,4.2选择结构,例输入两个实数,按代数值由小到大的顺序输出这两个数。,例输入三个数a,b,c,要求按由小到大的顺序输出。,用伪代码写的算法为:ifab将a和b对换,a中保存a、b中的小者;ifac将a和c对换,a中保存a、c中的小者;ifbc将b和c对换,b中保存b、c中的小者;,4.2选择结构,#includevoidmain()floata,b,c,t;scanf(“%f,%f,%f”,4.2选择结构,(2)if(表达式)语句1else语句2例:if(xy)printf(“%d”,x);elseprintf(“%d”,y);,4.2选择结构,if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n,4.2选择结构,例:if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;,4.2选择结构,说明:(1).3种形式的if语句中,在if后面都有表达式,一般为逻辑表达式或关系表达式。注:在执行if语句时,先对表达式求解,然后根据表达式的值,执行指定的语句。(2).第二,第三种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。(3).在if和else后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。,4.2选择结构,二.if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。形式:if()if()语句1else语句2elseif()语句3else语句4,内嵌if,4.2选择结构,-1(x0)算法1:算法2:输入x输入x若x0,则y=1若x=0,则y=0输出y若x0,则y=1输出y,4.2选择结构,#includevoidmain()intx,y;scanf(“%d”,4.2选择结构,上例中的程序段有四个,请判断哪个是正确的?程序1:程序2:if(x=0)y=-1;if(x0)elsey=1;if(x=0)elsey=0;y=0;elseelsey=1;y=-1;程序3:程序4:y=-1;y=0;if(x!=0)if(x=0)if(x0)if(x0)y=1;y=1;elseelsey=0;y=-1;,正确,正确,错误,错误,4.2选择结构,例写程序,判断某一年是否闰年。用下图来表示判断闰年的算法。,能被4整除,但不能被100整除。能被4整除,又能被400整除,#includevoidmain()intyear,leap;scanf(%d,if(year!)leap;elseif(year!)leap;elseif(year!)leap;elseleap;,/也可以用一个逻辑表达式包含所有的闰年条件,/将上述if语句用下面的if语句代替:if(year%4=0elseleap=0;,if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyear.n);,运行情况:.,三.Switch语句,4.2选择结构,switch语句是多分支语句,用来实现多分支选择结构。if语句只有两个分支可共选择。在实际问题中,我们经常会遇到多分支选择的问题,因此引入多分支语句switch。例如:学生成绩分类(90分以上为a等,8089分为b等,7079分为c等);人口统计分类(按年龄分为老、中、青、少、儿童);工资统计分类;银行存款分类。当然多分支选择也可以用if语句嵌套来解决,但如果分支过多,则嵌套的if语句层数就多,程序冗长而可读性降低。,4.2选择结构,switch语句的格式:switch(表达式)case常量表达式:语句case常量表达式:语句case常量表达式:语句default:语句,说明:switch后面括弧内的“表达式”,允许它为任何类型。(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。(3)每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。,4.2选择结构,4.2选择结构,(4)各个case和default的出现次序不影响执行结果。例如,可以先出现“default:”,再出现“caseXX:”,然后是“caseAA:”。(5)执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。,例运输公司对用户计算运费。设每公里每吨货物的基本运费为,货物重为,距离为,折扣为,则总运费的计算公式为:*()路程()越远,每公里运费越低。假设标准如下:没有折扣折扣折扣折扣折扣折扣,4.2选择结构,分析折扣变化的规律性:折扣的“变化点”都是250的倍数(250,500,1000,2000,3000)利用这一特点,可以在横轴上加一种坐标c,c的值为S/250,c代表250的倍数。当:c1时,表示S250,无折d=0;1c2时,表示250S500,折扣d=2;2c4时,表示500S1000,折扣d=5;4c8时,表示1000S2000,折扣d=8;8c12时,表示2000S3000,折扣d=10;c12时,表示3000S,折扣d=15。,4.2选择结构,4.2选择结构,据此写出程序如下:#includevoidmain()intc,S;floatp,w,d,f;printf(“请输入基本运费P、货物重量W及运输距离S:n”)scanf(f,f,d,i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(%dn,sum);,4.3.2用while语句实现循环,while语句用来实现“当型”循环结构。其一般形式:while(表达式)语句当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。,流程图,例求1到100的和#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);,说明:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句。,运行结果:5050,注意:循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。如果不加花括号,则while语句的范围只到while后面的第一个分号处。在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。(成为无限循环),4.3.3用do-while语句实现循环,do-while语句的特点:先执行循环体,然后判断循环条件是否成立。其一般形式:do循环体语句while(表达式);,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。,流程图,#includevoidmain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(%dn,sum);,运行结果:5050,例求1到100的和,从上面例题可以看到:对同一个问题可以用while语句处理,也可以用do-while语句处理。在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。,例while和do-while循环的比较(1)#include(2)#includevoidmain()voidmain()intsum=0,i;intsum=0,i;scanf(“%d,,运行结果:1sum=55再运行一次:11sum=0,运行结果:1sum=55再运行一次:11sum=11,说明:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。,4.4用for语句实现循环,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。其一般形式:for(表达式1;表达式2;表达式3)语句,4.4用for语句实现循环,For循环的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句,for(表达式1;表达式2;表达式3)语句,4.4用for语句实现循环,循环初始条件,循环控制条件,循环体,for语句等价于下列语句:表达式1;while(表达式2)语句;表达式3;,for语句最简单的应用形式也就是最易理解的如下形式:for(循环变量赋初值;循环条件;循环变量增值)循环体;,例如:求1到100的和,它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;,显然,用for语句简单、方便。,for(i=1;i=100;i+)sum=sum+i;,例:求(即求1!+2!+3!+.+20!),#includevoidmain()floats=0,t=1;intn;for(n=1;n100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。,4.5break语句和continue语句,4.5.2continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.一般形式:continue;,4.5break语句和continue语句,continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行。,while(表达式1)if(表达式2)continue;,流程图,4.5break语句和continue语句,continue语句和break语句的区别:break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,while(表达式1)if(表达式2)break;,流程图,例把100200之间的不能被3整除的数输出。#includevoidmain()intn;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);,说明:当n能被3整除时,执行continue语句,结束本次循环(即跳过printf函数语句),只有n不能被3整除时才执行printf函数。,说明:例中循环体也可以改用一个if语句处理:if(n%3!=0)printf(“%d”,n);,题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为:153=13+53+33。,程序分析:利用for循环控制100-999之间的数,每个数分解出个位,十位,百位,#includevoidmain()inti,j,k,n;printf(“waterflowernumberis:n);for(n=100;n1000;n+)i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出个位*/if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%-5d,n);printf(“n);,题目:有1、2、3、4共四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?,程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。,#includevoidmain()inti,j,k;printf(n);for(i=1;i5;i+)/以下为三重循环for(j=1;j5;j+)for(k=1;k5;k+)/*确保i、j、k三位互不相同*/if(i!=k,题目:猜数游戏(掌握程序结构及随机函数应用)程序说明:游戏的开始由机器产生一个随机数(1100之间,用库函数srand(),rand()),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示:YouranswerisHIGH,tryagain.,否则,程序提示:YouranswerisLOW,tryagain.,直到猜对为止。程序可实现连续猜数,直到游戏者退出。voidsrand(unsignedseed)初始化随机数发生器intrand()产生一个随机数并返回这个数system(cls);/清屏DOS命令fflush(stdin);/清除内存getch();/从控制台获取一个字符,不显示在屏幕上,题目:百钱百鸡(穷举算法)我国古代数学家张丘键在算经中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?注:穷举法是最简单、最常见的一种程序设计方法。它充分利用了计算机处理的高速特性。使用穷举法的关键是确定正确的穷举范围,即不能过分扩大、也不能过分缩小穷举的范围。,题目:简单计算器请编写一个程序计算表达式:data1opdata2的值。其中,op为运算符、*、/。,TheEnd,Thanks!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!