版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十讲,Begin:,第七章 函数,C程序的模块化结构 函数的分类与定义 函数调用的一般形式 函数的参数 函数的返回值 数组作为函数参数,7.1.1 C程序的模块化结构,C程序的模块化结构,结构化程序设计方法: 自顶向下,逐步细化; 模块化设计; 结构化编码。 特点: 程序结构清晰,易于维护,增加了函数的可重用性和可扩充性。,7.1.2 函数的分类与定义,1函数的分类 从用户的观点分为:C编译系统提供的标准库函数和用户自定义函数; 从函数间数据传送的关系分为:有参函数、无参函数、有返回值函数、无返回值函数; 从函数的调用分为:内部函数和外部函数。,类型符 函数名称(类型 形参1 , ) 数据说
2、明语句 可执行语句 ,2、 函数定义的一般形式,7.1.2 函数的分类与定义,函数定义的一般形式举例:,(1) float sum ( x , y ) float x , y ; int z ; z = x + y ; return z ; ,(2) float sum (float x, float y ) int z ; z = x + y ; return z ; ,7.1.2 函数的分类与定义,函数定义的一般形式说明:,(1) float sum ( x , y ) float x , y ; int z ; z = x + y ; return z ; ,类型说明符: 指明函数的类型
3、,函数的类型是指函数的返回值的类型,函数返回值所具有的数据类型的种类与变量相同。省略时则默认为int型。若明确表示函数 不带回值,可以用 void 作类型符,称无类型或称空类型。,7.1.2 函数的分类与定义,float sum ( x , y ) float x , y ; int z ; z = x + y ; return z ; ,函数名: 通常是一个标识符,在一个程序中除了主函数外其余函数的名字可以任意取,但应有意义。 () 函数标志。,7.1.2 函数的分类与定义,float sum ( float x , float y ) float sum ( x , y ) float x
4、 , y ; int z ; z=x+y; return z ; ,参数表( 形参表 ): 函数定义时的参数称为形式参数,形式参数彼此间用逗号分隔。 形式参数省略时称无参函数,但此时函数名后的圆括号不能省。 形参说明是用来指明各个形式参数的类型,它随形参的存在而存在。,7.1.2 函数的分类与定义,float sum ( x , y ) float x , y ; int z ; z = x + y ; return z ; ,函数体: 函数中最外层一对花括弧 括起来的内容,它由若干个数据说明语句和可执行语句组成,决定函数要实现的功能、完成的任务。 函数体内若无任何语句时,为空函数。,7.1.
5、2 函数的分类与定义,例 编写自定义函数计算:,分析: 确定形参:求 c 必须知道 f 的大小,设形参为temp。 确定函数:函数的返回值即为 c 的值,设为实型。,程序:float ftoc( temp ) float temp ; float c ; c =(5./9.)*( temp 32 ); return c ; ,7.1.2 函数的分类与定义,例 编写一个自定义函数求 n!,分析: 确定形参: 求 n!必须知道 n 的大小,设形参为 n。 确定函数: 函数的返回值即为 n!的值,设为实型。,程序:float jiechen( int n ) float x, y ; for ( x
6、=y=1.0; x=n; x+ ) y *= x ; return y ; ,7.1.2 函数的分类与定义,7.1.3 函数调用的一般形式,函数调用的一般形式是: 函数名(实参表列),说明: 实参与形参的个数相等、类型相同、顺序一致,呈一一对应的关系。 实参的求值顺序不确定,与所用系统有关。 实参应有确定的值。,函数调用时,需要注意的几点: C语言参数传递时,一般采用传值方式,把各个实参值分别顺序对应传给形参。被调函数执行中形参值的变化不会影响主调函数中实参变量的值。 数组名作为参数传送时不同,是“传址”,会对主调函数中的数组元素产生影响。 注意采用函数原型对被调函数参数类型的一致。如不作说明
7、,可能会引起参数传送出错。 函数调用也是一种表达式,其值就是函数的返回值。,7.1.3 函数调用的一般形式,7.1.3 函数调用的一般形式,自定义函数: float jiechen( int n ) float x, y ; for( x=y=1.0; x=n; x+) y *= x ; return y ; ,例 调用自定义函数求 n!,调用: void main( ) int n; float f ; printf(“Please input n:”); scanf(“%d”, ,调用方式 1)函数语句: 例 printf(”); 2)函数表达式: 例 c=2*pow (3.5 ,6);
8、3)函数参数: 例 c=2*pow (pow (3.5,6),6); 例 printf(”%fn”,pow (3.5,6);,7.1.3 函数调用的一般形式,例:说出下列程序的运行结果,fun2( int a, int b ) int c ; c=a*b%3 ; return c ; fun1( int a, int b ) int c ; a+=a ; b+=b ; c = fun2( a, b ) ; return c*c ; main ( ) int x=11, y=19 ; printf(%dn, fun1( x, y) ); ,程序运行结果: 4,7.1.3 函数调用的一般形式,#i
9、nclude func(int a, int b) int c; c=a+b; return c; main( ) int x=6, y=7, z=8, r ; r=func(x-,y+,x+y), z- ); printf(“r=%dn”,r); ,程序运行结果: r=21,例:说出下列程序的运行结果,7.1.3 函数调用的一般形式,实参(实际参数)是函数调用时调用函数传送给被调用函数参数的实际值。实参可以是常量、变量和表达式,实参必须有确定的值。 例如: fabs( -2 ); putchar( c ); sqrt((x*x+2)*(y+z);,形参与实参,7.1.4 函数的参数,形参(形
10、式参数)是函数定义时,参数表中的参数。形式参数只能是变量。在函数定义时,参数表中的形参并没有具体的值,系统也不为其分配存储单元。 例如:max( float x, float y ) float ftoc( float temp ) ,7.1.4 函数的参数,例 形参和实参的运用,try( int x, int y, int z ) printf( 2) x=%d, y=%d, z=%dn, x, y, z); z = x + y ; x = x * x ; y = y * y ; printf( 3) x=%d, y=%d, z=%dn, x, y, z); main( ) int a=2,
11、 b =3, c=4 ; printf( 1) a=%d, b=%d, c=%dn, a, b, c ); try( a, b, c ) ; printf( 4) a=%d, b=%d, c=%dn, a, b, c ); ,7.1.4 函数的参数,说明:,7.1.4 函数的参数,函数的返回值:当被调用函数在完成一定的功能后,可以将处理的结果返回到调用函数。 方式:return 语句 作用:将表达式的值传给调用函数,并把控制权转向调用函数实现函数的返回,即结束被调用函数的执行,并将控制返回到调用它的函数。 格式: return ( 表达式 ) ;,7.1.5 函数的返回值,对于不需要提供返回值
12、的函数可以直接用void作为函数类型定义,以表明此函数返回值为”无类型”或”空类型”。 void psch() printf(Wuhan Universityn); main() psch( ); ,void函数,7.1.5 函数的返回值,函数原型:在定义或调用函数前,对该函数进行声明。 作用:将函数名、函数类型及形参个数、类型、顺序等通知编译系统,当函数被调用时,可对实参、形参的类型、个数匹配情况进行检查。 格式: 类型符 函数名(参数类型1, ); 或: 类型符 函数名(类型符 形参1, );,7.1.6 对被调用函数的说明,例 利用变量换数,void huanshu1( int x, i
13、nt y ); /* 函数原型声明*/ main( ) /* 主函数 */ int a=5,b=10; printf( 1)a = %d,b = %dn,a ,b); huanshu1( a , b ) ; printf( 4)a = %d,b = %dn,a ,b); void huanshu1( int x, int y ) /* 利用变量换数 */ int t ; printf( 2)x = %d ,y = %dn,x ,y ); t = x ; x = y ; y = t ; printf( 3)x = %d ,y = %dn,x ,y ); ,7.1.6 对被调用函数的说明,例 判定
14、素数。,#include math.h int isprime( int ); /* 函数原型声明*/ main( ) int x=35; if ( isprime(x) printf(%d 是素数。n, x ); else printf(%d 不是素数。n, x ); isprime( int a ) int i; for ( i=2 ; i=sqrt(double)a); i+ ) if ( a%i = 0) return 0 ; return 1 ; ,7.1.6 对被调用函数的说明,数组元素做函数实参,遵循”值传送”特性,此时形参为变量。 数组名可做实参和形参,传送的是整个数组。 在用
15、数组名做函数参数时,实参和形参都应该用数组(或指针变量)。,数组作为函数的参数,7.1.7 数组作为函数的参数,数组元素作为函数参数举例:,(1),7.1.7 数组作为函数的参数,(2),7.1.7 数组作为函数的参数,数组名作函数参数时应注意:,1)数组名作函数参数时,应在主调函数和被调函数中分别定义数组。 2)实参数组与形参数组的类型必须相同,但大小可以不同。 3)形参数组的一维下标可以省略。 4)数组名表示的是数组元素的首地址,数组名作函数参数时,传递的是整个数组。实参与形参之间的数据传递是地址传递。,7.1.7 数组作为函数的参数,数组名作函数的参数举例:,7.1.7 数组作为函数的参
16、数,例 利用数组换数,void huanshu2(int shuzu ,int n); main( ) /* 主函数 */ int ab2= 5 , 10 , i; for (i=0;i2;i+) printf(1)ab%d=%2d ,i,abi); huanshu2( ab, 2 ); printf(n); for (i=0;i2;i+) printf(4)ab%d=%2d ,i,abi); ,7.1.7 数组作为函数的参数,void huanshu2(int shuzu , int n ) int t, i; printf(n); for (i=0;in;i+) printf(2)shuzu%d=%2d ,i,shuzui); for (i=0;in-1;i+) t=shuzui; shuzui=shuzui+1; shuzui+1=t; printf(n); for ( i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混合料工班组考核竞赛考核试卷含答案
- 海上平台水手安全生产规范强化考核试卷含答案
- 药膳制作师安全培训效果竞赛考核试卷含答案
- 稀土电解工岗前技术传承考核试卷含答案
- 水禽饲养员岗前设备维护考核试卷含答案
- 衬板工安全演练水平考核试卷含答案
- 1第十四单元 走向整体的世界训练册
- 重质纯碱工安全操作知识考核试卷含答案
- 矿用电机车装配工安全生产基础知识测试考核试卷含答案
- 江西省2025-2026学年天工杯竞赛高中化学试题(含答案)
- 教师形体与礼仪(成都师范学院)知到智慧树网课答案
- 矿山工程质量监理评估报告范文
- 2025至2030中国UDCA的药物行业发展趋势分析与未来投资战略咨询研究报告
- 医养结合机构运营管理规范
- DB11!T 2035-2022供暖民用建筑室温无线采集系统技术要求
- 眼部冲洗课件
- 《水力学》课件-第2章 水静力学
- 垂体瘤规范化诊治
- 中医药膳学教学课件
- 江苏南京师范大学附属中学2024~2025学年高一下册6月期末考试数学试题含解析
- 动土作业地下管线保护
评论
0/150
提交评论