C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章

上传人:E**** 文档编号:89368001 上传时间:2019-05-24 格式:PPT 页数:130 大小:477KB
返回 下载 相关 举报
C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章_第1页
第1页 / 共130页
C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章_第2页
第2页 / 共130页
C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章_第3页
第3页 / 共130页
C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章_第4页
第4页 / 共130页
C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章》由会员分享,可在线阅读,更多相关《C程序设计 第二版 教学课件 ppt 作者 荣政_ 第7章(130页珍藏版)》请在金锄头文库上搜索。

1、第七章 函数及变量存储类型,7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归 7.5 变量的存储类别 7.6 编译预处理 7.7 程序设计举例 习题,7.1 函数基础与C程序结构 7.1.1 C程序的结构化设计思想 当设计一个解决复杂问题的程序时,传统的面向过程的程序设计方法为了能清楚地描述程序的运行过程,要求将一个复杂的任务划分为若干子任务,每个子任务设计成一个子程序,称为模块。若子任务较复杂,还可以将子任务继续分解,直到分解成为一些容易解决的子任务为止。每个子任务对应于一个子程序,子程序在程序编制(即代码)上相互独立,而在对数据的处理上又

2、相互联系,数据和程序代码是分开存储的。完成总任务的程序由一个主程序和若干子程序组成,主程序起着任务调度的总控作用,而每个子程序各自完成一个单一的任务。这种自上而下逐步细化的模块化程序设计方法就是所谓结构化程序设计方法。,结构化程序设计的优点是:程序编制方便,易于修改和调试,可由多人分工合作完成; 程序结构模块化,可读性、可维护性及可扩充性强; 子程序代码公用(当需要完成同样 任务时,只需要一段代码,可多次调用),使程序简洁。 C语言是函数式语言,没有子程序,程序员可利用函数来实施结构化程序设计,即单一的程序任务由独立的函数来完成,不要试图在一个函数中完成所有的任务,一个函数只应完成一件单一的任

3、务。一个成功的C程序应该是由多个功能简单、独立的函数构成的。要善于利用函数,以减少重复编程。,组成一个C程序的各函数可以分开编辑成多个C源文件。一个C源文件中可以含有0个(源文件中可以没有函数,仅由一些说明组成,例如定义一些全局变量)或多个函数,因而一个C程序可以有一个或多个源文件,每个源文件是一个编译单位。源文件被编译之后生成二进制代码形式的目标程序文件,组成一个C程序的所有源文件都被编译之后,由连接程序将各目标文件中的目标函数和系统标准函数库的函数装配成一个可执行的C程序。 C程序结构示意图如图7.1所示。,图 7.1 C程序结构示意图,7.1.2 函数概述 在C程序设计中,函数是独立的C

4、程序模块,它完成一个特定任务并可选择是否将一个值返回调用程序。在C语言中,子程序被称为函数,它相应于其它高级语言中的过程(无返回值的子程序)和函数(通过函数名返回一个值的子程序)。一个C程序一般由多个函数组成,其中必须有一个且仅有一个名为main的主函数,其余为被main()函数或其它函数调用的函数,无论main()函数位于程序中的什么位置,C程序总是从main()函数开始执行。,main()函数可调用其它函数来实现所需的功能。被main()函数调用的函数分为两类。一类是由系统提供的标准库函数,例如,标准输入/输出函数(scanf,printf,getche,putchar, )、数学计算函数

5、(sin,cos,fabs,sqrt,)、数据格式转换函数(atoi,atof,sscanf, sprintf,)、字符串处理函数(strlen,strcpy,strcmp,)和文件读/写函数(fread,fwrite,fopen,)等。这类函数可以由用户程序直接调用。另一类是用户在自己的程序中定义的函数,即需要由用户自己编写的函数。,例 7.1 用户自定义函数求数的平方。 #include long square(long); /* 函数声明 */ void main() long in_num,result; printf(“Input an integer:“); scanf(“%ld“

6、,&in_num); result=square (in_num); /* 函数调用 */ printf(“nThe square number of %ld is %ld”,in_num,result); ,long square (long x) /* 函数定义 */ long x_square; /* 说明部分 */ x_square=x*x; /* 执行部分 */ return x_square; 运行结果: Input an integer:100 (输入) The square number of 100 is 10000 (输出),分析: (1) “long square(lon

7、g);”语句是一个函数声明,函数定义将在程序的后面出现。函数声明指出了函数原型,包括函数名、要传送过来的参数表以及它所返回的函数值的类型。程序员和编译系统从这个语句可了解到:函数名为square,函数需要一个long型参数,并将返回一个long型值。 (2) 语句“result=square(in_num);”调用square()函数并将变量in_num作为实参传送给它。该函数的返回值赋予变量result。注意in_num和result为long型变量,以便与函数原型相匹配。,(3) long square(long x)开始函数定义,函数定义的首部(即第一行)给出函数的返回类型、函数名和形参

8、描述。围在大括号中的是函数体,其中包括函数内部的一些说明和变量定义以及函数在被调用时要执行的语句。 (4) 函数以一个return语句终结,return语句将一个值传回调用程序并结束函数的调用。本例中,返回变量x_square的值。 比较square()函数与main()函数的结构可知它们是类似的,注意main()虽是一个函数,但不可被调用。 本书已用过的printf()和scanf()函数是库函数,与用户定义函数不同,但用户在调用时的操作是相似的。,由此可总结,C程序中的函数具有以下特性: (1) 每个函数都有惟一的名字(如square),用这个名字,程序可以转去执行该函数所包括的语句,这种

9、操作称为调用函数。一个函数能被另一个函数调用,如在main()函数中调用square()函数,但main()函数不可被其它任何函数调用。 (2) 一个函数执行一个特定的任务,此任务是程序必须完成的全部操作中一个独立的操作行为,如将一行正文传送到打印机,将一个数组按数值顺序排列,求一个立方根等等。 (3) 函数的定义是独立的、封闭的。一个函数的定义应该不受程序其它部分的干预,也应不干预其它部分而完成自身的任务。,(4) 函数能给调用程序返回一个值。在程序调用一个函数时,此函数所包含的语句便会执行,必要时,还能将信息传回调用程序。 C程序中的函数,只有在被调用时,其中的语句才能执行。程序在调用一个

10、函数时,可用一个或多个实参将信息传送到函数,实参往往是函数在执行任务时所需的数据。函数中的语句执行后,就完成了指定的任务。当函数的语句全部完成后,程序返回到该函数被调用处,函数也能以返回值的形式将信息传送回程序。,7.2 函数的定义和声明 7.2.1 函数的定义 函数的定义就是对函数所要完成功能的操作进行描述的过程。它一般包括函数名的命名和类型说明、形式参数的类型说明、必要的变量定义、操作语句等等。 下面首先看一个函数定义的实例,然后给出函数定义的一般形式。 例 7.2 计算x的n次方,x=2,-3; n=1,2,9。 分析:根据题意,x有两个取值,每个x值对应于9个n值,因此程序要计算18次

11、x的幂值。所以最好将计算x的幂定义成函数,函数名为power,参数为x和n。main()函数每次用不同的x和n值调用power()函数,并输出计算结果。,程序如下: #include int main(void) * 测试power()函数* int i; double power(int,int); /* 函数声明 */ for(i=1;i10;i+) printf(“power(2,%d)=%8.4f,power(3, %d)=%11.4fn“, i,power(2,i),i,power(-3,i); return 0; ,double power(int x,int n) /* 函数首部

12、 */ int i; /* 说明部分 */ double p; p=1; /* 执行部分 */ for(i=1;i=n;i+) p*=x; return(p); /* 返回p值 */ ,输出: power(2,1)= 2.0000,power(3,1)= 3.0000 power(2,2)= 4.0000,power(3,2)= 9.0000 power(2,3)= 8.0000,power(3,3)= 27.0000 power(2,4)= 16.0000,power(3,4)= 81.0000 power(2,5)= 32.0000,power(3,5)= 243.0000 power(2

13、,6)= 64.0000,power(3,6)= 729.0000 power(2,7)=128.0000,power(3,7)= 2187.0000 power(2,8)=256.0000,power(3,8)= 6561.0000 power(2,9)=512.0000,power(3,9)=19683.0000,函数名power是一个标识符,power()函数具有double类型的返回值,它有两个int类型的参数x和n。 括起来的部分是函数体,其中的说明部分“int i;double p;” 说明i 、p是在power()函数内部使用的局部变量。执行部分的“return(p); ”语句将

14、表达式p的值返回给main()函数的调用处,p的值就是power()函数的返回值(简称函数值)。 函数定义的一般形式为: 存储类型标识符 类型标识符 函数名(形式参数表列及类型说明) 说明部分 语句部分 ,函数定义由函数首部和函数体两部分组成。函数首部即定义一个函数时的第一行,包括存储类型标识符、类型标识符、函数名和由()括起来的参数表; 部分称为函数体,语法上是一个复合语句。各部分说明如下: 1) 存储类型标识符 存储类型标识符说明函数的存储类型,它规定了函数可被调用的范围。可用于函数的存储类型标识符有static和extern,指定为static的函数为静态函数,静态函数只能由和它在同一文

15、件中定义的函数调用; 不指定存储类型标识符时为缺省的存储类型extern,缺省或指定为extern存储类型的函数是外部函数,例如,例7.2中的power()函数是外部函数。,2) 类型标识符 C程序中定义的函数可以什么也不返回而只完成某项工作。无返回值的函数,类型标识符为void,又称为“空类型函数”,即此函数不向主调函数返回值,主调函数也禁止使用此函数的返回值。 C程序中定义的函数也可以返回一个值,这时,类型标识符说明函数返回值的数据类型(常简称为“函数值的类型”或“函数的类型”),例如,例7.2中的power()函数是一个double类型的函数,main()是int类型的函数。函数的类型可以为任何基本类型、结构体类型。还可以定义返回值为指针的函数,但不能定义返回数组的函数。int型函数定义时可以省略类型标识符int,因为int是有返回值函数的缺省类型(提倡明确指出int)。,3) 函数名 函数名是一个标识符,一个程序中除主函数main()外,其余函数的名字可以任意取,最好取有助于记忆的名字。考虑到与外部联接的需要,函数名一般不要超过6个字符长,如max()、power()和factor()等。外部函数的名字要作用于整个程序,因而外部函数相互之间不能同名。静态函数可以和外部函数同名,但同一文

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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