C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数

上传人:E**** 文档编号:89381843 上传时间:2019-05-24 格式:PPT 页数:97 大小:266KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数_第1页
第1页 / 共97页
C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数_第2页
第2页 / 共97页
C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数_第3页
第3页 / 共97页
C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数_第4页
第4页 / 共97页
C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 李丽娟 等 第6章_函数(97页珍藏版)》请在金锄头文库上搜索。

1、第 6 章 函数与编译预处理命令,在C程序设计中,通常将一个较大程序分成几个功能较为单一的子程序模块,用函数来完成每个子程序的作用。C语言是函数驱动语言,C程序都由一个或多个函数构成,其中有且只有一个名为main的函数,即主函数,C程序总是从main函数开始执行并最后在main函数中结束整个程序的运行。,函数常识,1、功能模块:求解较小问题的算法和程序称作“功能模块”, 各功能模块可以先单独设计,然后将求解所有子问题的模块组合成求解原问题的程序。 2、一个解决大问题的程序,可以分解成多个解决小问题的模块,这就是“自顶向下”的模块化程序设计方法。 3、用一个或多个函数来实现这些功能模块。,例:

2、打印图形: * How do you do! * * 编程: main() printf(“*n”); printf(“How do you do! n”); printf(“*n”); printf(“*n”); 源程序可简化为:,三个语句一样,可编写成函数: void printstar() printf(“*n” ); ,main() printstar(); printstar() printf(“ How do you do!n”): 用户自定义的函数 printstar(): .说明几点: 、一个原程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源文件为单位进行编译

3、,而不是以函数为单位进行编译。 、程序的执行从main函数开始,在main函数中结束整个程序的运行。main函数是系统定义的。 、所有的函数都是平行的,不能嵌套定义,但可以互相 调用,但不能调用main 函数。,模块与函数 函数:完成相对独立功能的程序. 标准函数:由系统提供的库函数,不必 从使用角度分 定义直接引用,如fabs()等。 用户自定义函数:用以解决用户专门需要。 无参函数:如printsar(); 从函数形式分 有参函数:如 sin(x), sqrt(x); 不传递数据 主调函数 被调用函数 传递数据,例输入三个数,将其按从小到大的顺序输出. main() float a,b,c

4、,t; scanf(“%f,%f,%f”, ,用函数实现: 输入(用scanf函数) 主控模块 排序 输出 (用printf函数) 排序函数sortabc: void sortabc( ) float t; if(ab) t=a,a=b,b=t; if(ac) t=a,a=c,c=t; if(bc) t=b,b=c,c=t; ,float a,b,c; /* 定义 a,b,c为全程变量 */ main( ) scanf(“%f,%f,%f”, /*输出*/ 模块独立:功能独立,关系简单; 模块设计原则:模块规模适当 分解模块要注意层次,算法 1.算法:是求解某一类特定问题的方法和步骤。 2.算

5、法的性质 (1) 算法是一个有限操作序列。即算法的有穷性。 (2) 算法的每一步都应是确定的,没有二义性。 (3) 算法的每一步都应是计算机能进行的有效操作。 (4) 有一个或多个输入。 (5) 有一个或多个输出,表示问题的解。 3.算法的描述 (1)自然语言 (2)框图语言(N-S流程图) (3)计算机语言,例:找出a,b两数中的较大者,并输出。 1、自然语言描述 (1)输入两个数; (2)如果ab,则a max, 否则b max; (3)输出max的值。 2、N-S 框图语言描述,输入a,b,ab,是,否,a max,b max,输出max的值,3、计算机语言描述: main() int

6、a,b,max; scanf(“%d,%d”, ,6.1 库函数,1、定义在不同的头文件中 2、用户使用时,必须用#include“头文件”把相应的头文件包含到程序中来。 例 6.1 数学函数库调用举例 #include #include main( ) double a, b; scanf (“%lf “, ,注意 :,include命令必须以#开头,文件名用一对双引号“ ”或一对尖括号括起来,二者的区别是:用表示编译时只按系统标准方式检索文件目录,而用“ math.h”形式,则编译系统先从目标文件所在的子目录中找math.h文件,若找不到再按尖括号包围时的办法重新搜索一次。include是

7、命令,不是语句,结尾没有分号。,6.2.1 函数定义 语言函数定义格式如下: 函数返回值的类型名 函数名(类型名 形式参数1,类型名 形式参数2,) /*函数首部*/ 说明部分; /*函数体*/ 语句部分; 其中 内为可选项。注意:函数名、一对圆括号和花括号不能省!,6.2 函数的定义和说明,例: int max(int a,int b) int t; t=ab?a:b; /*函数体*/ return t; /*返回语句*/ 不能写成: int max(int a,b) int t; t=ab?a:b; /*函数体*/ return t; ,函数返回值类型名,函数名,参数类型说明 及参数列表,

8、1.无参函数,根据函数是否需要参数,又可将函数分为无参函数和有参函数两种。 无参函数的一般形式 函数返回值的类型名 函数名( void ) 说明语句部分; 可执行语句部分; 例 6.2 构造一个输出一行”*”的函数: void printstar() printf(“*n”);,2.有参函数,有参函数的一般形式 函数返回值的类型名 函数名(数据类型 参数1,数据类型 参数2 ) 说明语句部分; 可执行语句部分; 例 6.3 一个求两个双精度数之和的函数: double add(double x,double y) /*函数首部*/ double s;/*说明部分*/ s=x+y; /*语句部分

9、*/ return s;/*返回语句*/ ,例 6.4 求两个数中的大数 (注意:此例中函数调用时的类型转换),程序如下: #include max(float x,float y) float z; z=xy?x:y; return z; main() float a=1.5,b=0.5; float c; c=max(a,b); printf(“max is %fn”,c);,运行结果为: max is 1.000000,注意:,(1)函数名和形式参数都是用户命名的标识符。在同一程序中,函数名必须唯一;形式参数只要在同一函数中唯一即可,可以与其它函数中的变量同名。 (2)语言规定,不能在一

10、个函数的内部再定义函数。 (3)对函数类型的说明,必须与return语句中返回值表达式的类型一致。如果不一致,则以函数类型为准,由系统自动进行转换。如果缺省函数类型,则系统一律按int类型处理。,注意:,(4) 空函数既无参数、函数体又为空的函数。其一般形式为: 函数类型 函数名(void) 如:dump() (5) 带参数的形式参数表中类型和变量必须成对出现,如下面的定义是错误的: double add(double x,y),6.2.2 函数的返回值,语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。 在函数定义的语句部分,常常有个r

11、eturn返回语句,函数的返回值也就是return语句中的表达式的值。 return 语句的格式: return(表达式); 或 return 表达式; 或 return; 功能:1、把return后面“表达式”的值带给调用函数; 2、把控制转向调用函数; 格式 return;只有功能2 例如return(x); return x+y; return(xy?x:y); return; 都是合法的。,注意:,(1) 声明为void型的函数中不能包括带值的return 语句;主函数体内不能出现return语句。 (2)当函数没有return语句时,以结束函数的大括号 作为返回点。但这时并不表明函数

12、没有返回值,这时的返回值是系统给的不确定值。 (3)除了空值函数以外的所有函数都返回一个值,那么我们是不是非得去使用这个返回值呢?答案是否定的。如果没有用它赋值,那它就被丢弃了。 (4)在同一函数内,可用根据需要在多处出现return语句,但函数第一次遇到return时就立即停止执行,并返回到主调函数,例 6.6 计算两数之和,#include double add(double x,double y) double s; s=x+y; return s; main() int a,b,c; a=10;b=20; c=add(a,b);/*1*/ printf(“%f“,add(a,b);/*

13、2*/ add(a,b);/*3*/,运行结果为: 30.0,6.2.3 函数说明和函数原型,1函数说明的形式 函数说明也称为函数声明,使用函数说明语句能够让C编译程序了解函数返回值类型 在ANSI C新标准中,采用函数原型方式,对被调用函数进行说明,其一般格式如下: 函数类型 函数名(数据类型 参数名, 数据类型 参数名2); 函数说明语句其实就是函数定义中的函数首部加上分号,这些内容称为函数原型。 如:float max(float x,float y); 等价于 float max(float,float);,2函数说明的位置,(1)语言规定,被调用函数的说明位置,处在该函数被调用前并且

14、是在所有函数的外部时,则后面所有位置上都可以对该函数进行调用。 (2)函数说明放在调用函数内的说明部分,这时作用范围只在本调用函数内部。,例 求两个数中的大数,#include main() float a=1.5,b=0.5; float max(float,float); float c; c=max(a,b); printf(“max is %fn“,c); float max(float x,float y) float z; z=xy?x:y; return z; ,运行结果为: max is 1.500000,(max)函数说明,6.3 函数的调用,1、调用形式: 函数名(实参表列

15、); 实参与形参个数相等,类型一致。调用函数时两者按顺序一一对应传递数据。 对实参表的求值顺序:自右而左 (TC当中)。 如 :当 i=3时, printf(“%d,%d”,i,i+); 的运行结果为 4,3。 例: i=2; p=f(i,+i); 等价于: p=f(2,2); p=f(2,3); p=f(3,2); p=f(3,3);, ,2、调用方式: 按函数在程序中出现的位置来分有三种方式。 函数语句。 只完成一个操作,并不要求函数带回值。 如:printstar(); scanf(“%d”,3、说明几点: 在一个函数中调用另一个函数需要具备哪些条件: 被调用函数已经存在(库函数或用户自定义); 使用库函数或别的文件中的函数,应该在本文件开头用#include命令将有关的编译预处理信息包含到本文件中来。 例: 使用输入输出函数 #include “stdio.h” 使用数学函数 #inclu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号