函数和控制结构解读课件.ppt

上传人(卖家):晟晟文业 文档编号:4392982 上传时间:2022-12-05 格式:PPT 页数:62 大小:284.50KB
下载 相关 举报
函数和控制结构解读课件.ppt_第1页
第1页 / 共62页
函数和控制结构解读课件.ppt_第2页
第2页 / 共62页
函数和控制结构解读课件.ppt_第3页
第3页 / 共62页
函数和控制结构解读课件.ppt_第4页
第4页 / 共62页
函数和控制结构解读课件.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、第三章第三章变量、变量、函数和控制结构函数和控制结构已讨论机制的局限性:已讨论机制的局限性:只能描述由基本数据出发的简单计算;只能描述由基本数据出发的简单计算;只能描述特定计算。只能描述特定计算。我们希望我们希望:描述更为复杂的计算过程描述更为复杂的计算过程 使程序有一定通用性,能解决一类问题,完成对不使程序有一定通用性,能解决一类问题,完成对不同数据的类似计算同数据的类似计算因此需要有更多的程序机制。因此需要有更多的程序机制。3.1语句和复合结构语句和复合结构语句语句是程序的基本单位。是程序的基本单位。语法语法:语句的形式必须符合语言要求。:语句的形式必须符合语言要求。语义语义:形式合法的语

2、句表达了某种含义(程序执行时:形式合法的语句表达了某种含义(程序执行时的效果),称为语句的语义。的效果),称为语句的语义。函数调用是一种函数调用是一种“基本基本”语句。还有其他一些基本语语句。还有其他一些基本语句(下面要介绍)。句(下面要介绍)。为描述复杂计算,语言提供一些组合简单语句的结构,为描述复杂计算,语言提供一些组合简单语句的结构,实现对执行过程的控制。实现对执行过程的控制。复合结构(复合语句)复合结构(复合语句)语法:一对花括号,其中可有语法:一对花括号,其中可有0个或多个语句。个或多个语句。语义:顺序执行其中的各个语句。语义:顺序执行其中的各个语句。空复合结构中没有语句,执行时立即

3、结束。空复合结构中没有语句,执行时立即结束。前面简单前面简单C程序的主要部分:程序的主要部分:int main()printf(Good morning!n);return 0;3.2 变量的概念、定义和使用变量的概念、定义和使用硬件里数据存储概念是硬件里数据存储概念是内存单元内存单元和和地址地址,变量是它们,变量是它们在高级语言里的反映。在高级语言里的反映。变量变量:存储数据的命名对象。通过变量名可以使用存:存储数据的命名对象。通过变量名可以使用存于变量中的数据。于变量中的数据。变量名变量名是标识符。是标识符。基本操作:基本操作:赋值赋值,取值取值。变量能变量能保存保存值值。给某变量赋一个值

4、之后,每次使用它。给某变量赋一个值之后,每次使用它总得到这个值,直到下次赋值。总得到这个值,直到下次赋值。在程序执行中,一个变量的值可以变化。在程序执行中,一个变量的值可以变化。变量有变量有固定的类型固定的类型,只能保存这个类型的值只能保存这个类型的值。整型变量(保存整型变量(保存 int值的变量),双精度变量(保存值的变量),双精度变量(保存 double 值),字符变量等。值),字符变量等。变量定义变量定义:变量必须先定义后使用变量必须先定义后使用。定义所需信息:定义所需信息:变量名变量名和和类型类型。变量定义变量定义:int m;double x;可以同时定义多个同类型的变量:可以同时定

5、义多个同类型的变量:int k,n,sum,count;long double y,z;关键字关键字不能用做变量名。不能用做变量名。提倡采用有意义名字。提倡采用有意义名字。复合结构中可以定义局部的变量。复合结构中可以定义局部的变量。1)在内部使用;)在内部使用;2)变量定义应出现在所有语句之前:)变量定义应出现在所有语句之前:变量定义序列语句序列变量定义序列语句序列一个复合结构里不能定义多个同名的变量。一个复合结构里不能定义多个同名的变量。复合结构的执行:先定义变量,后顺序执行各语句。复合结构的执行:先定义变量,后顺序执行各语句。变量的名字变量类型35.70图 3.1变量的属性变量的值doub

6、lex1变量存储位置地址:0 x00002f30变量的取值与赋值变量的取值与赋值取值取值:计算中遇到变量,取其值参与计算:计算中遇到变量,取其值参与计算:x+sin(3.2*y)-pow(x,2)表达式里有变量,计算结果将依赖于变量值。表达式里有变量,计算结果将依赖于变量值。printf(“%dn”,n*2);赋值赋值:用用赋值运算符赋值运算符(=,赋值号赋值号)表示:)表示:x=5.0左边是赋值目标,右边是表达式。赋值运算的主要效左边是赋值目标,右边是表达式。赋值运算的主要效果是把表达式的值赋给左边变量。果是把表达式的值赋给左边变量。赋值运算符优先级很低。例:赋值运算符优先级很低。例:x=2

7、+3*y赋值语句赋值语句:赋值表达式后加分号(语法):赋值表达式后加分号(语法)是最基本的语句,完成程序里最重要的操作。是最基本的语句,完成程序里最重要的操作。程序中一般用程序中一般用赋值语句赋值语句描述赋值动作。描述赋值动作。赋值表达式也可独立存在(后面讨论)。赋值表达式也可独立存在(后面讨论)。例:重写由三边例:重写由三边3、5、7求三角形面积的程序。求三角形面积的程序。计算中多次用半周长,定义变量保存这个值,可避免计算中多次用半周长,定义变量保存这个值,可避免重复计算。重复计算。#include#include int main()double s;s=(3.+5.+7.)/2.;pri

8、ntf(Area:%fn,sqrt(s*(s-3.)*(s-5.)*(s-7.);return 0;变量主要用途之一:变量主要用途之一:保存计算的中间结果保存计算的中间结果。赋值运算符的值与结合性赋值运算符的值与结合性 赋值运算也有值,就是右边表达式的值。赋值运算也有值,就是右边表达式的值。赋值表达式的值通常不用。赋值表达式的值通常不用。赋值表达式的值可以用。例(赋值表达式的值可以用。例(不提倡不提倡):y=(x=5)+8;人们有时用同一表达式为多个变量赋值。人们有时用同一表达式为多个变量赋值。y=(z=(x=1.0);赋值运算符从右向左结合。上面语句可以简化(也称赋值运算符从右向左结合。上面

9、语句可以简化(也称多重赋值多重赋值):):y=z=x=1.0;赋值与类型赋值与类型 被赋值变量有类型(由变量定义确定);被赋值变量有类型(由变量定义确定);赋值号右边表达式的值有类型。赋值号右边表达式的值有类型。规定规定:若表达式值与被赋值变量类型不同,该值先转:若表达式值与被赋值变量类型不同,该值先转换到变量类型的值,然后赋值。换到变量类型的值,然后赋值。在前面程序例子里把赋值语句改写成:在前面程序例子里把赋值语句改写成:s=(3+5+7)/2;运行时发现程序的结果不对。运行时发现程序的结果不对。#include#include int main()double s=(3.+5.+7.)/2

10、.;printf(Area:%fn,sqrt(s*(s-3.)*(s-5.)*(s-7.);return 0;变量初始化变量初始化定义时指定初始值。可用数值或者数值表达式为类型定义时指定初始值。可用数值或者数值表达式为类型合适的变量做合适的变量做初始化初始化:初始化只能一次对一个变量做。初始化只能一次对一个变量做。赋值表达式有值,下面是合法语句:赋值表达式有值,下面是合法语句:x=2.0;y=(x=3.0)+x;执行后执行后y 的值是什么?的值是什么?赋值与数学中的赋值与数学中的“等于等于”完全不同。例:完全不同。例:x=x+1;“x=x+1”在数学里为矛盾。上语句则合法(常用)。在数学里为矛

11、盾。上语句则合法(常用)。这个问题没有回答,第二个语句不正确。这个问题没有回答,第二个语句不正确。C语言未规定加法对两个运算对象的求值顺序,语言未规定加法对两个运算对象的求值顺序,“这种这种表达式的结果无定义表达式的结果无定义”。程序中的注释程序中的注释注释:为帮助人阅读注释:为帮助人阅读/理解程序而写的起注解作用的说理解程序而写的起注解作用的说明性文字。注释对程序意义(执行)没有影响。(各明性文字。注释对程序意义(执行)没有影响。(各种语言都允许写注释)种语言都允许写注释)形式:形式:/*任何字符的序列任何字符的序列*/程序里的注释相当于一个空格。程序里的注释相当于一个空格。程序中加入必要注

12、释是一种好的编程习惯。对于复杂程序中加入必要注释是一种好的编程习惯。对于复杂的大程序,注释的意义更大。的大程序,注释的意义更大。简单计算程序简单计算程序#include/*如用数学函数,还要写如用数学函数,还要写#include */int main()/*若干变量定义(及可能的初始化)若干变量定义(及可能的初始化)*/*若干计算和赋值语句若干计算和赋值语句*/*若干输出语句若干输出语句*/return 0;程序的基本形式,后面逐步扩充程序的基本形式,后面逐步扩充3.3 函数定义(初步)函数定义(初步)例:求一些圆盘的面积,圆盘半径分别为:例:求一些圆盘的面积,圆盘半径分别为:3.24、2.1

13、3、0.865、3.746、12.3364、8.421设圆周率用设圆周率用 3.1416。可写出下面程序:。可写出下面程序:#include int main()printf(radius:%f,area:%fn,3.24,3.24*3.24*3.1416);printf(radius:%f,area:%fn,2.13,2.13*2.12*3.1415);/*实际程序里不能有省略号实际程序里不能有省略号*/繁琐的东西很容易弄错,上面程序就有错。繁琐的东西很容易弄错,上面程序就有错。如果有以半径为参数计算圆盘面积的函数:如果有以半径为参数计算圆盘面积的函数:double c_area(doubl

14、e)程序就可简化。如第一个语句可写为:程序就可简化。如第一个语句可写为:printf(radius:%f,area:%fn,3.24,c_area(3.24);如有打印圆盘面积的函数如有打印圆盘面积的函数pc_area,只需写:,只需写:pc_area(3.24);pc_area(2.13);.函数能使程序变短,易写函数能使程序变短,易写/易理解易理解/易修改易修改函数可看作对函数可看作对C语言基本功能的扩充。语言基本功能的扩充。函数是特定计算过程的抽象,有通用性,可按规定方函数是特定计算过程的抽象,有通用性,可按规定方式(参数个数式(参数个数/类型)对具体数据使用。类型)对具体数据使用。例:

15、标准函数例:标准函数 sin,类型特征是:,类型特征是:double sin(double)标准函数有限,需求无限标准函数有限,需求无限程序设计中有定义函数的需求。程序设计中有定义函数的需求。函数定义函数定义把一段计算定义成函数并给以命名。把一段计算定义成函数并给以命名。定义函数定义函数 c_area 的程序片段:的程序片段:double c_area(double r)return r*r*3.1416;定义后就可以通过名字调用,用在任何需要的地方。定义后就可以通过名字调用,用在任何需要的地方。半径半径3.24高高2.4的圆锥体积:的圆锥体积:2.4*c_area(3.24)/3.0外半径外

16、半径5.3,内半径,内半径3.07,高,高4.2的空心圆柱:的空心圆柱:(c_area(5.3)-c_area(3.07)*4.2#include /*定义函数,重写程序定义函数,重写程序*/double c_area(double r)return r*r*3.1416;/*很容易很容易修改圆周率近似值修改圆周率近似值*/int main()printf(Radius:%f,area:%fn,3.24,c_area(3.24);printf(Radius:%f,area:%fn,2.13,c_area(2.13);printf(Radius:%f,area:%fn,0.865,c_area(

17、0.865);printf(Radius:%f,area:%fn,3.746,c_area(3.746);printf(Radius:%f,area:%fn,12.3364,c_area(12.3364);printf(Radius:%f,area:%fn,8.421,c_area(8.421);return 0;函数定义函数定义函数头部函数头部说明函数名和类型特征。包括:函数返回值说明函数名和类型特征。包括:函数返回值类型,函数名,参数表。类型,函数名,参数表。参数表参数表声明参数的个数和各参数的类型。声明参数的个数和各参数的类型。参数命名是为了在函数里使用实际参数的值。参数命名是为了在函数

18、里使用实际参数的值。c_area定义的函数头部是:定义的函数头部是:double c_area(double r)函数体:复合结构,其中定义的变量是本函数的函数体:复合结构,其中定义的变量是本函数的局部局部变量变量。参数也看作局部变量参数也看作局部变量。形式:形式:函数头部函数头部 函数体函数体函数体里的特殊语句:函数体里的特殊语句:return/返回语句:返回语句:return 表达式表达式;return;使函数结束:先算使函数结束:先算表达式表达式,以其值作为函数返回值。,以其值作为函数返回值。函数调用函数调用函数名函数名(实际参数表实际参数表)多个参数用逗号分隔。多个参数用逗号分隔。函数

19、的执行:函数体的复合语句在参数具有特定实参函数的执行:函数体的复合语句在参数具有特定实参值的情况下开始执行。值的情况下开始执行。多个参数的函数多个参数的函数参数表里写多对类型参数表里写多对类型/参数,逗号分隔。参数,逗号分隔。例例:定义已知三角形三边长度求面积的函数。:定义已知三角形三边长度求面积的函数。t_area,3个个double参数返回参数返回double。类型特征:。类型特征:double t_area(double,double,double)函数定义可写为:函数定义可写为:double t_area(double a,double b,double c)double s=(a+b

20、+c)/2.0;return(sqrt(s*(s-a)*(s-b)*(s-c);定义无返回值的函数定义无返回值的函数若函数不需要返回值,可定义无返回值的函数。若函数不需要返回值,可定义无返回值的函数。形式:返回值类型处写形式:返回值类型处写 void。执行到达作为函数体末尾时函数结束。执行到达作为函数体末尾时函数结束。无返回值的函数不能用在表达式中。无返回值的函数不能用在表达式中。例:根据半径计算并输出圆盘面积的函数:例:根据半径计算并输出圆盘面积的函数:void pc_area(double r)printf(Radius:%f,area:%fn,r,3.1416*r*r);#include

21、 void pc_area(double r)printf(Radius:%f,area:%fn,r,3.1416*r*r);/*很容易修改输出格式,圆周率等很容易修改输出格式,圆周率等*/int main()pc_area(3.24);pc_area(2.13);pc_area(0.865);pc_area(3.746);pc_area(12.3364);pc_area(8.421);return 0;函数和程序函数和程序完整程序必须有一个名为完整程序必须有一个名为main的函数(主函数)的函数(主函数)。int main()函数函数main表示程序的执行过程。程序从表示程序的执行过程。程序

22、从main的的体开始体开始执行,直到该复合结构结束(语句执行完或者退出)执行,直到该复合结构结束(语句执行完或者退出)其他函数不经调用就不会执行。其他函数不经调用就不会执行。main在程序启动时被在程序启动时被自动调用(由运行系统调用)。自动调用(由运行系统调用)。程序里不允许调用程序里不允许调用main。函数与类型函数与类型返回语句中返回语句中表达式表达式的值应能转换到函数返回值类型,语的值应能转换到函数返回值类型,语句执行时将计算结果(转换后)作为返回值。例:句执行时将计算结果(转换后)作为返回值。例:int fun(int m)return 3.2*m+5;定义时的类型问题定义时的类型问

23、题:头部定义返回值类型与返回语句:头部定义返回值类型与返回语句中表达式的类型可能不一致。中表达式的类型可能不一致。调用时的类型问题调用时的类型问题:实参个数应符合函数定义要求,各实参应能转换到对应实参个数应符合函数定义要求,各实参应能转换到对应形参的类型。当实参类型与形参类型不同时,先转换为形参的类型。当实参类型与形参类型不同时,先转换为所需类型的值后再送给形参。所需类型的值后再送给形参。int fun(int m)return 3.2*m+5;语句:语句:x=fun(2.5+6);设设x是双精度变量,语句是双精度变量,语句执行时有几次转换?执行时有几次转换?类型转换的各种情况:类型转换的各种

24、情况:计算中可能出现类型转换计算中可能出现类型转换 赋值时可能出现类型转换赋值时可能出现类型转换 参数传递时可能出现类型转换参数传递时可能出现类型转换 产生函数返回值时可能出现类型转换产生函数返回值时可能出现类型转换 t图 3.2 函数的调用、执行与返回函数调用点,控制权转移到函数,原程序等待函数执行完毕,控制返回主程序,原程序继续程序的执行函数的执行认识函数调用认识函数调用包含一个包含一个/多个函数定义的程序模式:多个函数定义的程序模式:#include /*函数定义写在这里函数定义写在这里*/int main()/*主程序体,包含函数调用主程序体,包含函数调用*/建议写程序时采用这种形式。

25、建议写程序时采用这种形式。3.4 关系表达式关系表达式/逻辑表达式逻辑表达式/条件表达式条件表达式已有机制的编程能力还很弱。已有机制的编程能力还很弱。例如需要写一个函数,返回两参数中的较大值:例如需要写一个函数,返回两参数中的较大值:double dmax(double,double)需要:需要:比较数据大小(判断)比较数据大小(判断)根据判断结果决定做什么(分情况处理)根据判断结果决定做什么(分情况处理)本节主要讨论如何描述逻辑判断,判断的结果如何确本节主要讨论如何描述逻辑判断,判断的结果如何确定,怎样利用逻辑判断控制计算进程。定,怎样利用逻辑判断控制计算进程。关系运算符关系运算符/关系表达

26、式关系表达式关系运算符共关系运算符共 6 个:个:=大于大于/大于等于大于等于/小于等于小于等于/小于小于=!=等于等于/不等于不等于关系运算符可用于算术类型。关系运算符可用于算术类型。如果被比较对象的类型不同,按算术运算规则转换后再如果被比较对象的类型不同,按算术运算规则转换后再做判断。关系的成立与否(真做判断。关系的成立与否(真/假):假):3.2=2.9 y!=x+1优先级低于二元算术运算符,高于赋值;优先级低于二元算术运算符,高于赋值;=、!=低于低于其他四个运算符。自左向右结合,未规定对象计算顺其他四个运算符。自左向右结合,未规定对象计算顺序。序。关系表达式运算结果关系表达式运算结果

27、C语言没有专门表示关系运算结果的类型,关系运算的语言没有专门表示关系运算结果的类型,关系运算的结果为结果为 int,成立,成立/不成立时值分别是不成立时值分别是1/0。(3.24=3=2条件运算符条件运算符“?:”。条件表达式的语法形式:。条件表达式的语法形式:表达式表达式1?表达式表达式2:表达式表达式3语义(计算方式特殊):语义(计算方式特殊):先算先算表达式表达式1(条件);(条件);条件成立时算条件成立时算表达式表达式2,以其结果作为条件表达式的值,以其结果作为条件表达式的值 条件不成立算条件不成立算表达式表达式3,以其值作为条件表达式的值,以其值作为条件表达式的值注意:条件成立时不算

28、注意:条件成立时不算表达式表达式3;不成立时不算;不成立时不算表达式表达式2函数函数 dmax 的定义:的定义:double dmax(double x,double y)return x y?x:y;符号函数符号函数 sign对应的对应的C函数:函数:double sign(double x)return x 0?1:(x=0?0:-1);特殊的运算顺序:特殊的运算顺序:z=x!=0?y/x:1;当当x值非值非0时,变量时,变量z将被赋予将被赋予y/x的值,否则的值,否则z赋值赋值1。复杂条件的描述:逻辑表达式复杂条件的描述:逻辑表达式复杂关系,如:复杂关系,如:3x5 时时 z 取值取值

29、2,否则取值,否则取值 1。可用关系表达式和条件表达式描述:可用关系表达式和条件表达式描述:z=(x=3?(x=3&x 1.0求值时不会出现除求值时不会出现除0问题。问题。例:根据运算符优先级关系,逻辑表达式:例:根据运算符优先级关系,逻辑表达式:(x+3)(y+z)&(y12)写为下面形式意义不变。写为下面形式意义不变。x+3 y+z&y 12例:判断变量例:判断变量 year 的值是否表示闰年的年份。的值是否表示闰年的年份。year%4=0&year%100!=0|year%400=0为便于阅读,可适当加括号。为便于阅读,可适当加括号。人们常在程序里定义完成判断的函数。通常令判断函人们常在

30、程序里定义完成判断的函数。通常令判断函数返回数返回1/0值值(int)表示条件成立与否。表示条件成立与否。判断年份是否闰年的函数:判断年份是否闰年的函数:int IsLeapYear(int year)return(year%4=0&year%100!=0|year%400=0?1:0);逻辑表达式的值就是逻辑表达式的值就是1和和0。函数可简写为:。函数可简写为:int IsLeapYear(int year)return(year%4=0&year%100!=0|year%400=0);使用实例,输出二月天数的语句:使用实例,输出二月天数的语句:printf(Days of Feb.is%d

31、.n,IsLeapYear(year)?29:28);3.5语句与控制结构语句与控制结构 基本语句包括赋值、基本语句包括赋值、return等,完成基本操作。等,完成基本操作。复杂计算要通过许多基本操作完成,操作必须按照一复杂计算要通过许多基本操作完成,操作必须按照一定次序进行。定次序进行。为描述基本操作的执行过程(流程),语言必须提供为描述基本操作的执行过程(流程),语言必须提供描述执行流程的机制(控制结构)。描述执行流程的机制(控制结构)。硬件层次的流程控制:顺序和转移指令。硬件层次的流程控制:顺序和转移指令。低级流程控制的缺点:随意性低级流程控制的缺点:随意性/程序难以理解。程序难以理解。

32、程序设计实践总结出三种基本流程模式。程序设计实践总结出三种基本流程模式。成立 不成立 不成立 操作 1 条件 条件 成立 操作 1 操作 2 操作 操作 2 (a)顺序执行 (b)选择执行 (c)重复执行图 3.4程序控制流程的三种基本模式这里给出了选择和重复的典型情况,还有其他情况这里给出了选择和重复的典型情况,还有其他情况特点:只有一个开始点特点:只有一个开始点/一个结束点。整体可作为抽象一个结束点。整体可作为抽象操作嵌入各种模式中,形成更复杂的流程。具有层次操作嵌入各种模式中,形成更复杂的流程。具有层次性,易分解,意义较易把握。性,易分解,意义较易把握。这几个流程模式称为这几个流程模式称

33、为结构化的流程模式结构化的流程模式。已证明,这三种模式对写任何程序都够了。已证明,这三种模式对写任何程序都够了。复合结构复合结构是一种控制结构,实现顺序执行。是一种控制结构,实现顺序执行。C 提供了很丰富的控制机制,包括对应上面各种模式的提供了很丰富的控制机制,包括对应上面各种模式的结构化控制结构结构化控制结构。控制结构也被看作语句,也称控制结构也被看作语句,也称控制语句控制语句。可以写在任何。可以写在任何能写语句的地方。能写语句的地方。条件语句(条件语句(if 语句)语句)根据条件判断决定操作是否执行根据条件判断决定操作是否执行/选择执行。形式:选择执行。形式:if(条件条件)语句语句if(

34、条件条件)语句语句1 else 语句语句2条件条件是表达式,其值作为控制执行的逻辑值。是表达式,其值作为控制执行的逻辑值。语义:语义:形式一:求值形式一:求值条件条件,条件成立时执行,条件成立时执行语句语句;否则结束;否则结束形式二:求值形式二:求值条件条件,条件时执行,条件时执行语句语句1;否则执行;否则执行语句语句2条件语句中的条件语句中的语句语句常常用复合结构,也可以是条件语句常常用复合结构,也可以是条件语句注意条件语句与条件表达式的区别注意条件语句与条件表达式的区别例例:改造:改造pc_area,增加错误参数的处理。增加错误参数的处理。参数值为负时输出一个参数值为负时输出一个“错误信息

35、错误信息”:void pc_area(double r)if(r 0)d=sqrt(d);printf(Two real roots:%f,%fn,(-b+d)/2./a,(-b-d)/2./a);else if(d=0)printf(One real root:%fn,-b/2./a);else printf(No real rootn);这里假定这里假定a不为不为0,处理,处理a为为0也不困难(加判断处理)也不困难(加判断处理)if 语句嵌套问题语句嵌套问题:if 有两种形式,嵌套可能出问题。问有两种形式,嵌套可能出问题。问题在条件后直接出现条件语句时。例:题在条件后直接出现条件语句时。例

36、:if(x 0)if(y 1)z=1;else z=2;/*属于哪个属于哪个 if?*/规定:规定:else部分属于前面最近的无对应部分属于前面最近的无对应 else 的的 if 语句语句。上例的形式易引起误解。上例的形式易引起误解。要使要使else部分属于外层部分属于外层if,可,可用:用:if(x 0)if(y 1)z=1;else z=2;循环语句(循环语句(1):):while 语句语句循环控制结构实现特定条件下一些操作的重复执行。循环控制结构实现特定条件下一些操作的重复执行。例例:写出求:写出求 的程序段。可写为:的程序段。可写为:sum=0;n=1;while(n=100)sum=

37、sum+n*n;n=n+1;典型形式:循环前给一些变量初值;循环中修改某些变典型形式:循环前给一些变量初值;循环中修改某些变量。用包含不断变化的变量的条件控制循环是否结束量。用包含不断变化的变量的条件控制循环是否结束循环体可能多次执行,引起很长计算,甚至无限长。如循环体可能多次执行,引起很长计算,甚至无限长。如何分析问题何分析问题/写出循环很重要(第写出循环很重要(第4章)。章)。nn21100循环语句(循环语句(1):):while 语句语句C语言有多种循环结构,语言有多种循环结构,while 语句最简单,形式:语句最简单,形式:while(条件条件)语句语句语句语句为为循环体循环体,常用复

38、合语句,也可以是循环(构成,常用复合语句,也可以是循环(构成多重循环)。多重循环)。语义:语义:(1)求值求值条件条件表达式,将它的值作为逻辑值表达式,将它的值作为逻辑值(2)若第若第1步得到值步得到值0则循环结束;否则则循环结束;否则(3)执行作为循环体的执行作为循环体的语句语句,而后回到,而后回到(1)例例:写程序从摄氏:写程序从摄氏 0 度到度到 300 度,每度,每 20 度一项,输出度一项,输出摄氏温度与华氏温度的对照表。摄氏温度与华氏温度的对照表。简单想法:简单想法:#include int main()printf(C:0,F:%fn,0.0);printf(C:20,F:%fn

39、,20.0*9/5+32);printf(C:40,F:%fn,40.0*9/5+32);/*还有还有13行类似代码行类似代码*/每项写一个输出语句不理想。每项写一个输出语句不理想。10000项怎么办?项怎么办?重复性工作应当通过循环处理!重复性工作应当通过循环处理!考虑写循环:考虑写循环:需要对一系列摄氏温度求对应的华氏温度。这些温度需要对一系列摄氏温度求对应的华氏温度。这些温度可以按统一的规律一个个算出来。(变化的量)可以按统一的规律一个个算出来。(变化的量)用一个变量保存摄氏温度值用一个变量保存摄氏温度值循环前赋初始值循环前赋初始值 0,每次循环加,每次循环加 20,直到,直到 300每

40、次输出一行,显示当时摄氏华氏温度对照每次输出一行,显示当时摄氏华氏温度对照这形成了一套解决问题的方案。这形成了一套解决问题的方案。摄氏摄氏/华氏温度转换公式:华氏温度转换公式:F=C*9/5+32临时变量取名临时变量取名 c,结果用双精度类型表示。,结果用双精度类型表示。#include int main()int c=0;while(c=300)printf(C=%d,F=%fn,c,c*9.0/5.0+32.0);c=c+20;return 0;程序产生程序产生16行输出,其中第一行是:行输出,其中第一行是:C=0,F=32.000000循环语句(循环语句(2):):for 语句语句例,用

41、例,用for语句重写摄氏语句重写摄氏/华氏温度对照表程序:华氏温度对照表程序:#include int main()int c;for(c=0;c=300;c=c+20)printf(C=%d,F=%fn,c,c*9.0/5.0+32.0);return 0;for功能强大,覆盖了功能强大,覆盖了while语句功能语句功能,循环控制信息,循环控制信息集中在语句前部,集中在语句前部,常使程序常使程序比较紧凑清晰。使用广泛。比较紧凑清晰。使用广泛。最常见的循环模式:最常见的循环模式:1)变量赋初值;变量赋初值;2)检查循环条件;检查循环条件;3)成立时执行循环体;成立时执行循环体;4)更新变量并继

42、续更新变量并继续循环语句(循环语句(2):):for 语句语句for 结构是这种常见循环模式的规范化。形式:结构是这种常见循环模式的规范化。形式:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句执行(语义):执行(语义):1)求值)求值表达式表达式1(只做一次),用于设变量初值(只做一次),用于设变量初值2)求值)求值表达式表达式2,值为,值为0时循环结束(循环条件)时循环结束(循环条件)3)执行)执行语句语句4)求值)求值表达式表达式3,通常用于循环变量更新,通常用于循环变量更新5)转到)转到 2)for头部各表达式都可缺,但必须保留分号。头部各表达式都可缺,但必须保留分号。

43、缺缺表达式表达式1/3表示没有动作;缺表示没有动作;缺表达式表达式2表示条件为表示条件为1。这。这时可用其他机制退出循环,如从循环中直接时可用其他机制退出循环,如从循环中直接return。3.6 循环的常用机制循环的常用机制增增/减量运算减量运算将变量值加将变量值加/减减 1。有前。有前/后置写法:后置写法:将将x的值加的值加1将将x的值减的值减1 +x x+-x x-以增量为例,两种写法在加以增量为例,两种写法在加 1 方面相同,但值不同:方面相同,但值不同:+x 值是增量后的值;值是增量后的值;x+的的值是增量前的值。例:值是增量前的值。例:x=2;y=x+2;z=+x+2;1)语句)语句

44、“x+;”和语句和语句“x=x+1;”x为简单变量时意义相同。非简单变量可能产生不同结为简单变量时意义相同。非简单变量可能产生不同结果:果:“x+;”只算只算x一次,一次,“x=x+1;”算算x两次两次。2)x可以是实数类型,计算中做类型转换。可以是实数类型,计算中做类型转换。逗号运算符逗号运算符 形式:形式:表达式表达式1,表达式表达式2执行时先求值执行时先求值表达式表达式1,后求值,后求值表达式表达式2,以,以表达式表达式2的的值作为整个逗号表达式的值。值作为整个逗号表达式的值。优先级最低(低于赋值),从左向右结合。优先级最低(低于赋值),从左向右结合。主要用在主要用在 for 头部做变量

45、初置和更新,用于做多个变量头部做变量初置和更新,用于做多个变量赋值或更新。例(求平方和):赋值或更新。例(求平方和):for(sum=0,n=1;n=100;+n)sum=sum+n*n;实现二元运算符操作的赋值运算符实现二元运算符操作的赋值运算符常见常见“sum=sum+n*n;”形式的赋值。形式的赋值。为方便描述,为方便描述,C语言为许多二元运算符提供了赋值符。语言为许多二元运算符提供了赋值符。算术运算符都有对应赋值运算符:算术运算符都有对应赋值运算符:+=-=*=/=%=赋值运算符使用的例子(求平方和):赋值运算符使用的例子(求平方和):for(sum=0,n=1;n 0)if(y 1)z=1;else;else z=2;写写 if 语句的一个常见错误:语句的一个常见错误:if(xxxxx).;else.只有在程序设计实践中才能学好程序设计:只有在程序设计实践中才能学好程序设计:1)模仿好的范例;)模仿好的范例;2)自己动手动脑,反复实践从问题出发做出程序的整)自己动手动脑,反复实践从问题出发做出程序的整个过程;个过程;3)多想想自己的程序做得怎么样,能不能做得更好。)多想想自己的程序做得怎么样,能不能做得更好。只有学会怎样做好小程序,才能做出大程序只有学会怎样做好小程序,才能做出大程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(函数和控制结构解读课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|