1 / 28

第七章 函数

第七章 函数.  概述  函数的定义  函数参数和函数值  函数的调用  局部变量和全局变量  动态变量与静态变量. 7.1 概述 7.2 函数的定义 7.3函数参数和函数值. 7.1 概述. 例1:打印如下所示图案. ********* hello *********. 例1 : #include&lt;stdio.h&gt; void main( ) { printf(“*********<br>”); printf(“ hello!<br>”); printf(“*********<br>”); }. 例1(续) :.

bracha
Download Presentation

第七章 函数

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 函数  概述  函数的定义  函数参数和函数值  函数的调用  局部变量和全局变量  动态变量与静态变量

  2. 7.1 概述 7.2 函数的定义 7.3函数参数和函数值

  3. 7.1 概述 例1:打印如下所示图案 ********* hello *********

  4. 例1: #include<stdio.h> void main( ) { printf(“*********\n”); printf(“ hello!\n”); printf(“*********\n”); }

  5. 例1(续): #include<stdio.h> void printstar( ) { printf("*********\n"); } void main( ) { printstar( ); printf(" hello!\n"); printstar( ); }

  6. 编制复杂大程序的一种有效方法:模块化,即把一个较大的问题分解成若干个功能相对独立的子问题,每个子问题由一个模块实现。一个程序是由若干个程序模块组成的,在C语言中,这样的模块通过函数实现。编制复杂大程序的一种有效方法:模块化,即把一个较大的问题分解成若干个功能相对独立的子问题,每个子问题由一个模块实现。一个程序是由若干个程序模块组成的,在C语言中,这样的模块通过函数实现。

  7. C语言是一种函数语言,C程序由一个或多个函数组成,每个函数都有自己的名字,实现特定的功能。一个C程序必须有且只能有一个主函数main()函数。程序的执行从main()函数开始,在此过程中,遇到函数调用语句便暂时中断main( )函数的执行,将流程转到被调函数,执行完被调函数或遇到return语句再返回到主函数,继续执行main()函数。程序最终在main()函数中结束。 一个 函数的应用涉及3个环节:函数定义、函 数声明与函数调用。

  8. 7.2 函数的定义 一个C函数的定义由函数头部和函数体 两部分组成,形式如下: 例如:void main () 函数头部 { 函数体 } 一般包括:声明部分 执行部分

  9. 1、无参函数的定义格式 形如: voidprintstar( ) { printf(“*********\n”); } 函数类型 函数名 函数体

  10. 2、有参函数的定义格式 形如: int max( int x, int y) { int z; z=x>y?x:y; return z; } 函数名 函数参数类型 函数类型 函数参数名 函数体

  11. 例2 求一个数的绝对值 #include<stdio.h> int absvalue(int a) { if(a>=0) return a; else return -a; } void main( ) { int x, abs; scanf(“%d”,&x); abs= absvalue(x); printf(“\nThe absolute value is:%d\n”,abs); }

  12. 函数头部一般包括函数名、函数类型、函数 参数名、函数参数类型。 (1)函数类型说明符定义函数返回值的类型,如缺 省,默认int型。 (2)函数名,即函数的名称,与变量的命名规则相同 (3)形参表中形参的个数可以是一个、多个或没有。 函数被调用前,形参的值是不确定的,当函数被 调用时,才给它分配存储单元,并把实参的值传 递给形参,使其具有确定的值。 (4)函数必须定义在其它函数外部。

  13. 例3:取a,b之中较大者,赋值给变量c,然后输出c的值。例3:取a,b之中较大者,赋值给变量c,然后输出c的值。 #include<stdio.h> void main( ) { int a,b,c; int max(int x,int y); scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); } int max(int x,int y) { int z; if(x>y) z=x; else z=y; return z; }

  14. 说明: (1) 定义函数时函数名后面的变量称为形式参数 (简称形参)。在主调函数中调用一个函数时, 函数名后面的参数称为实际参数(简称实参)。(2)之所以被称为形参是因为函数被调用前,系统 不为函数定义中的参数分配存储单元。函数被 调用时,才为它分配存储单元。调用结束,形 参所占的内存单元也被释放。 说明:

  15. (3)调用函数时,大多数情况下,主调函数和被(3)调用函数时,大多数情况下,主调函数和被 调用函数之间有数据传递关系。 有参函数调用时,实参与形参按顺序对应 结合。C语言规定,实参对形参的数据传递是 “单向的值传递”,即只能由实参传递给形参, 不能由形参传递给实参。

  16. a 5 b 8 5 8 x y a 5 b 8 8 5 x y 例4 #include<stdio.h> void main( ) { int a=5,b=8; change(a,b); printf("a=%d,b=%d\n",a,b); } change(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d\n",x,y); } 形参值变化,实参不变 引申:要想通过调用change函数交换 a,b的位置,需使用指针动态分配内存 运行结果: x=8,y=5 a=5,b=8

  17. 三、函数的返回值 1、函数的返回值通过函数中的return语句 获得,如果需要从被调函数带回一个函 数值(供主调函数使用),被调函数必 须有return语句。 格式:return(表达式);或 return 表达式; 2、函数类型说明符定义函数返回值的类型, 如缺省,默认int型。

  18. 3、如果被调函数中没有return语句,函数不 是不带回值,而是带回一个不确定的值。 4、一个函数可以有一个以上的return语句。 例: if(x>y) {z=x*y;return(z);} else {w=(x*y)/(x+y);return(w);} 5、为了明确表示“不带回值”,可以用void 定义为“空类型”。 例:void printstar( ) { printf(“*********\n”); }

  19. 2、写出程序的运行结果 #include<stdio.h> void main( ) { int a=10,b=20; int av; av=aver(a,b); printf("%d,%d,%d\n",a,b,av); } int aver(int a,int b) { a+=b; b=a/2; printf("%d,%d\n",a,b); return b; }

  20. 三、对被调用函数的声明和函数原型 #include<stdio.h> void main( ) {int a=10,b=20; float av; float aver(int a,int b); av=aver(a,b); printf("%d,%d,%f\n",a,b,av); } float aver(int a,int b) {a+=b; b=a/2.0; printf("%d,%d\n",a,b); return b; }

  21. 一个函数调用另一个函数需要具备哪些条件 1、被调用函数必须是已经存在的函数; 2、如果使用库函数, 一般还应在本文件开头用 #include命令将调用有关库函数所需要的信 息包含进本文件中。 3、如果使用用户自己定义的函数, 而且被调用 函数在主调函数的后面,一般还应在主调 函数中对被调用函数进行声明,将有关信息 通知编译系统。

  22. 练习: 1、以下方式定义的函数fun: fun(int x) { printf(“%d”,x); } A)返回值为void类型 B)无法确定返回值类型 C)返回值为int类型 D)没有返回值

  23. 2、C语言中函数的返回值类型是由[ ]决定的。 A)return语句的表达式类型 B)调用该函数的主调函数类型 C)调用函数临时决定的 D)定义函数所指定的函数类型

  24. 练习3、写出程序的运行结果 #include<stdio.h> void main( ) {incx( ); incy( ); incx( ); incy( ); } incx( ) { int x=0; printf("x=%d\n",++x); } incy( ) {int y=0; printf("y=%d\n",y); }

  25. 练习: 4、写出程序的运行结果 #include"stdio.h" num() { int a=15,b=10; int x,y; x=a-b;y=a+b; return; } void main() {int x,y; int a=7,b=5; x=a+b; y=a-b; num(); printf("x=%d,y=%d\n",x,y); }

  26. 程序设计: (1)在主函数中输入球体的半径, 分别调用函数求出球的表面积和体积,并输出计算结果。 (2)在主函数中输入一个四位数,调用一个 函数输出这四个字符。

  27. #define PI 3.14 #include<stdio.h> float area(float r) {return 4*PI*r*r; } float volumn(float r) { return 4.0/3*PI*r*r*r; } void main( ) {float r; printf(" please input radius:" ); scanf(“%f”,&r); printf("area is %f\n",area(r)); printf("volumn is %f\n",volumn(r)); }

  28. #include<stdio.h> void main( ) {void zifu(int a); int a; printf("Input an int\n"); scanf("%d",&a); zifu(a); } void zifu(int b) {int qian,bai,shi,ge; qian=b/1000; bai=b%1000/100; shi=b%100/10; ge=b%10; printf("qian=%d,bai=%d,shi=%d,ge=%d\n",qian,bai,shi,ge); }

More Related