C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第4章 函数与编译预处理

上传人:E**** 文档编号:89372284 上传时间:2019-05-24 格式:PPT 页数:43 大小:454.50KB
返回 下载 相关 举报
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第4章 函数与编译预处理_第1页
第1页 / 共43页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第4章 函数与编译预处理_第2页
第2页 / 共43页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第4章 函数与编译预处理_第3页
第3页 / 共43页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第4章 函数与编译预处理_第4页
第4页 / 共43页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第4章 函数与编译预处理_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第4章 函数与编译预处理》由会员分享,可在线阅读,更多相关《C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第4章 函数与编译预处理(43页珍藏版)》请在金锄头文库上搜索。

1、1,第4章 函数与编译预处理,C 语言程序设计,2,第4章 函数与编译预处理,4.1 函数概述 4.2 函数定义与调用 4.3 局部变量和全局变量 4.4 变量的生存期和存储类别 4.5 编译预处理,3,4.1 函数概述,4.1.1 函数简介,4,【例】,#include void print_line() /*函数定义*/ printf(“*n“); void print_text() /*函数定义*/ printf(“ Welcome to Beijing n“); void main() print_line(); /*函数调用*/ print_text(); /*函数调用*/ prin

2、t_line(); /*函数调用*/ ,5,void main函数 调用函数 print_line(); ,6, 一个C源程序可以由一个或多个源程序文件组成。C编译系统在对C源程序进行编译时是以文件为单位进行的。 一个C源程序文件可以由一个或多个函数组成。所有函数都是独立的。主函数可以调用其它函数,其它函数可以相互调用。 在一个C程序中,有且仅有一个主函数main。C程序的执行总是从main函数开始,调用其它函数后最终回到main函数,在main函数中结束整个程序的运行。,说明,7, 函数的种类,从使用的角度看: 标准函数(库函数) 库函数是由系统提供的。如:getchar( )、sin(x)

3、等。在程序中可以直接调用它们。附录B列出了C的部分库函数。 用户自定义函数。如:例中的print_line()函数。,8,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用 常用函数 如:fabs、sqrt、sin、pow、rand (常用数学函数参见教材P100 表4-1和附录B ) 函数调用形式: 函数名(参数表) 例如: sqrt(x),4.1.2 数学库函数,9,例,#include #include void main( ) float x=4.5; printf (“%f, %f, %fn“ ,sqrt(x),pow(x,2),fabs(-x); ,输出结果:

4、 2.121320, 20.250000, 4.500000,10,4.2.1 函数的定义,函数定义的一般形式,函数类型 函数名(类型名 形式参数1, ) 说明语句 执行语句 ,例如:求两个数的最大值。 int max(int x,int y) int z; z = x y ? x : y; return( z ); ,4.2 函数定义及调用,11,#include int cube(int y); /*函数原型声明*/ void main() int x,last,nowcb; last=1; printf(“15之间,相邻两数的立方差是:n“); for(x=2;x=5;x+) nowcb

5、=cube(x); /* 函数调用 */ printf(“%d “,nowcb-last); last=nowcb; printf(“n“); ,/*函数定义*/ int cube(int y ) /*函数首部*/ return y*y*y; ,例4-1 编写一个函数cube,计算整数的立方。,花括号中也可以为空,这种函数叫空函数 。 不能在函数体内定义其他函数,即函数不能嵌套定义。,12,函数名(实参表列),在C语言中,把函数调用也作为一个表达式。因此凡是表达式可以出现的地方都可以出现函数调用。例如: welcome( ); /*函数调用语句*/ if (iabs (a)max) max=i

6、abs(a); /*函数调用构成表达式*/ m=max(c,max(a,b); /*函数调用作为函数参数*/,4.2.2 函数的调用,函数调用的一般形式:,13,void swap(int x, int y) int z; z=x; x=y; y=z; printf(“nx=%d,y=%d“,x ,y); main( ) int a=10,b=20; swap(a,b); printf(“na=%d,b=%dn“,a,b); ,4.2.3 函数参数传递与返回值,1函数的参数传递(值传递),程序输出结果: x=20,y=10 a=10,b=20,形式参数(形参),实际参数(实参),【例】编一程序

7、,将主函数中的两个变量的值传递给swap函数中的两个形参,交换两个形参的值。,14,有关形参和实参的说明:, 当函数被调用时才给形参分配内存单元。调用结束,所占内存被释放。 实参可以是常量、变量或表达式,但要求它们有确定的值。 实参与形参类型要一致,字符型与整型兼容。 实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。“单向值传递”。,15,函数的返回值是通过return语句带回到主调函数的,功能:终止函数的运行,返回主调函数,若有返回值,将返回值带回主调函数。,说明: 若函数没有返回值,return语句可以省略。 return语句中的表达式类型一般应和函数的类型一致, 如

8、果不一致,系统自动将表达式类型转换为函数类型。,2.函数的返回值,return 语句格式:,return ; 或 return 表达式 ;,16,【例】计算并输出圆的面积。,#include s(int r) return 3.14*r*r; void main( ) int r; scanf(“%d“, ,自动转换为int型,程序运行情况如下: 2 12,说明: 函数的类型决定了函数返回值的类型。若省略函数的类型,系统默认其为int型。 无返回值的函数应将其类型定义为void (空)类型。,17,【例4-8】编写函数实现两组变量的显示,定义2组,共8个整型变量a1a4,b1b4,要求:输入字

9、符a和整数1,显示a1变量的值,输入字符b和整数1,显示b1变量的值,18,#include int ArrayOperating(int i,char ch) int a1=1,a2=0,a3=3,a4=5; int b1=2,b2=0,b3=4,b4=3; switch(i) case 1: switch(ch) case a: return a1; case b: return b1; case 2: case 3: case 4: ,void main() int i;char ch; printf(“输入显示的变量,形式如:a1或b4:“); scanf(“%c%d“, ,19,4.

10、2.4 函数的嵌套调用,main函数 调用函数 A; ,20,【例】函数的嵌套调用,main( ) int n=3; printf (“%dn“,sub1(n); ,sub1(int n) int i,a=0; for (i=n; i0; i-) a+=sub2(i); return a ; ,sub2(int n) return n+1; ,程序输出结果: 9,21,4.2.5 对被调函数的声明和函数原型,变量要先定义后使用,函数也如此。即被调函数的定义要出现在主调函数的定义之前。如swap函数.,void swap(int x, int y) main( ) swap(a,b); ,mai

11、n( ) c=max(a,b); max(int x,int y) ,允许整型函数(且参数也是整型)的定义出现在主调函数之后。如max函数.,22,对被调函数进行声明的一般形式,函数类型 函数名(参数类型1 参数名1,); 或 函数类型 函数名(参数类型1,参数类型2,);,第二种形式省略了参数名,此种形式也称为函数的原型。,如果非整型函数在主调函数之后定义,则应在主调函数中或主调函数之前对被调函数进行声明。,23,#include void main( ) float calc(float x,float y,char opr); float a,b; char opr; printf(“n

12、输入四则运算表达式:“); scanf(“%f%c%f“, ,【例4-12】计算并输出两个数的和、差、积、商。,24,4.3 局部变量和全局变量,变量的作用域:变量在程序中可以被使用的范围。 根据变量的作用域可以将变量分为局部变量和全局变量。,局部变量(内部变量):在函数内或复合语句内定义的变量以及形参。 作用域:函数内或复合语句内。,4.3.1 局部作用域和局部变量,【例】分析下面程序的运行结果及变量的作用域。,25,void sub(int a,int b) int c; a=a+b; b=b+a; c=b-a; printf(“sub:ta=%d b= %d c= %dn“,a,b,c)

13、; ,void main( ) int a=1,b=1,c=1; printf(“main:ta=%d b= %d c= %dn“,a,b,c); sub(a,b); printf(“main:ta=%d b= %d c= %dn“,a,b,c); int a=2,b=2; printf(“comp:ta=%d b= %d c= %dn“,a,b,c); printf(“main:ta=%d b= %d c= %dn“,a,b,c); ,“分程序”或“程序块”,程序输出结果: main: a=1 b= 1 c= 1 sub: a=2 b= 3 c= 1 main: a=1 b= 1 c= 1

14、comp: a=2 b= 2 c= 1 main: a=1 b= 1 c= 1,26,4.3.2 全局作用域和全局变量,全局变量(外部变量):在函数外部定义的变量。 作用域:从定义变量的位置开始到本源文件结束。 如在其作用域内的函数或分程序中定义了同名局部变量,则在局部变量的作用域内,同名全局变量暂时不起作用。,【例】全局变量和局部变量的作用域。,27,int a = 5; void f(int x, int y) int b,c; b=a+x; c=a-y; printf(“%dt%dt%dn“,a,b,c); ,main( ) int b=6,c=7; f(b,c); printf(“%d

15、t%dt%dn“,a,b,c); int a=9,b=8; printf(“%dt%dt%dn“,a,b,c); c=10; printf(“%dt%dt%dn“, a,b,c); printf(“%dt%dt%dn“,a,b,c); printf(“%dt%dt%dn“,a,b,c); ,程序输出结果: 5 11 -2 5 6 7 9 8 7 9 8 10 9 8 10 5 6 10,int,28,4.4 变量的生存期和存储类别,4.4.1 变量的生存期,变量的生存期:变量在内存中占据存储空间的时间。,存储分配,动态存储变量,29,4.4.2 变量的存储类别,变量的属性,数据类型: 决定为变量分配内存单元的长度, 数据的存放形式, 数的范围。,存储类别: 决定了变量的生存期, 给它分配在哪个存储区。,30,变量定义语句的一般形式,存储类别 数据类型 变量名1,

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

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

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