2010年C语言课件第四章 函数

上传人:我*** 文档编号:141017525 上传时间:2020-08-03 格式:PPT 页数:61 大小:1.05MB
返回 下载 相关 举报
2010年C语言课件第四章 函数_第1页
第1页 / 共61页
2010年C语言课件第四章 函数_第2页
第2页 / 共61页
2010年C语言课件第四章 函数_第3页
第3页 / 共61页
2010年C语言课件第四章 函数_第4页
第4页 / 共61页
2010年C语言课件第四章 函数_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《2010年C语言课件第四章 函数》由会员分享,可在线阅读,更多相关《2010年C语言课件第四章 函数(61页珍藏版)》请在金锄头文库上搜索。

1、第6章 函数与预处理,6.1 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法: 自上向下,逐步分解,分而治之,C是模块化程序设计语言,C程序结构,C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用,函数分类 从用户角度 标准函数(库函数):由系统提供 用户自定义函数 从函数形式 无参函数 有参函数,使用库函数应注意: 1

2、、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件,6.2函数的定义 例:计算,void main() int m,n,k,t1,t2,t3,i; scanf(“%d%d”,t1=m!,t2=n!,t3=(m-n)!,int f(int x) int t=1; for (i=1;i=x;i+) t=t*i; return t; ,t1=f(m),t2=f(n),t3=f(m-n),k=t1*t2/t3; printf(“k=%dn”,k); ,t1=1; for (i=1; i=m; i+) t1=t1*i;,t2=1; for (i=1

3、; i=n; i+) t2=t2*i;,t3=1; for (i=1; i=m-n; i+) t3=t3*i;,double sin(double x) ,函数定义一般格式,合法标识符,函数返回值类型 缺省int型 无返回值void,函数体,例 有参函数(现代风格) int max(int x,int y) int z; z=xy?x:y; return(z); ,例 无参函数 void printstar( ) printf(“*n”); 或 void printstar(void ) printf(“*n”); ,6.2 函数返回值 返回语句 形式: return(表达式); 或 retu

4、rn 表达式; 或 return; 功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数 说明: 函数中可有多个return语句 若无return语句,遇 时,自动返回调用函数 若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换 void型函数,例 函数返回值,void main() float a,b,c; scanf(%f,%f, ,例 函数返回值类型转换,void main() float a,b; int c; scanf(%f,%f, ,void disp(int x,int y ) int t; t=x+y; printf(%d+

5、%d=%dn,x,y,t); void main() int a=5,b=20; disp(a,b); ,例 无返回值函数,return;,6.2 函数参数与函数调用,1、函数参数 函数定义中形式参数,形参 函数调用中实在参数,实参 形参一般是变量名 实参可以是常量、变量、表达式,且有确定的值 函数调用时,首先将实参的值传送给形参(此时需要给形参分配存储空间),然后执行函数体。函数执行完毕返回时,要释放形参所占用的存储空间,void main() float a,b,c; scanf(%f,%f, ,2、函数调用形式 函数名(实参表) 说明: 实参与形参个数相等,类型一致,按顺序一一对应 实参

6、表求值顺序,因系统而定(Turbo C 自右向左),应特别注意。,3、函数调用方式 函数语句: 例 printstar(); printf(“Hello,World!n”); 函数表达式: 例 m=max(a,b)*2; c=getchar(); 函数参数: 例 printf(“%d”,max(a,b); m=max(a,max(b,c);,4、函数原型声明 对被调用函数要求: 必须是已存在的函数 库函数: #include 用户自定义函数: 函数类型说明 函数原型声明 一般形式: 函数类型 函数名(形参类型 形参名,. ); 或 函数类型 函数名(); 作用:告诉编译系统函数类型、参数个数及

7、类型,以便检验 函数定义与函数声明不同 函数说明位置:程序的数据说明部分(函数内或外),下列情况下,可不作函数声明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 有些系统(如Borland C+)要求函数声明指出函数返值类型和形参类型,并且对void 和 int 型函数也要进行函数声明,例 函数原型声明举例,5、 函数参数及其传递方式 形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式,例 比较两个数并输出大者,void main() int a,b,c; scanf(%d,%d, ,说明: 实参必须有确定的值

8、 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换函数调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存;并将实参的值传送给形参;然后执行函数体。函数执行完毕返回时,要释放形参所占用的存储空间,例,#include int sum(int x,int y) int t; t=x+y; return t; void main() int a=10,b=5; int c; c=sum(a,b); cout“a+b=”c; ,int sum(int x,int y) int t; t=x+y; return t ; ,函数调用过程示意图,10,10,5,5,a,x

9、,b,y,返回值15,?,?,c,t,例 计算x的立方,#include float cube(float x) return(x*x*x); void main() float a, product; printf(Please input value of a:); scanf(%f, ,x,1.2,1.728,6.3参数传递方式 值传递方式 方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向传递,例 交换两个数,#include void main() int x=7,y=11; pr

10、intf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); printf(x=%d,ty=%dn,x,y); void swap(int a,int b) int temp; temp=a; a=b; b=temp; ,地址传递 方式:函数调用时,将数据的存储地址作为参数传递给形参 特点: 形参与实参占用同样的存储单元 “双向”传递 实参和形参必须是地址常量或变量,#include void swap(int *p1, int *p2 ); int p; p=*p1; *p1=*p2; *p2=p; void main() int a,b; sca

11、nf(%d,%d, ,例 交换两个数,void main() int i=2,p; p=f(i,+i); printf(%d,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,例 参数求值顺序,void main() int i=2,p; p=f(i, i+); printf(%d,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,运行结果:0,运行结果:1,又

12、例:printf(%d,%d,%dn,i,i+,+i);,避免使用!,6.3 数组作为函数参数 数组元素作函数实参值传递,例:从键盘输入3个整数并存于数组a中,计算他们的和并输出。,#include int sum(int x,int y) return x+y ; void main() int a3,b; for (int i=0;i3;i+) scanf(“%d”,ai); b=sum(a0,a1); printf(“sum=%dn ”,sum(b,a2); ,数组名作函数参数 地址传递 在主调函数与被调函数分别定义数组,且类型应一致 形参数组大小(多维数组第一维)可不指定 形参数组名是

13、地址变量,例 求学生的平均成绩,#include float aver (int stu10, int n); void main() int s 10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, ,float aver (int stu10, int n) int i; float av,tl=0; for( i=0; in; i+ ) t += stui; av = t/n; return av; ,实参用数组名,形参用数组定义, int stu ,input(a,10);,例 数组元素与 数

14、组名 作函数参数比较,#include void swap2(int x,int y) int z; z=x; x=y; y=z; main() int a2=1,2; swap2(a0,a1); printf(a0=%dna1=%dn,a0,a1); ,值传递,#include void swap2(int x) int z; z=x0; x0=x1; x1=z; main() int a2=1,2; swap2(a); printf(a0=%dna1=%dn,a0,a1); ,地址传递,例 数组元素与 数组名 作函数参数比较,例 数组排序-简单选择排序,9,49,i=0,例 数组排序-简单

15、选择排序,13,68,i=1,i=8,例 数组排序-简单选择排序,void output(int a,int n) int i; for(i=0;i10;i+) printf(%d ,ai); printf(n); ,Output(a,10);,例 求二维数组中最大元素值,int max (int array34) int i,j,k,max; max=array00; for(i=0;imax) max=arrayij; return(max); void main() int a34=1,3,5,7, 2,4,6,8,15,17,34,12; printf(max value is %dn,max (a); ,例 求二维数组中各行元素之和,sum(int x3, int re ,int r, int c) int i,j; for(i=0; ir; i+) re i=0; for(j=0; jc; j+) re i+=xij; void main() int a23=3,6,9,1,5,7; int b2, row=2,col=3,i; sum(a,b,row,col); for(i=0;irow;i+) printf(The sum of row%d=%dn,i,bi); ,18,13,6.4 函数的嵌套与递归调用 嵌套调用 C规定:函数定义不

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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