第5讲结构化程序设计(Part II).ppt
《第5讲结构化程序设计(Part II).ppt》由会员分享,可在线阅读,更多相关《第5讲结构化程序设计(Part II).ppt(77页珍藏版)》请在麦多课文档分享上搜索。
1、程序设计-2005年秋,1,第5讲 结构化程序设计(Part II),周水庚2005年10月12日,程序设计-2005年秋,2,提要,C程序简介 函数基础知识 文件的简单用法 简单程序设计实例,程序设计-2005年秋,3,提要,C程序简介 函数基础知识 文件的简单用法 简单程序设计实例,程序设计-2005年秋,4,C程序简介,一个C程序可由若干个源程序文件组成 一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成一个函数由数据定义部分和执行语句组成 一个源程序文件也是可独立编译的单位,所以C程序可以按源程序文件分别编写、分别编译,程序设计-2005年秋,5,程序设计-2005年秋,6
2、,C语句,C语句是C程序的基本组成单元 C语句可以分为以下5类 控制语句 函数调用语句 表达式语句 空语句 复合语句,程序设计-2005年秋,7,C语句(续),控制语句有9种 if() else (条件语句) for() (循环语句) while() (循环语句) do while() (循环语句) continue (结束本次循环语句 break (中止执行switch或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句),程序设计-2005年秋,8,C语句(续),函数调用语句 由一次函数调用加一个分号构成一个语句 表达式语句 由一个表达式加
3、一个分号构成一个语句,如赋值语句 空语句 只有一个分号的语句,它什么也不做 复合语句 用 把一些语句括起来构成,又称分程序,程序设计-2005年秋,9,C程序的三种基本结构,顺序结构 条件控制结构 循环结构,程序设计-2005年秋,10,提要,C程序简介 函数基础知识 正文文件的简单用法 简单程序设计实例,程序设计-2005年秋,11,函数基础知识,结构化程序设计中,将复杂的功能分解成若干简单的子功能,并用函数实现子功能,用调用函数实现子功能要求 函数是一个实现指定功能、逻辑上独立的代码段 对函数使用者来说,把它看作“黑盒”,只需知道要传送给函数的数据(输入),和函数执行后能得到什么结果(输出
4、) 函数还可以定义局部对象,使函数在逻辑上作为程序的一个相对独立单位,不受主函数或其他函数对程序对象命名的影响,程序设计-2005年秋,12,函数基础知识(续),函数可带形参,使函数执行时,操作对象、求值方式等可随不同调用的需要而改变。所以函数也可被抽象为一个计算模式或操作模式 函数为程序的层次构造和开发提供支持,使设计新程序能在已有函数基础上构造功能更强的函数和程序 一个C程序以 main()函数作为程序的主函数。程序运行时,从它开始执行 在C语言中,函数不能嵌套定义,一个函数并不从属于另一个函数 除不能调用 main() 函数外,其它函数可以相互调用,程序设计-2005年秋,13,函数库,
5、把一些公用的、基本的计算功能所对应的函数集中起来,构成一个库,我们称之为函数库,相应的函数成为库函数 函数库中的函数具有预先定义的、标准的输入、输入接口 C语言中定义了一些基本的标准函数 编程环境工具厂商(Microsoft、Borland等)往往提供更多的函数供编程者使用,程序设计-2005年秋,14,函数库(续),C语言使用头文(header file,即*.h文件)对函数库中的函数进行定义和说明 函数库中的函数经编译后,绑定在一起件,构成一个库文件(library file ,即*.lib文件) C程序调用C语言或者编程环境提供的函数时,要在程序中include相应的头文件;在产生执行文
6、件时,需要与库文件中相应的目标函数代码连接 为了使用方便,C语言按功能分类,提供了大量函数库,每个函数库都有自己的头文件,程序设计-2005年秋,15,库函数的使用,使用相应库函数的程序都要在使用之前写上包含其头文件的预处理命令 常用的头文件 stdio.h (输入输出库函数) math.h、stdlib.h、float.h (数学库函数) time.h (时间库函数) ctype.h (字符分类和转换库函数) string.h (内存缓冲区和字符串处理库函数) graphics.h (图形处理库函数) malloc.h、stdlib.h (内存动态分配库函数) signal.h、proces
7、s.h (进程控制库函数),程序设计-2005年秋,16,实例,实例1:时间函数使用 实例2:随机函数使用(1) 实例3:随机函数使用(2),程序设计-2005年秋,17,#include #include void main() struct tm *tmNow; /* 定义一个时间结构指针变量 */long secsNow; /* 定义以秒为单位的记录时间的变量 */char *strNow; /* 时间字符串表示的首字符指针 */time( ,程序设计-2005年秋,18,#include #include #include void main() int k; long now;sra
8、nd(time( /* 调用随机函数 */ ,程序设计-2005年秋,19,#include #include #include void main() int i; srand(time(NULL); for(i=1; i=10000; i+) printf(”%10d”, 1+rand()%6);if(i%5=0)printf(“n”); ,程序设计-2005年秋,20,函数定义,函数定义的一般形式为,类型区分符 函数名(形式参数说明表)说明和定义部分语句序列,程序设计-2005年秋,21,函数定义(续),类型区分符用于标识函数执行结果返回值的类型 当函数执行不返回值时,习惯用void来标
9、记 当函数返回int型值时,类型区分符int可以省略 函数名是一个标识符,一个C程序有且只有一个main()函数,其它的函数名可以随意命名,程序设计-2005年秋,22,函数定义(续),函数名之后括号内的形式参数说明表是按需要而定 没有形参的函数,也就没有形参说明表,常用void代之,但函数名之后的一对圆括号不可省略 当函数有多个形参时,形参说明之间用逗号分隔,每个形参说明指定形参的类型和形参名,程序设计-2005年秋,23,函数定义(续),最外层花括号“”和“”括住的部分是函数体 在函数体的前面可有函数需要的程序对象的说明和定义 函数体内定义的变量是局部变量,只能在函数体内引用它们 说明和定
10、义之后是由语句序列组成的执行代码,程序设计-2005年秋,24,例子1,求两个数中最小值的函数min(),double min(double x, double y) /* 返回 double 型值,有两个形参 x,y,都为 double 型的 */ /* 函数返回x和y中的小者的值 */return x y ? x : y; ,return语句的执行将结束函数的执行C语言的return语句有两种形式:return;用于不返回值的函数体中return 表达式;用于有返回值的函数体中,程序设计-2005年秋,25,例子2,求两个正整数最大公因子的函数gcd() 两个正整数a和b的最大公因子有性质
11、: gcd(a, b) = gcd(a-b, b), 如a b; gcd(a, b) = gcd(a, b-a), 如a b; gcd(a, b) = a, 如a = b。,程序设计-2005年秋,26,int gcd(int a, int b) while( a != b)if(a b) a -= b;else b -= a;return a;,第2解法,程序设计-2005年秋,27,步骤: 求余数 求a除b的余数r 判结束 如r等于0,b为最大公约数 替换 用b置a,r置b,并回到步骤求余数,第2解法,程序设计-2005年秋,28,int gcd(int a, int b) int r;w
12、hile(1) if(r = a % b) = 0) break;a = b; b = r;return b;,程序设计-2005年秋,29,int gcd(int a, int b) int r = a;do a = b; b = r; r = a % b; while (r);return b;,程序设计-2005年秋,30,函数定义(续),C语言也允许在函数名后的圆括号内只给出各形参的名,随后才指定各形参的类型,但这种写法在C+中已不允许 double min(x, y) double x, y; return x y ? x : y; C语言还允许函数体为空的函数 dummy() /*
13、 或 dummy(void) */ ,程序设计-2005年秋,31,函数调用,函数被定义以后,凡要实现函数功能的地方,就可简单地通过函数调用来完成 函数调用的一般形式为 函数名(实在参数表) 实在参数,简称实参。函数调用时的实参按它们出现的顺序与函数定义中的形参一一对应,并要求实参类型与其对应的形参类型相一致,程序设计-2005年秋,32,函数调用(续),函数调用有两种方式 传值调用(call by value) 把实参的值传给被调用函数的参数(形参)。这时,被调用函数对参数的改变,不影响调用函数实参的原始值 传引用调用(call by reference) 把实参的地址传给被调用函数的参数(
14、形参)地址。这时,被调用函数对参数的改变,将影响到调用函数实参的原始值,程序设计-2005年秋,33,函数调用(续),对double min(double x, double y)的函数调用 w = min(u, v); 函数调用min(u, v)就是对函数min()的调用,它提供了两个实参u和v,分别对应形参x和y 如果调用无形参的函数,这时函数的调用形式变为 函数名() 其中函数名之后的一对圆括号是不能省略的,程序设计-2005年秋,34,函数调用(续),按函数调用在程序中的作用,有两种不同类型的应用 函数调用只是利用函数所完成的功能。此时,将函数调用作为一个独立的语句。这种应用不要求或无
15、视函数的返回值 如程序中经常使用的调用格式输入函数scanf()和格式输出函数printf()等。 函数调用是利用函数的返回值。或用这返回值继续进行表达式的计算,或输出函数返回值等,程序设计-2005年秋,35,函数调用的执行过程,为形参分配内存空间 计算实参表达式的值,并将值赋给对应的形参 为函数的局部变量分配内存空间 执行函数体内的语句序列 函数体执行完,或执行了return语句后,释放为这次函数调用分配的全部内存空间 将函数值(如果有)返回到函数调用处继续执行,程序设计-2005年秋,36,#include double x, y, d, min(double, double); voi
16、d main() printf(“Enter x,y.n”); scanf(“%lf%lf”, ,程序设计-2005年秋,37,对函数调用的说明,当函数执行return语句或执行完函数体的语句序列后,函数的这次调用就执行结束,随之将控制返回到函数调用处继续执行 函数的返回值是通过执行return 语句时,计算return之后的表达式值而获得的。如果函数不提供返回值,则return语句不应包含表达式。 如果函数有返回值,则应有确定的类型,并在函数定义时指明。若函数定义时不指明返回值类型,且函数有返回值,C语言约定该函数的返回值类型为int型,程序设计-2005年秋,38,对函数调用的说明(续),
17、为了明确指明函数不提供返回值,建议在函数定义时,在函数名之前写上void。并在这样的函数体内,所有的return语句都不应该带表达式 当函数执行不带表达式的return语句返回时,函数并不是一定不带回值,而是返回一个不确定的值。这样的函数调用不应该利用函数返回值进行再计算,否则会产生错误结果 函数定义中的return语句的表达式类型应与函数定义中指明的返回值类型相一致。如果return语句中的表达式类型与函数定义指明的返回值类型不一致时,对于是基本类型情况,则以函数的返回值类型为准,系统会自动进行类型转换,程序设计-2005年秋,39,实参向形参单向传递数据,在函数未被调用时,函数定义中的形参
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 程序设计 PARTII PPT
