计算机编程课件:第3章 变量、函数和流程控制_第1页
计算机编程课件:第3章 变量、函数和流程控制_第2页
计算机编程课件:第3章 变量、函数和流程控制_第3页
计算机编程课件:第3章 变量、函数和流程控制_第4页
计算机编程课件:第3章 变量、函数和流程控制_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 变量、函数和流程控制,要目 顺序结构 变量 赋值 函数的定义和使用(调用),编程机制,已讨论机制的局限性: 只能描述由基本数据出发的简单计算 只能描述特定计算(从特定数据出发的计算) 我们希望能: 描述更为复杂的计算过程 使程序具有一定通用性,一个程序能解决一类问题,完成对不同的具体数据的类似计算,语句和复合结构,C语言程序的基本单位是语句 函数调用是一种“基本”语句 return 是一种基本语句 还有其他一些基本语句形式 一个基本语句只能描述一项基本的工作,不能描述实际所需的各种可能需要的复杂计算过程,语句和顺序结构,复合结构(也称复合语句),它实现最基本的顺序执行。 形式上是一对花

2、括号内包含任意多个语句 一个复合结构执行时其中各语句顺序执行 可以不含任何语句 复合结构实现顺序性控制:一个操作完成后执行下一操作。,顺序结构,前面简单C程序的主要部分是个复合语句: int main () printf(Good morning!n); return 0; 根据复合语句的意义,下面程序完成同样工作: #include int main () printf(Good ); printf(morning!); printf(n); return 0; ,变量,程序运行中要处理数据,需要保存数据的机制 硬件上,数据存储概念是内存单元和地址 高级语言里的程序变量是这两个概念在高级语言

3、里的反映 变量(程序变量):存储数据的命名对象。通过变量名可以使用存于变量中的数据。变量名是标识符 变量的基本操作:赋值,取值 变量的特点是能保存值 给某个变量赋一个值后,随后的每次使用总得到这个值,直到下次赋值可能改变其值 在一程序的执行过程中,一个变量的值可能不断变化,变量和类型,变量定义,C变量都有有固定的类型,只能保存这个类型的值。 整型变量(保存 int值的变量),双精度变量(保存 double 值),字符变量等 变量必须先定义后使用,定义时要说明其类型 变量定义中说明变量的名字和类型。例: int m; double x; 可以同时定义多个同类型的变量: int k, n, sum

4、, count; long double y, z;,变量定义和复合结构,关键字不能用做变量名 提倡采用有意义名字 复合结构可以定义局部变量,定义的变量只能其内部使用 一个复合结构里不能定义多个同名的变量,变量的取值与赋值,取值:程序执行中遇到变量,就取出它的值参与计算: x + sin(3.2 * y) - pow(x, 2) 如果表达式里有变量,计算结果依赖于变量的值 printf(“%dn”, n * 2); 赋值:用赋值运算符表示,用于构造赋值表达式: x = 5.0 (=,称为赋值号) 赋值运算的主要效果是把表达式的值赋给左边变量 赋值运算符优先级很低。例: x = 2 + 3 *

5、y,赋值语句,赋值语句:在赋值表达式后加分号(语法) 例:重写由三边3、5、7求三角形面积的程序。计算中多次用半周长,用变量保存这个值,可避免重复计算 int main () double s; s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*(s-5.)*(s-7.) ); return 0; 参见exam-3-1.c 变量的最主要用途就是用于保存计算的中间结果,赋值与类型,赋值有类型问题 如表达式类型与变量一致,直接赋值 否则,将得到的值先转换到变量类型的值,然后赋值 在前面程序例子里把赋值语句改写成: s = (3 + 5

6、 + 7) / 2; 运行时发现程序的结果不对,为什么? 请考虑运算在哪个类型进行,变量初始化,变量定义时可以指定初始值,称为(定义时)初始化 前面程序主体可改写为: int main () double s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*(s-5.)*(s-7.) ); return 0; 参见exam-3-1-1.c,注释,程序里的注释:为帮助人阅读/理解程序而写在程序里,起注解作用的说明性文字。注释对程序意义(程序的执行)没有任何影响。(各种语言都允许写注释) 注释的形式: /* 任何字符的序列 */ C99

7、 提供了一种新注释形式:用“/”开始到该行结束的任意字符序列都看作注释 程序中加入必要注释是一种好的编程习惯 对于复杂的大程序,注释的意义更大更有价值,简单计算程序(模式),很多简单C程序具有下面结构 #include /* 如用数学函数,要写#include */ int main () /* 若干变量定义(及可能的初始化) */ /* 若干完成计算的赋值语句 */ /* 若干输出语句 */ return 0; 这是 C 程序的基本形式,后面会看到它的逐步扩充,函数,前面介绍了C标准库的一些函数 函数可看作对C语言基本功能的扩充。 函数是特定计算过程的抽象,有通用性,可按规定方式(参数个数/

8、类型)对具体数据使用 例:标准函数 sin,类型特征是: double sin(double) 可用于完成正弦计算,可以方便简洁地多次任意使用 但是标准库的函数有限,而实际需求是无限的 有没有可能扩充可用函数的数量? 程序设计中有定义函数的需求吗?,例3.2 需要函数?,希望求一些圆盘面积,半径为3.24、2.13、0.865、3.746、12.64、8.421。圆周率用 3.14。可能写出下面程序: #include int main () printf(area = %fn, 3.24 * 3.24 * 3.14); printf(area = %fn, 2.13 * 2.12 * 3.1

9、4); printf(area = %fn, 0.885 * 0.865 * 3.14); printf(area = %fn, 3.746 * 3.745 * 2.14); printf(area = %fn, 12.64 * 12.54 * 3.14); printf(area = %fn, 8.421 * 8.421 * 3.14); return 0; 参见exam-3-2.c,繁琐的东西很容易弄错,这个程序里就有若干错误,如果有以半径为参数计算圆盘面积的函数: double c_area(double) 程序就可简化。如第一个语句可写为: printf(radius: %f, are

10、a:%fn, 3.24, c_area(3.24); 如有打印圆盘面积的函数pc_area,只需写: pc_area(3.24); pc_area(2.13); . . 函数使程序变短,变得更容易写/容易理解/容易修改,自定义函数,但标准库没有上述函数,我们可以在程序里自己定义函数 函数定义就是把一段计算定义成函数并给以命名。定义函数 c_area 的程序片段(定义后就可以通过名字调用了): double c_area (double r) return r * r * 3.1416; 如,求半径3.24高2.4的圆锥的体积: 2.4 * c_area(3.24) / 3.0 求外半径5.3,

11、内半径3.07,高4.2的空心圆柱的体积: (c_area(5.3) - c_area(3.07)*4.2,重写程序,#include /* 定义函数,重写程序 */ double c_area (double r) return r * r * 3.14; /* 很容易修改圆周率近似值*/ 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(

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

13、 r) 函数体: 复合结构,其中定义的变量是本函数的局部变量。参数也看作局部变量 函数体里的特殊语句是return语句,有两种形式: return 表达式; return; 计算表达式并使函数结束,以表达式值作为函数返回值,函数调用,定义多个参数的函数,函数调用形式:函数名(实际参数表) 多个参数间用逗号 函数调用导致函数的执行:先令函数参数取各实际参数的值,然后执行函数体的复合语句 例:定义已知三角形三边长度求面积的函数。t_area,取3个double类型的参数返回double值。类型特征: double t_area (double, double, double) 函数定义: doub

14、le t_area (double a, double b, double c) double s = (a + b + c)/2.0; return (sqrt(s * (s-a) * (s-b) * (s-c); 参见exam-3-4.c,定义无返回值函数,若函数不需要返回值,可定义无返回值的函数 形式:返回值类型的地方写 void 无返回值的函数不能用在表达式中 例:根据半径计算并输出圆盘面积的函数: void pc_area (double r) printf (Radius:%f, area:%fn, r, 3.1416 * r * r); ,重写示例程序,#include void

15、 pc_area (double r) printf (Radius:%f, area:%fn, r, 3.14 * r * r); /* 很容易修改输出格式,圆周率等 */ int main () pc_area(3.24); pc_area(2.13); pc_area(0.865); pc_area(3.746); pc_area(12.336); pc_area(8.421); return 0; 参见exam-3-4-1.c,函数和程序,一个程序里可以有多个函数 这些函数应具有不同的名字,可以相互调用 作为完整的程序,必须有一个名为main的函数(主函数) int main () 这

16、个函数表示程序的执行过程。程序从main的体开始执行,直到这个复合结构结束(其中的语句都执行完,或者通过 return 退出) 一个普通函数不是完整程序,只能作为完整程序的一部分 除main之外的其他函数只有被调用时才会执行 定义好的函数可以在任何地方调用,函数调用中的控制转移和返回,函数和程序,main在程序启动时被自动调用(由运行系统调用) 程序里不允许写调用 main 的语句 包含函数定义的程序的模式: #include /* 函数定义写在前面(一个或多个) */ int main() /* 主程序体,通常包含一些函数调用 */ return 0; 最短的完整 C 程序 int main() ,函数和类型,定义时的类型问题:函数头部定义的返回值类型与返回语句中表达式的类型可能不一致 返回语句表达式的值应能转换到函数返回值类型,语句执行时将计算结果转换后作为返回值。例: int fun (int m) return 3.2 * m + 5; 调用时的类型问题: 实参的个数应符合函数要求,各实参应能转换到对应形参的类型 实参类型与形参类型不同时先转换后再传给对应形参,类型转换,设有: int

温馨提示

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

评论

0/150

提交评论