C语言三种程序结构.ppt_第1页
C语言三种程序结构.ppt_第2页
C语言三种程序结构.ppt_第3页
C语言三种程序结构.ppt_第4页
C语言三种程序结构.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

2019年6月8日星期六,游 志 宇,电子科技大学成都学院 微电子系,第四讲, 4.1 顺序结构,什么是顺序结构?,程序按语句的先后顺序依次执行的程序,例子:输入三角形的三边长,求三角形面积。,假设三个边长a,b,c能构成 三角形。 则面积公式为: area= s=(a+b+c)*0.5,#include #include void main() float a,b,c,s,area; scanf(“%f,%f,%f, ,数学函数库 因为要用到其中的sqrt函数, 4.1 顺序结构,例 从键盘输入一个大写字母,要求改用小写字母输出。 include void main() char ,; getchar(); printf(,); ; printf (,); ,运行情况: , ,, 4.1 顺序结构,例 求x2方程的根。 a,b,c由键盘输入,且设 。 众所周知,一元二次方程式的根为 x1= x2= 可以将上面的分式分为两项: p= , q= x1=p+q, x2=p-q, 4.1 顺序结构,#include #include void main ( ) float a,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 选择结构,#include void main() float a,b,t; scanf(“%f,%f”, , 4.2 选择结构,例 输入两个实数,按代数值由小到大的顺序输出这两个数。,例 输入三个数a,b,c,要求按由小到大的顺序输出。,用伪代码写的算法为: if ab 将a和b对换,a中保存a、b中的小者; if ac 将a和c对换,a中保存a、c中的小者; if bc 将b和c对换,b中保存b、c中的小者;, 4.2 选择结构,#include void main ( ) float a,b,c,t; scanf(“%f,%f,%f”, , 4.2 选择结构,(2) if(表达式) 语句1 else 语句2 例: if (xy) printf(“%d”,x); else printf(“%d”,y);, 4.2 选择结构,if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式m) 语句m else 语句n, 4.2 选择结构,例: if (number500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0;, 4.2 选择结构,说明: (1).3种形式的if语句中,在if后面都有表达式, 一般为逻辑表达式或关系表达式。 注:在执行if语句时,先对表达式求解,然后 根据表达式的值,执行指定的语句。 (2).第二,第三种形式的if语句中,在每个 else前面有一个分号,整个语句结束处有一 个分号。 (3).在if和else后面可以只含有一个内嵌的操 作语句,也可以由多个操作语句,此时用花 括号将几个语句括起来成为一个复合语句。, 4.2 选择结构,二.if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套。 形式: if() if() 语句1 else 语句2 else if() 语句3 else 语句4,内嵌if, 4.2 选择结构,-1 (x0) 算法1: 算法2: 输入x 输入x 若x0,则y=1 若x=0,则y=0 输出y 若x0,则y=1 输出y, 4.2 选择结构,#include void main() int x,y; scanf(“%d”, , 4.2 选择结构,上例中的程序段有四个,请判断哪个是正确的? 程序1: 程序2: if(x=0) y=-1; if(x0) else y=1; if(x=0) else y=0; y=0; else else y=1; y=-1; 程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) if(x0) y=1; y=1; else else y=0; y=-1;,正 确,正 确,错 误,错 误, 4.2 选择结构,例 写程序,判断某一年是否闰年。 用下图来表示判断闰年的算法。,能被4整除,但不能被100整除。 能被4整除,又能被400整除,#include void main() int year, leap; scanf(“%d“,if(year!) leap; else if(year!) leap; else if(year!) leap ; else leap;,/也可以用一个逻辑表达式包含所有的闰年条件, /将上述if语句用下面的if语句代替: if(year%4=0 else leap=0;,if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a leap year.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 :”,再出现 “case XX:”,然后是“case AA:”。 (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 选择结构,据此写出程序如下: #include void main() int c,S; float p,w,d,f; printf(“请输入基本运费P、货物重量W及运输距离S:n”) scanf(“f,f,d“,&p,&w,&S); if(S=3000) c=12; else c=S/250;, 4.2 选择结构,switch(c) case0d=0;break; case1d=2;break; case2 case3d=5;break; case4 case5 case6 case7d=8;break; case8 case9 case10 case11d=10;break; case12d=15;break; ,f=p*w*S*(1-d/1000); printf(“freight=%154fn“,f); 运行情况如下: 100,20,300 freight= 588000.0000 注意: c、S是整型变量,因此c=s/250为整数。当s3000时,令c=12,而不使c随S增大,这是为了在Switch语句中便于处理,用一个case可以处理所有S3000的情况。, 4.3 循环结构,在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。,在C语言中,有以下几种循环语句: (1) 用goto语句和if语句构成循环; (2) 用while语句构成循环; (3) 用do|while语句构成循环; (4) 用for语句构成循环。,4.3.1 goto语句以及用goto语句构成循环,goto语句为无条件转向语句,它的一般形式为 goto 语句标号; 什么是语句标号呢? 语句标号用标识符表示,它的命名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。,说明:这里用的是“当型”循环结构,当满足“i=100” 时执行花括弧内的循环体。,运行结果:5050,说明:例子演示了如何用if语句和goto语句构成循环。,例 用if语句和goto语句构成循环,求 #include void main( ) int i, sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%dn,sum); ,4.3.2 用while语句实现循环,while语句用来实现“当型”循环结构。 其一般形式: while (表达式) 语句 当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。,流程图,例 求1到100的和 #include void main() int i,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为止,此时循环结束。,流程图,#include void main() int i,sum=0; i=1; do sum=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) #include void main ( ) void main( ) int sum=0,i; int sum=0,i; scanf(“%d, ,运行结果: 1 sum=55 再运行一次: 11 sum=0,运行结果: 1 sum=55 再运行一次: 11 sum=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!),#include void main() float s=0,t=1; int n; for(n=1;n=20;n+) t=t*n; s=s+t; printf(“1!+2!+20!=%en“,s); ,4.5 break语句和continue语句,4.5.1 break语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句 一般形式: break; 注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。,4.5 break语句和continue语句,例: float pi=3.14159; for(r=1;r100) break; printf(r=%f,area=%fn,r,area); ,程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的for循环可以看到:当area100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。,4.5 break语句和continue语句,4.5.2 continue语句 作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定. 一般形式: continue;,4.5 break语句和continue语句,continue语句和break语句的区别: continue语句只结束本次循环,而不是终止整个循环的执行。,while(表达式1) if(表达式2) continue; ,流程图,4.5 break语句和continue语句,continue语句和break语句的区别: break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,while(表达式1) if(表达式2) break; ,流程图,例 把100200之间的不能被3整除的数输出。 #include void main() int n; 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之间的数,每个数分解出个位,十位,百位,#include void main() int i,j,k,n; printf(“water flowernumber is: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

温馨提示

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

评论

0/150

提交评论