资源预览内容
第1页 / 共101页
第2页 / 共101页
第3页 / 共101页
第4页 / 共101页
第5页 / 共101页
第6页 / 共101页
第7页 / 共101页
第8页 / 共101页
第9页 / 共101页
第10页 / 共101页
亲,该文档总共101页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 1C C语言程序设计语言程序设计第第4 4章章 函数与程序结构函数与程序结构 1. 理解函数的功能。 2. 掌握函数定义的一般形式。 3. 掌握函数的形参与实参的对应关系、参数传递方法及函数返回值的概念。 4. 掌握函数调用的几种形式。 5. 掌握函数嵌套调用的一般过程。 6. 了解函数递归调用的几种形式。 7. 掌握数组名作为函数的参数的一些特点。 8. 掌握局部变量与全局变量的概念及其使用特点。 9. 掌握动态存储变量与静态存储变量的含义,会正确识别和使用。10. 了解内部函数与外部函数的含义。11. 了解多文件程序的组织和实现方法教教教学学学要要要求求求C C语言程序设计语言程序设计2C C语言程序设计语言程序设计教教教教学学学学内内内内容容容容结束结束结束结束4.5 4.5 4.5 4.5 调用函数和被调函数调用函数和被调函数调用函数和被调函数调用函数和被调函数的数据传递的数据传递的数据传递的数据传递4.6 4.6 4.6 4.6 函数的嵌套调用函数的嵌套调用函数的嵌套调用函数的嵌套调用与与与与递归递归递归递归调用调用调用调用4.7 4.7 4.7 4.7 变量的作用域和生期变量的作用域和生期变量的作用域和生期变量的作用域和生期4.94.94.94.9 小结小结小结小结 4.8 4.8 4.8 4.8 多文件程序的多文件程序的多文件程序的多文件程序的组织和调试方法组织和调试方法组织和调试方法组织和调试方法4.14.14.14.1 概述概述概述概述 4.2 4.2 4.2 4.2 库函数库函数库函数库函数4.3 4.3 4.3 4.3 函数定义函数定义函数定义函数定义4.4 4.4 4.4 4.4 函数的调函数的调函数的调函数的调用和说明用和说明用和说明用和说明C C语言程序设计语言程序设计3 3C C语言程序设计语言程序设计4.1 4.1 概述概述1.问题提出前面的程序中,都用到了主函数“main”及 C语言提供的输入输出库函数 scanf 和 priintf 等函数,目前除了调用库函数实现某些功能外,所有的练习中程序功能均在主函数中完成,当问题有一定规模和复杂度时不可避免地会出现如下问题: 程序越来越长,难于理解且可读性下降。 重复代码增多,某段程序可能被执行多次。 某一问题中的代码,无法在其他同类问题中再用, 必须重复原来设计编码的过程。 程序各部分之间联系复杂、保持重用代码段的一致性等原因导致程序调试难度加大。4C C语言程序设计语言程序设计 2. 解决问题的方法 引入函数机制由于以上问题,所以需要一种机制,能够有效地分解复杂的描述,控制程序规模和复杂性,C语言中,这种机制就是函数。使用函数,把一段处理过程抽象出来,作为程序中独立的函数实体,这样通过函数之间的调用就可以完成复杂的处理任务了。函数机制的本质是封装一段操作,对其他模块隐藏函数内部的实现过程,只提供调用方法,即接口参数和返回值。被抽象成函数的程序段通常是功能独立、具有独立逻辑意义的程序段和重复出现的代码段。4 4. .1 1 概概述述5C C语言程序设计语言程序设计 3. 函数机制的提供的好处 函数可以被多次调用,从而减少程序的长度。增加程序的可读性。程序的模块化、结构化更强。 4. 函数的定义与调用C语言中,函数名是上述封装体的名称。函数定义是按照规定形式对函数的描述。函数调用是要求执行函数的描述。一个实用的C语言源程序总是由许多函数组成,这些函数多数都是根据实际任务由用户来编写的,在这些函数中,可以调用C语言提供的库函数,也可调用用户自己写的或他人编写的函数。4 4. .1 1 概概述述6C C语言程序设计语言程序设计 5.函数的执行 C 程序总是从主函数 main 开始执行,到主函数的最后一个“” 处结束。在 main 中,调用库函数或自己定义的函数时,控制权转移到函数,主程序等待,待函数执行完毕后,控制返回到调用处, 主函数继续执行。其他函数中调用函数的过程与此相同。 6. 掌握函数的使用与函数的定义从C语言函数来讲,一方面要掌握库函数的调用方法,尽可能地熟悉系统提供的常用库函数的功能,尽量使用库函数实现程序功能。另一方面,库函数毕竟不能解决所有的问题,需要掌握自己定义函数的方法。4 4. .1 1 概概述述7C C语言程序设计语言程序设计 7. 在程序设计中要注意对函数的两种观点 u一种观点是从函数外部调用者的角度考虑怎样使用和设计函数,不论是库函数还是自定义函数,我们只关心函数如何使用,实现什么功能、函数名字是什么、有几个参数、类型是什么、返回什么值,而不关心函数内部的实现细节,也没有必要关心。从这个层次上考虑问题,可以摆脱细节干扰、把握总体和全局应该具有的功能和结构。4 4. .1 1 概概述述8C C语言程序设计语言程序设计u另一种观点是从函数内部实现者的角度定义函数实现的功能, 要考虑函数启动时需外部提供什么数据及其类型、函数如何工作、如何得到结果、何时结束、如何返回结果, 而不关心外部什么地方调用这个函数,调用时具体参数是什么。我们在函数内部定义的计算功能是具有一般性的抽象计算功能,只有函数被调用的时候,才具体化地解决一个实际问题。4 4. .1 1 概概述述9C C语言程序设计语言程序设计8. 模块化程序设计u基本思想 将一个大的程序按功能分割成一些小模块。u特点 各模块相对独立、功能单一、结构清晰、接口简单。控制了程序设计的复杂性。提高元件的可靠性。缩短开发周期。避免程序开发的重复劳动。易于维护和功能扩充。u开发方法 自上向下, 逐步分解,分而治之。4 4. .1 1 概概述述1010C C语言程序设计语言程序设计4.2 4.2 库函数库函数1. 熟悉库函数的使用C语言非常简洁, 程序所需的许多东西通过函数方式提供。掌握C语言的一个重要方面, 就是要熟悉库函数的使用。ANSI C标准对过去各种C语言系统的函数进行了分析,并将其规范化,它将一批最常用的功能总结出来,定义了C语言的标准库、每种C语言系统,都按照这个标准提供了一批标准库函数,还根据实际运行环境提供了扩充函数库。写C程序时可直接调用函数,不必关心函数是如何实现的,这样可节省大量的时间和精力。使用库函数,要学会使用联机帮助或系统的有关手册。(参考 附录 列出了常用的库函数)。11C C语言程序设计语言程序设计 2. 调用库函数的两个骤步 使用 include 指出关于库函数的相关定义和说明include 命令必需以“#”开头,系统提供的头文件以 .h 作为文件后缀,文件名用一对尖括号“”或一对双撇号 括起来。include 的使用形式如下:(其功能在后面介绍)#include math.h 是有关数学函数的头文件 。#开头的程序行不是C语句,末尾不加;号。 调用标准库函数调用库函数的形式为: 函数名(参数表)4 4. .2 2 库库函函数数12C C语言程序设计语言程序设计3. 库函数调用的两种方式 表达式中调用 函数是表达式的一个运算对象,如 y = z * sin(x) + 0.5 这种调用方式,通常需要使用函数的返回值进行计算; 作为独立语句 可看作表达式语句如printf(%dn, a); 4. 库函数联机帮助在 TC的编辑器中,将光标置于库函数的任意一个字符上,按下 “Ctrl+F1”,可得到此库函数的定义信息。调用库函数时,要注意按照库函数的参数类型(形参)要求,给出调用的参数(实参)。实参可以是表达式,函数调用的第一步就是计算实参的值,然后传给形参变量。4 4. .2 2 库库函函数数13C C语言程序设计语言程序设计4 4. .2 2 库库函函数数使用库函数应注意使用库函数应注意: : 函数功能函数功能; ; 函数参数的数目和顺序函数参数的数目和顺序, , 及各参数意义和类型及各参数意义和类型; ; 函数返回值意义和类型函数返回值意义和类型 需要使用的包含文件。需要使用的包含文件。1414C C语言程序设计语言程序设计函数体4.3 4.3 函数函数定义定义1. 一般格式 函数类型 函数名(类型名 形参1, 类型名 形参2, ) 说明部分 语句部分 2. 说明 函数名、形参是用户命名的标识符,同一程序中,函数名必须唯一,形参名在同一函数中唯一即可,可以与其他函数中的变量同名。 C语言规定,不能在函数的内部再定义函数(即嵌套定义)。 所有函数都是互相平行独立的。 省略返回类型名时,缺省值为 int。15C C语言程序设计语言程序设计 函数名后括号内的参数叫形参,形参必须用括号括起来,可有多个形参,也可以一个也没有。例 无参函数printstar( ) /* 或或 printstar(void ) */ printf( *n);例 有参函数(现代风格)int max( int x, int y) int z; z=xy?x:y; return(z); 函数定义的一对 中可以为空,这样的函数什么也不做。 例 空函数 dummy( ) 4 4. .3 3 函函数数定定义义16C C语言程序设计语言程序设计 函数体中说明部分的变量,只在函数体内有效, 并在进入函数时为变量开辟单元,退出时释放分配的单元。函数体中说明部分的变量与其他函数体中的变量互不相关。例:int max( int x, int y) int z; z=xy ? x : y; return(z); 函数头部构成函数内外部之间的界面。函数接口定义清楚了,函数的定义和使用完全可以由不同人来完成。4 4. .3 3 函函数数定定义义17C C语言程序设计语言程序设计 函数允许递归调用, 即在函数中可直接或间接地调用自己。 函数值通过 return 语句返回。【例4.1】写一个函数,求两个双精度浮点数的和。double add( double a, double b ) double s; s=a+b; return s; 4 4. .3 3 函函数数定定义义不能省略不能省略18C C语言程序设计语言程序设计 在老版本 C语言中,参数类型说明允许放在函数说明部分的第 2 行单独指定。其格式如下:函数类型 函数名(形参表) 形参类型说明 说明部分 语句部分 例如:求两个双精度浮点数的和,写成传统风格的有参函数如下:double add( a, b ) double a,b ; /* 参参数数类类型型说说明明 */ double s; s=a+b; return s; 4 4. .3 3 函函数数定定义义19C C语言程序设计语言程序设计3.函数的返回值u返回语句形式 return (表达式); 或 return 表达式;或 return;u功能 使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数。u 说明 函数中可有多个 return 语句;若无 return 语句,遇 时,自动返回调用函数;若函数类型与 return 中表达式值的类型不一致,按前者为准,自动转换-函数调用转换;void 型函数 表示该函数没有值返回,调用这类函数的惟一的方法就是作为独立的语句。4 4. .3 3 函函数数定定义义20C C语言程序设计语言程序设计4 4. .3 3 函函数数定定义义例:函数返回值类型转换 main( ) float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);max(float x, float y) float z; z=xy?x:y; return(z); 例:无返回值函数 void swap(int x, int y ) int temp; temp=x; x=y; y=temp; void 函数应作为独立语句void printstar() printf (*); main() int a; a=printstar(); printf(%d,a); /* 编译错误编译错误!*/intprintstar();改为21C C语言程序设计语言程序设计4 4. .3 3 函函数数定定义义良好的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号