谭浩强版经典课件 C语言的经典课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章结构化程序的开发2000级普招2008级统招主讲:樊广军第三章结构化程序的开发第三章结构化程序的开发1.理解解决问题的基本方法2.学会制定简单程序的算法3.掌握一种选择结构(if/else)4.掌握一种循环结构(while)5.掌握自增、自减的运算本章目标:第三章结构化程序的开发§3.1C程序结构和语句一、C程序结构·每一个源文件由预编译命令和若干函数组成(对每个文件分别编译,然后连接)·一般地,一个C程序可由多个源文件组成·每一个函数由说明部分和语句部分组成第三章结构化程序的开发C程序结构:C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n说明部分执行部分(语句)………第三章结构化程序的开发函数调用语句:如:printf(…);二、C程序语句1.表达式语句赋值语句:如:i=i+1;i++;x+y;空语句:任何事情都不做。C程序语句可分为五大类:如:;第三章结构化程序的开发2.控制语句––改变语句的执行顺序if()~else~(条件)for()~(循环)while()~(循环)do~while(循环)switch(多分支选择)()表示条件,~表示语句第三章结构化程序的开发continue(结束本次循环)break(中止整个循环)return(函数返回)3.限定转向(无条件转向)语句5.终止程序运行语句4.无条件转移语句gotoexit第三章结构化程序的开发6.复合语句(语句体)用{}括起来的一系列语句。如:{z=x+y;t=z/100;printf(%f,t);}第三章结构化程序的开发三、结构化程序设计概念从结构化程序设计角度出发,程序只有三种结构:·顺序结构·选择结构·循环结构第三章结构化程序的开发1.顺序结构表示ABAB先执行A,再执行B.第三章结构化程序的开发2.选择结构表示为ABPTFBTPFA存在某条件P,若P为真,则执行A,否则执行B。第三章结构化程序的开发另一种选择结构––多分支结构.KK=K1A1A2AiAn……K=K2K=Kn第三章结构化程序的开发3.循环结构表示为PFTAAP为T(1)当型结构当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.有两种结构:当型和直到型第三章结构化程序的开发(2)直到型APTFA直到P为F先执行A,再判断P,若为T,再执行A,如此反复,直到P为F.已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。第三章结构化程序的开发§3.2算法1.按指定的语句和顺序来解决问题的过程称为算法。2.算法的两个重要方面:顺序语句3.算法的图形表示:流程图第三章结构化程序的开发4.流程图符号:椭圆矩形判断框小圆圈代表程序的开始或结束代表程序所执行的动作代表程序的分支代表程序的连接第三章结构化程序的开发所有的流程图用一带箭头的线(流线)相连,就构成了程序的流程(顺序)如:第三章结构化程序的开发§3.3if选择结构–––条件判断一、if的三种形式功能:当表达式值非0时,执行语句体A,否则不执行语句体A.形式1if(表达式)语句体A第三章结构化程序的开发表达式语句体A=00例如:if(xy);{x=x%2;printf(%d,x);}其流程图:第三章结构化程序的开发形式2if(表达式)功能:表达式为非0,执行语句体A表达式为0,执行语句体Belse语句体B语句体A第三章结构化程序的开发表达式语句体A语句体B0=0例:if(xy)printf(%d,x);elseprintf(%d,y);第三章结构化程序的开发形式3if(表达式1)elseif(表达式2)elseif(表达式3)……elseif(表达式n)else语句体1语句体2语句体3语句体n语句体n+1第三章结构化程序的开发流程:表达1表达2表达3表达n语句体2语句体3语句体n语句n+1语句体1……0=0=0000第三章结构化程序的开发如:if(3)prinf(o.k);if('a')…1.表达式可以是逻辑、关系,甚至是算术表达式。2.语句必须以分号结束3.若语句不止一条,则必须用{}括起来。在{}外可以不用分号.二、注意的问题:第三章结构化程序的开发#includestdio.hmain(){floata,b,t;scanf(%f,%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f,a,b);}例1输入两个实数,按代数值由小到大次序输出这两个数。3.6,–3.2–3.20,3.60运行情况如下:第三章结构化程序的开发例2输入三个数,按大小顺序输出。#includestdio.hmain(){floata,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f,a,b,c);}运行情况如下:3,7,11.00,3.00,7.00第三章结构化程序的开发三、if语句的嵌套if(表达式1)内嵌ifelse内嵌注意:else与最近的if配对.一般形式在上述形式的if语句中,又可以是if语句–––称为嵌套。if(表达式2)语句1if(表达式3)语句3else语句2else语句4第三章结构化程序的开发例:if()if()语句2else语句3if(){if()语句1}else…所以:必要时加{}.if()语句1else第三章结构化程序的开发例3有一函数:y=–1(x0)0(x=0)1(x0)编一程序,输入一个x值,输出y值。有以下几种写法,请判断哪些是正确的?第三章结构化程序的开发程序2:将程序1的if语句改为:/*exp52.c*/#includestdio.hmain(){intx,y;scanf(%d,&x);if(x=0)if(x0)y=1;elsey=0;elsey=-1;printf(x=%d,y=%d\n,x,y);}程序1:/*exp51.c*/#includestdio.hmain(){intx,y;scanf(%d,&x);if(x0)y=–1;elseif(x==0)y=0;elsey=1;printf(x=%d,y=%d\n,x,y);}第三章结构化程序的开发程序4:将程序1的if语句改为:/*exp54.c*/#includestdio.hmain(){intx,y;scanf(%d,&x);y=0;if(x=0)if(x0)y=1;elsey=-1;printf(x=%d,y=%d\n,x,y);}程序3:将程序1的if语句改为:/*exp53.c*/#includestdio.hmain(){intx,y;scanf(%d,&x);y=-1;if(x!=0)if(x0)y=1;elsey=0;printf(x=%d,y=%d\n,x,y);}第三章结构化程序的开发1.程序1和程序2是正确的。它们代表的函数为:2.程序3和程序4是错误的。它们代表的函数为:y=0(x0)–1(x=0)1(x0)y=–1(x0)0(x=0)1(x0)结论:思考练习:分别画出一个程序的流程图第三章结构化程序的开发四、条件运算符C语言提供了一个简单的条件赋值语句或条件表达式。问题:当判断条件不论是“真”是“假”,均给同一变量赋值时。简化条件语句运算符书写方式:?:属三目运算符。第三章结构化程序的开发功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。一般形式:表达式1?表达式2:表达式3max=ab?a:b;当ab.maxa.否则maxb注意:1.条件运算符优先于赋值运算符.例:max=(ab?a:b)可去掉()第三章结构化程序的开发2.条件运算符低于关系运算符和算术运算符。3.条件运算符结合性为从右至左。例:max=ab?a:b+1max=ab?a:(b+1)并不是max=(ab?a:b)+1如:ab?a:cd?c:d相当于ab?a:(cd?c:d)第三章结构化程序的开发4.条件表达式不能取代一般的if语句,只有当if的两个分支为给同一变量赋值时才可替代if.if(ab)printf(%d,a);elseprintf(%d,b);可写成:printf(%d,ab?a:b);如:第三章结构化程序的开发5.表达式1、表达式2、表达式3的类型可以不同。#includestdio.hmain(){charch;scanf(%c,&ch);ch=(ch='A'&&ch='Z')?(ch+32):ch;printf(%c,ch);}例4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。运行结果如下:Aa第三章结构化程序的开发§3.4while循环结构1.形式:while(表达式)语句体2.执行过程:先判断表达式的值。若0.则执行其后面的语句体,否则while执行完毕。专门的当型循环语句––while语句第三章结构化程序的开发3.流程图:表达式语句0=0下一语句例如:intn=0;while(n=10)n=n+1;第三章结构化程序的开发语句中应有使表达式=0的语句。否则会出现无限循环–––死循环。若while后面的语句为复合语句,必须加{}语句有可能一次也不执行注:第三章结构化程序的开发一、强制类型转换形式:(类型名)(表达式)例如:(double)a将a转换为double(int)(x+y)将x+y转换为int(float)(5%3)将5%3转换为float§3.5数据类型转换第三章结构化程序的开发注:括号不能省略。另:(int)(x+y)否则:intx会理解为变量intx.则只会将x转成整型.若写:(int)x+y第三章结构化程序的开发2.转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。若有:floatx;则:(int)x;第三章结构化程序的开发例:#includestdio.hmain(){inta=15,b=20,c;floatx=16.82,y=2.74,z;z=(float)(a+b);c=(int)(x+y);printf(z=%f,c=%d,z,c);}运行结果:z=35.0000,c=19第三章结构化程序的开发二、系统自动转换C语言允许双精度、单精度、整型及字符数据之间混合运算10+'a'+1.5–8765.1234'b'是允许的。但有一个规则:先转换成同一类型,再计算。第三章结构化程序的开发doublefloat高低图中“”表示必定转换。如'a'+'b',先转换为int。结果为int。转换方法:longunsignedintchar,short即:既使是同一种类型也按转换。第三章结构化程序的开发图中“”:表示低,高型数据运算时,均先转换为高型。例:10+'a'+if–d/e其中:i––intf––floatd––doublee––long第三章结构化程序的开发10+'a':转为int,结果为intif:转为double,结果为double+:转为doubled/e:转为double-转为double则运算时:第三章结构化程序的开发§3.6不同类型数据的赋值符号=为赋值运算符。2.整型数据赋给实型变量,数值不变,但按实数形式存放.1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.赋值时,两边类型若不一致,则按以下规则转换:第三章结构化程序的开发4.将intlongint,进行符号扩展。即:符号扩展,低16位long的低16位。5.longintint则高16位截断。3.字符型数据赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)字符无符号整型变量,则存入低8位,高8位补零。第三章结构

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功