武汉大学c课件第10讲(05级)

上传人:tian****1990 文档编号:75656963 上传时间:2019-01-31 格式:PPT 页数:36 大小:502.81KB
返回 下载 相关 举报
武汉大学c课件第10讲(05级)_第1页
第1页 / 共36页
武汉大学c课件第10讲(05级)_第2页
第2页 / 共36页
武汉大学c课件第10讲(05级)_第3页
第3页 / 共36页
武汉大学c课件第10讲(05级)_第4页
第4页 / 共36页
武汉大学c课件第10讲(05级)_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《武汉大学c课件第10讲(05级)》由会员分享,可在线阅读,更多相关《武汉大学c课件第10讲(05级)(36页珍藏版)》请在金锄头文库上搜索。

1、第十讲,Begin:,第七章 函数,C程序的模块化结构 函数的分类与定义 函数调用的一般形式 函数的参数 函数的返回值 数组作为函数参数,7.1.1 C程序的模块化结构,C程序的模块化结构,结构化程序设计方法: 自顶向下,逐步细化; 模块化设计; 结构化编码。 特点: 程序结构清晰,易于维护,增加了函数的可重用性和可扩充性。,7.1.2 函数的分类与定义,1函数的分类 从用户的观点分为:C编译系统提供的标准库函数和用户自定义函数; 从函数间数据传送的关系分为:有参函数、无参函数、有返回值函数、无返回值函数; 从函数的调用分为:内部函数和外部函数。,格式一 : 类型符 函数名称( 形参表 ) 形

2、参说明 数据说明语句 可执行语句 格式二 : 类型符 函数名称(类型 形参1 , ) 数据说明语句 可执行语句 ,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 ;

3、int z ; z = x + y ; return z ; ,类型说明符: 指明函数的类型,函数的类型是指函数的返回值的类型,函数返回值所具有的数据类型的种类与变量相同。省略时则默认为int型。若明确表示函数 “不带回值“,可以用 “ void “ 作类型符,称“无类型“或称“空类型“。,7.1.2 函数的分类与定义,float sum ( x , y ) float x , y ; int z ; z = x + y ; return z ; ,函数名: 通常是一个标识符,在一个程序中除了主函数外其余函数的名字可以任意取,但应有意义。 “()“ 函数标志。,7.1.2 函数的分类与定义,f

4、loat sum ( float x , float y ) float sum ( x , y ) float x , 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 ; ,函数体: 函数中最外层一对花括弧“ “括起来的内容,

5、它由若干个数据说明语句和可执行语句组成,决定函数要实现的功能、完成的任务。 函数体内若无任何语句时,为空函数。,7.1.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。 确定函数: 函数的返回值

6、即为 n!的值,设为实型。,程序:float jiechen( int n ) float x, y ; for ( x=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(“%

8、d”, ,调用方式 1)函数语句: 例 printf(”); 2)函数表达式: 例 c=2*pow (3.5 ,6); 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=1

9、9 ; printf(“%dn“, fun1( x, y) ); ,程序运行结果: 4,7.1.3 函数调用的一般形式,#include 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(

10、-2 ); putchar( c ); sqrt((x*x+2)*(y+z);,形参与实参,7.1.4 函数的参数,形参(形式参数)是函数定义时,参数表中的参数。形式参数只能是变量。在函数定义时,参数表中的形参并没有具体的值,系统也不为其分配存储单元。 例如: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 =

11、y * y ; printf( “3) x=%d, y=%d, z=%dn“, x, y, z); main( ) int a=2, 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 语句 作用:将表达式的值传给调用函数,并把控制权转向调用函数实现函数的返回,即

12、结束被调用函数的执行,并将控制返回到调用它的函数。 格式: return ( 表达式 ) ;,7.1.5 函数的返回值,对于不需要提供返回值的函数可以直接用void作为函数类型定义,以表明此函数返回值为”无类型”或”空类型”。 void psch() printf(“Wuhan Universityn“); main() psch( ); ,void函数,7.1.5 函数的返回值,函数原型:在定义或调用函数前,对该函数进行声明。 作用:将函数名、函数类型及形参个数、类型、顺序等通知编译系统,当函数被调用时,可对实参、形参的类型、个数匹配情况进行检查。 格式: 类型符 函数名(参数类型1, );

13、 或: 类型符 函数名(类型符 形参1, );,7.1.6 对被调用函数的说明,例 利用变量换数,void huanshu1( int x, int 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

14、 = x ; x = y ; y = t ; printf(“ 3)x = %d ,y = %dn“,x ,y ); ,7.1.6 对被调用函数的说明,例 判定素数。,#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) retur

15、n 0 ; return 1 ; ,7.1.6 对被调用函数的说明,数组元素做函数实参,遵循”值传送”特性,此时形参为变量。 数组名可做实参和形参,传送的是整个数组。 在用数组名做函数参数时,实参和形参都应该用数组(或指针变量)。,数组作为函数的参数,7.1.7 数组作为函数的参数,数组元素作为函数参数举例:,(1),7.1.7 数组作为函数的参数,(2),7.1.7 数组作为函数的参数,数组名作函数参数时应注意:,1)数组名作函数参数时,应在主调函数和被调函数中分别定义数组。 2)实参数组与形参数组的类型必须相同,但大小可以不同。 3)形参数组的一维下标可以省略。 4)数组名表示的是数组元素的首地址,数组名作函数参数时,传递的是整个数组。实参与形参之间的数据传递是地址传递。,7.1.7 数组作为函数的参数,数组名作函数的参数举例:,7.1.7 数组作为函数的参数,例 利用数组换数,void huanshu2(int shuzu ,int n); main( ) /* 主函

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

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

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