收藏 分销(赏)

C语言第6章函数省公共课一等奖全国赛课获奖课件.pptx

上传人:天**** 文档编号:3299567 上传时间:2024-06-29 格式:PPTX 页数:84 大小:429.76KB 下载积分:16 金币
下载 相关 举报
C语言第6章函数省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共84页
C语言第6章函数省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共84页


点击查看更多>>
资源描述
第六章第六章第六章第六章 函函函函 数数数数 10/10/1第1页函数是函数是C语言基本构件,是语言基本构件,是C程序必不可少基本程序必不可少基本元素。在前面几章中,已经使用了如元素。在前面几章中,已经使用了如printf()、scanf()、getchar()、putchar()等标准等标准C库函数库函数;还有还有 strlen(string),),strcmp(string1,string2)等字)等字符串函数。符串函数。10/10/2第2页程序员在设计一个复杂应用时,往往也是把整个程序划程序员在设计一个复杂应用时,往往也是把整个程序划分为若干个分为若干个功效较为单一程序模块功效较为单一程序模块,然后分别给予实现,然后分别给予实现,最终再把全部程序模块象搭积木一样装配起来。最终再把全部程序模块象搭积木一样装配起来。这种在程序设计中分而治之策略,被称为这种在程序设计中分而治之策略,被称为模块化程序设模块化程序设计方法计方法。C语言程序整体由一个或多个函数组成。每个函数都含有语言程序整体由一个或多个函数组成。每个函数都含有各自独立功效和显著界面。各自独立功效和显著界面。6.1 6.1 函数概述函数概述函数概述函数概述10/10/3第3页 编写一个简单函数编写一个简单函数编写一个简单函数编写一个简单函数程序一:程序一:main()printf(*n);printf(Hello world!n);printf(*n);程序二:程序二:#include#include main()main()void print_star();void print_star();void print_text();void print_text();print_star();print_star();print_text();print_text();print_star();print_star();void print_line()printf(*n);void print_text()printf(Hello world!n);运行结果:运行结果:*Hello World!Hello World!*10/10/4第4页若要出现以下结果,应该怎样修改程序?若要出现以下结果,应该怎样修改程序?*Hello World!Hello World!*Hello World!Hello World!*#Hello World!Hello World!#Hello World!Hello World!#10/10/5第5页修改程序一:修改程序一:main()printf(*n);printf(Hello world!n);printf(*n);printf(*n);printf(Hello world!n);printf(*n);程序二:程序二:main()print_line();print_text();print_line();print_line();print_text();print_line();print_line()printf(*n);print_text()printf(Hello world!n);*Hello World!Hello World!*Hello World!Hello World!*10/10/6第6页修改程序一:修改程序一:main()printf(#n);printf(Hello world!n);printf(#n);printf(#n);printf(Hello world!n);printf(#n);修改程序二:修改程序二:main()print_line();print_text();print_line();print_line();print_text();print_line();print_line()printf(#n);print_text()printf(Hello world!n);#Hello World!Hello World!#Hello World!Hello World!#修改程序一:修改程序一:main()printf(*n);printf(Hello world!n);printf(*n);printf(*n);printf(Hello world!n);printf(*n);函数调用函数调用函数定义函数定义10/10/7第7页说明:说明:(1)函数是按要求格式书写能完成特定功效一段程序。)函数是按要求格式书写能完成特定功效一段程序。(2)C语言是以源文件为单位进行编译,一个源程序由一语言是以源文件为单位进行编译,一个源程序由一个或多个函数组成。个或多个函数组成。(3)不论)不论main函数放在程序任何位置,函数放在程序任何位置,C语言中程序总是语言中程序总是从从main函数开始执行,调用其它函数后,最终在函数开始执行,调用其它函数后,最终在main函数函数中结束。中结束。(4)全部函数都是平行,在定义时相互独立,一个函数不)全部函数都是平行,在定义时相互独立,一个函数不属于另一个函数。函数不能够嵌套定义,但能够相互调用,属于另一个函数。函数不能够嵌套定义,但能够相互调用,main函数能够调用任何函数,一个函数能够屡次被调用,函数能够调用任何函数,一个函数能够屡次被调用,而其它函数不能调用而其它函数不能调用main函数。函数。10/10/8第8页库函数是由编译系统提供已设计好函数,用户只需调用库函数是由编译系统提供已设计好函数,用户只需调用而无须去实现它而无须去实现它6.1.26.1.2库函数库函数库函数库函数用过了哪些库用过了哪些库函数?函数?printf()()scanf()()getchar()()等,包含在等,包含在 “stdio.h”strlen(str)strcmp(str1,str2)等,包含在等,包含在“string.h”pow()()sqrt()()等,包含在等,包含在“math.h”10/10/9第9页使用库函数应注意以下几个问题:使用库函数应注意以下几个问题:1、函数功效;、函数功效;2、函数参数数目和次序,以及每个参数意义及类型;、函数参数数目和次序,以及每个参数意义及类型;3、函数返回值意义及类型;、函数返回值意义及类型;4、需要使用包含文件。、需要使用包含文件。#include#include#include#include int main(void)int main(void)double x=2.0,y=3.0;double x=2.0,y=3.0;printf(%lf raised to%lf is%lfn,x,y,pow(x,y);printf(%lf raised to%lf is%lfn,x,y,pow(x,y);运行结果:运行结果:运行结果:运行结果:2.000000 raised to 3.000000 is 8.0000002.000000 raised to 3.000000 is 8.000000Press any key to continuePress any key to continue10/10/10第10页 int getchar();int getchar();stdio.h stdio.h标准输入一个字符标准输入一个字符标准输入一个字符标准输入一个字符 int getch();int getch();conio.h conio.h不回显从键盘直接读入一个字不回显从键盘直接读入一个字不回显从键盘直接读入一个字不回显从键盘直接读入一个字符符符符 int putch(int ch);int putch(int ch);conio.h conio.h向屏幕直接输出一个字符向屏幕直接输出一个字符向屏幕直接输出一个字符向屏幕直接输出一个字符 char*gets(char*);char*gets(char*);stdio.h stdio.h标准输入一行文字标准输入一行文字标准输入一行文字标准输入一行文字 int puts(char*);int puts(char*);stdio.h stdio.h标准输出一行文字(自动加换标准输出一行文字(自动加换标准输出一行文字(自动加换标准输出一行文字(自动加换行)行)行)行)double sin(double);double sin(double);math.h math.h正弦函数正弦函数正弦函数正弦函数sin(x)sin(x)sin(x)sin(x)double pow(double double pow(double x,double y);x,double y);math.h math.h x xy y double exp(double x);double exp(double x);math.h math.h e e e ex x x x double log(double x);double log(double x);double log10(double x);double log10(double x);math.h math.h ln ln ln lnx x x x log log log log10101010 x x x x void exit(int status);void exit(int status);tdlib.h tdlib.h强制结束程序强制结束程序强制结束程序强制结束程序 惯用库函数惯用库函数惯用库函数惯用库函数10/10/11第11页库函数普通只能提供一些底层服务功效,而用户自定库函数普通只能提供一些底层服务功效,而用户自定义函数则能针对详细应用实现一些特殊功效。义函数则能针对详细应用实现一些特殊功效。用户自定义函数就是由程序员自己定义和设计函数用户自定义函数就是由程序员自己定义和设计函数,需要程序员来编写函数功效实当代码。需要程序员来编写函数功效实当代码。定义函数时是相互独立,一个函数并不隶属于另一个定义函数时是相互独立,一个函数并不隶属于另一个函数,即函数,即函数不能嵌套定义,但能够相互调用,函数不能嵌套定义,但能够相互调用,但不能调但不能调用用main函数。函数。6.26.26.26.2用用用用户户户户自定自定自定自定义义义义函数函数函数函数10/10/12第12页6.2.16.2.16.2.16.2.1函数定函数定函数定函数定义义义义格式格式格式格式1.1.无参函数定义格式无参函数定义格式 类型说明符类型说明符 函数名函数名 ()()函数体函数体 其中,方括号括起来内容是可选项。其中,方括号括起来内容是可选项。2.有参函数定义格式有参函数定义格式类型说明符类型说明符 函数名(形式参数申明)函数名(形式参数申明)函数体函数体 比如:比如:print_line(void)printf(#n);int max(int x,int y)int z;z=xy?x:y;return(z);10/10/13第13页3.3.空函数空函数C C语言中能够有语言中能够有“空函数空函数”,它形式为:,它形式为:类型说明符类型说明符 函数名()函数名()比如:比如:echoline()echoline()6.2.16.2.16.2.16.2.1函数定函数定函数定函数定义义义义格式格式格式格式#include sum()int main()int s=0;s=sum();printf(%d,s);10/10/14第14页6.2.26.2.26.2.26.2.2形式参数和形式参数和形式参数和形式参数和实际实际实际实际参数参数参数参数在定在定义义函数函数时时函数名后面函数名后面圆圆括号内括号内变变量名称量名称为为“形式参数形式参数”(简简称称“形参形参”),把它作被),把它作被调调函数使用函数使用时时,用于接收主,用于接收主调调函函数数传传来数据。来数据。在在调调用函数用函数时时,主,主调调函数函数函数函数调调用用语语句函数名后面句函数名后面圆圆括号中括号中参数称参数称为为“实际实际参数参数”(简简称称“实实参参”)。)。实际实际参数能参数能够够是常量、是常量、变变量或表示式。量或表示式。10/10/15第15页#include main()int x,y,z;printf(“Please enter two integer numbers:”);scanf(%d,%d,&x,&y);z=min(x,y);/函数调用函数调用printf(min is%dn,z);int min(int a,int b)/函数定义函数定义 int c;c=ab?a:b;return(c);6.2.26.2.26.2.26.2.2形式参数和形式参数和形式参数和形式参数和实际实际实际实际参数参数参数参数函数形参函数形参a,b函数实参函数实参x,y实参实参x和和y值按次序对应传值按次序对应传递给被调函数递给被调函数min(a,b)中形中形参参a和和b,x传给传给a,y传给传给b。在执行被调函数在执行被调函数min后,其后,其返回值返回值c作为函数返回值返作为函数返回值返回给主调函数,作为回给主调函数,作为min(x,y)值,赋给变量值,赋给变量z。10/10/16第16页例例6-3 编写函数求两个实数平均值。编写函数求两个实数平均值。#include float average(float x,float y)float av;av=(x+y)/2.0;return av;main()float a=1.8,b=2.6,c;c=average(a,b);/第一次调用函数第一次调用函数average()a=1.0;b=2.0;printf(The avergae of%5.2f and%5.2f is%5.2fn,a,b,average(a,b);/第二次调用函数第二次调用函数average()c=average(a,a+b);/第三次调用函数第三次调用函数average()printf(The avergae of%5.2f and%5.2f is%5.2fn,a,a+b,c);c=average(2.0,4.0);/第四次调用函数第四次调用函数average()printf(The avergae is%5.2fn,c);printf语语句中句中调调用,用,xy接收接收a,b值值形式参数形式参数x、y接收接收实实参参变变量量a、b值值 表示式表示式a+b作为实参之一作为实参之一 常量作为实参常量作为实参10/10/17第17页关于形参和实参说明以下:关于形参和实参说明以下:(1)函数中指定形参变量,在未出现函数调用时,并不占)函数中指定形参变量,在未出现函数调用时,并不占用内存中单元。在发生函数调用时,被调函数形参被暂时分用内存中单元。在发生函数调用时,被调函数形参被暂时分配内存单元,调用结束后,形参所占内存单元被自动释放。配内存单元,调用结束后,形参所占内存单元被自动释放。(2)函数一旦被定义,就可屡次调用,但必须确保形参和)函数一旦被定义,就可屡次调用,但必须确保形参和实参数据类型一致。假如实参为实参数据类型一致。假如实参为int型而形参为型而形参为float型,这是型,这是正当;假如实参为正当;假如实参为float型而形参为型而形参为int型型,则按不一样类型,则按不一样类型数值赋值规则进行转换。比如实参数值赋值规则进行转换。比如实参a为为float型变量,其值为型变量,其值为3.5,而形参,而形参x为为int型,则在传递时先将实数型,则在传递时先将实数3.5转换成整数转换成整数3,然后送到形参,然后送到形参x。字符型与整型能够相互通用。(。字符型与整型能够相互通用。(3)实参)实参能够是常量、变量或表示式,但要求它们有确定值。在调用能够是常量、变量或表示式,但要求它们有确定值。在调用时将实参值赋给形参。时将实参值赋给形参。(4)在被定义函数中,必须指定形参类型。)在被定义函数中,必须指定形参类型。(5)C语言要求,实参对形参变量数据传递是语言要求,实参对形参变量数据传递是“值传递值传递”,即单向传递,只由实参传给形参,而不能由形参传回给实参。即单向传递,只由实参传给形参,而不能由形参传回给实参。10/10/18第18页函数执行最终一个操作是返回。返回意义是:函数执行最终一个操作是返回。返回意义是:(1)使流程返回主调函数,宣告函数一次执行结束,使流程返回主调函数,宣告函数一次执行结束,在调用期间所分配变量单元被撤消。在调用期间所分配变量单元被撤消。(2)送函数值到调用表示式中。有些函数有返回值,送函数值到调用表示式中。有些函数有返回值,有些函数没有返回值。有些函数没有返回值。return语句使用格式是:语句使用格式是:return;或者或者 return (表示式表示式);或者或者 return 表示式;表示式;6.2.36.2.36.2.36.2.3函数返回函数返回函数返回函数返回值值值值10/10/19第19页说明:说明:(1)return语句有双重作用:它使函数从被调函数中退出,返语句有双重作用:它使函数从被调函数中退出,返回到调用它代码处,并向调用函数返回一个确定值。回到调用它代码处,并向调用函数返回一个确定值。(2)一个函数中能够有多个)一个函数中能够有多个return语句,执行到哪一个语句,执行到哪一个return语句,哪一个语句就起作用。语句,哪一个语句就起作用。(3)在定义函数时应该指定函数值类型,而且函数类型普通应)在定义函数时应该指定函数值类型,而且函数类型普通应与与return语句中表示式类型相一致,当二者不一致时,应以函数语句中表示式类型相一致,当二者不一致时,应以函数类型为准,即函数类型决定返回值类型。对于数值型数据,能够类型为准,即函数类型决定返回值类型。对于数值型数据,能够自动进行类型转换。自动进行类型转换。10/10/20第20页#include int sum(int n)int i,s=0;for(i=0;i=m;i+)s=s+i;return s;int main()int s;s=sum(50);printf(%d,s);用自定义函数,实现用自定义函数,实现1+2+3+50程序分析:程序分析:自定义函数自定义函数int sum(int n););return s;定义变量;定义变量;int s=0;int i;10/10/21第21页提议函数无返回值时用提议函数无返回值时用void标识函数类型,则系统可确标识函数类型,则系统可确保函数不带回任何值,即禁止在调用函数中使用被调用保函数不带回任何值,即禁止在调用函数中使用被调用函数返回值。函数返回值。return语句其它规则:语句其它规则:return只能返回一个值,而不能返回多个值。只能返回一个值,而不能返回多个值。假如函数中没有假如函数中没有return语句,并不代表函数没有返回语句,并不代表函数没有返回值,只能说明函数返回值是一个不确定数。值,只能说明函数返回值是一个不确定数。10/10/22第22页voidvoid类型函数类型函数类型函数类型函数有时调用一个函数并不是为了得到它返回值,而是要有时调用一个函数并不是为了得到它返回值,而是要它产生一些作用。这类确实没有返回值函数,我们通它产生一些作用。这类确实没有返回值函数,我们通常将它定义为常将它定义为空类型空类型(void)函数。)函数。一旦将一个函数定义为空类型函数,那么该函数中一旦将一个函数定义为空类型函数,那么该函数中return语句仅仅起到结束函数运行功效,它是不返回语句仅仅起到结束函数运行功效,它是不返回任何值给主调函数。任何值给主调函数。返回语句只能写成以下形式:返回语句只能写成以下形式:return;10/10/23第23页6.36.36.36.3函数函数函数函数调调调调用用用用所谓函数调用,是指一个函数(调用函数)暂时中止本函所谓函数调用,是指一个函数(调用函数)暂时中止本函数运行,转去执行另一个函数(被调函数)过程。被调函数运行,转去执行另一个函数(被调函数)过程。被调函数执行完后,返回到调用函数中止处继续调用函数运行,数执行完后,返回到调用函数中止处继续调用函数运行,这是一个返回过程。这是一个返回过程。函数一次调用必定伴伴随一个返回过程。在调用和返回两函数一次调用必定伴伴随一个返回过程。在调用和返回两个过程中,两个函数之间发生信息交换。个过程中,两个函数之间发生信息交换。函数调用普通形式为:函数调用普通形式为:函数名(实际参数表列);函数名(实际参数表列);调用无参函数,则调用无参函数,则“实际参数表列实际参数表列”能够没有,但括号能够没有,但括号不能省略。不能省略。实际参数表列中实参类实际参数表列中实参类型及个数必须与形参相型及个数必须与形参相同,而且次序一致,当同,而且次序一致,当有多个实参时,参数之有多个实参时,参数之间用逗号隔开。间用逗号隔开。实实参能参能够够是常量,有确定是常量,有确定值变值变量或表示式及函数量或表示式及函数调调用用 10/10/24第24页(1)(1)实参个数、次序与类型要与形参实参个数、次序与类型要与形参一一对应一一对应;(2)(2)变量作形参时变量作形参时,对应实参能够是常数对应实参能够是常数,变量或表变量或表示式示式;(3)(3)调用函数调用函数有两种:有两种:标准函数(库函数)和用户标准函数(库函数)和用户自定义函数。自定义函数。*调用调用标准函数标准函数(库函数库函数),需在程序前使用包含需在程序前使用包含命令命令:例:例:#include ”stdio.h”或或#include 等等 *调用调用用户自定义函数用户自定义函数,普通应在普通应在调用前调用前“申明申明”被调用函数被调用函数“类型类型”。函数调用标准函数调用标准函数调用标准函数调用标准 除非除非1)被调函数是整型或字符型函数被调函数是整型或字符型函数;2)被调函数定义出现在这个函数调用之前被调函数定义出现在这个函数调用之前;3)在文件开头已对被调函数类型作了说明在文件开头已对被调函数类型作了说明.10/10/25第25页6.3.2函数调用方式函数调用方式按被调用函数在主调函数中出现位置和完成功效划分,函数调用有以按被调用函数在主调函数中出现位置和完成功效划分,函数调用有以下三种方式:下三种方式:(1)把函数调用作为一个语句。)把函数调用作为一个语句。如例如例6-1中中“print_star();”,这时不要求函数带回值,只要求函数,这时不要求函数带回值,只要求函数完成一定操作。完成一定操作。(2)在表示式中调用函数,这种表示式称为函数表示式。这时要求函)在表示式中调用函数,这种表示式称为函数表示式。这时要求函数带回一个确定值以参加表示式运算。比如:数带回一个确定值以参加表示式运算。比如:c=average(a,b);d=5*average(a,b);(3)将函数调用作为另一个函数调用实参。)将函数调用作为另一个函数调用实参。比如:比如:printf(The avergae of%5.2f and%5.2f is%5.2fn,a,b,average(a,b);此处把此处把average(a,b)作为作为printf函数一个参数。函数一个参数。10/10/26第26页函数调用普通形式函数调用普通形式 函数名(实际参数表);函数名(实际参数表);其中,实际参数能够是常量或变量,也能够是各种表示式;其中,实际参数能够是常量或变量,也能够是各种表示式;参数个数和类型应该与函数要求形式参数个数和类型一致;参参数个数和类型应该与函数要求形式参数个数和类型一致;参数间用逗号隔开。假如调用无参函数,则实参表能够没有,但数间用逗号隔开。假如调用无参函数,则实参表能够没有,但括号不能省略。括号不能省略。函数调用普通形式函数调用普通形式函数调用普通形式函数调用普通形式10#include stdio.h20 main()30 40 void function(int n);50 function(5);60 70 void function(int n)80 90 printf(%dn,n);100 函数说明函数说明函数调用函数调用函数定义函数定义形参形参实参实参10/10/27第27页main()int a,b,c,d,max(int x,int y);void star();printf(nInput a,b,c=?n);scanf(%d,%d,%d,&a,&b,&c);d=max(a,max(b,c);printf(max is%d,d);star();max(int x,int y)max(int x,int y)int z;z=xy?x:y;return(z);void star()printf(n*);abc()被调函数申明被调函数申明自定义函数调用自定义函数调用函数定义可写成:函数定义可写成:int max(x,y)int x,y;C程序执行时从主函数开始,可调用其它函数程序执行时从主函数开始,可调用其它函数,最终返回最终返回主函数并结束运行。比如主函数并结束运行。比如 找出找出 a,b,c 中最大值中最大值.函数应用举例函数应用举例函数应用举例函数应用举例10/10/28第28页6.3.3函数原型申明函数原型申明函数申明普通形式为:函数申明普通形式为:类型说明符类型说明符 函数名(形参表);函数名(形参表);比如:比如:float average(float x,float y);也能够写为:也能够写为:float average(float,float);实际上就是函数定义时函数头,最终加分号组成一条申明语实际上就是函数定义时函数头,最终加分号组成一条申明语句。与函数头区分是,函数申明中形参表中能够只写类型名,句。与函数头区分是,函数申明中形参表中能够只写类型名,而不写形参名。而不写形参名。10/10/29第29页例例6-5编写函数求两个实数平均值。编写函数求两个实数平均值。#include main()float a=1.8,b=2.6,c;float average(float x,float y);/函数申明函数申明 c=average(a,b);/函数调用函数调用 printf(The avergae of%5.2f and%5.2f is%5.2fn,a,b,c);float average(float x,float y)float av;av=(x+y)/2.0;return av;函数定义函数定义10/10/30第30页在以下情况下能够缺省函数申明:在以下情况下能够缺省函数申明:(1)调用是在定义有效区域,即在同一文件中位于定义调用是在定义有效区域,即在同一文件中位于定义之后调用。也就是函数定义写在前面,主调函数写在后之后调用。也就是函数定义写在前面,主调函数写在后面。面。省略函数说明省略函数说明省略函数说明省略函数说明10 float max(float x,float y)20 30 return(xy)?x:y);40 50 main()60 70 float x=5.5,y=9.7,z;80 z=max(x,y);90 printf(The max is%f,z);100 例:例:10/10/31第31页(2)返回值为返回值为int或或char类型。类型。省略函数说明省略函数说明省略函数说明省略函数说明10 main()20 30 int x=5,y=9,z;40 z=max(x,y);50 printf(The max is%d,z);60 70 max(int x,int y)80 90 return(xy)?x:y);100 提议:提议:为了便于阅读和了解,应该养成在调用之前都做为了便于阅读和了解,应该养成在调用之前都做显式申明显式申明格调。当一个函数要被一个文件中多个函数调格调。当一个函数要被一个文件中多个函数调用时,能够将该函数申明写在全部函数之前。用时,能够将该函数申明写在全部函数之前。例:例:10/10/32第32页在主调函数内部进行说明在主调函数内部进行说明在主调函数内部进行说明在主调函数内部进行说明在调用函数前,能够在主调函数内部对被调函数进行说明。假在调用函数前,能够在主调函数内部对被调函数进行说明。假如使用这种说明方式,则此次函数说明只在主调函数内部有效,如使用这种说明方式,则此次函数说明只在主调函数内部有效,也就是说,假如其它函数中也需要调用该被调函数,在那些函也就是说,假如其它函数中也需要调用该被调函数,在那些函数中对被调函数依然需要进行说明。数中对被调函数依然需要进行说明。10#include 20 main()30 40 int x=1;50 void f1(),f2();60 f1();70 f2(x);80 printf(%dn,x);90 100 void f1(void)110 120 void f2();130 int x=3;140 f2(x);150 printf(%d,x);160 f2(x);170 180 void f2(int x)190 200 printf(%d,+x);210 例:例:函数说明函数说明函数说明函数说明10/10/33第33页在主调函数外部进行说明在主调函数外部进行说明在主调函数外部进行说明在主调函数外部进行说明10#include 1120void f1(),f2();30 main()40 50 int x=1;60 f1();70 f2(x);80 printf(%dn,x);90 100 void f1(void)110 120 int x=3;130 f2(x);140 printf(%d,x);150 f2(x);160 170 void f2(int x)180 190 printf(%d,+x);200 例:例:函数说明函数说明假如已经在文件开头(或在函数前)对某函数进行了说明,则假如已经在文件开头(或在函数前)对某函数进行了说明,则从说明处开始,在本文件中对说明函数调用不需要再次进行说从说明处开始,在本文件中对说明函数调用不需要再次进行说明。比如:明。比如:10/10/34第34页6.3.4函数参数传递函数参数传递在在C语言中进行函数调用时,有两种不一样参数传递方式,即语言中进行函数调用时,有两种不一样参数传递方式,即值传递方式和地址传递方式。值传递方式和地址传递方式。1.值传递值传递在函数调用时,实参将其值传递给形参,这种传递方式即为值在函数调用时,实参将其值传递给形参,这种传递方式即为值传递。传递。C语言要求,实参对形参数据传递是语言要求,实参对形参数据传递是“值传递值传递”,即单向传,即单向传递,只能由实参传递给形参,而不能由形参传回来给实参。递,只能由实参传递给形参,而不能由形参传回来给实参。所以,在执行一个被调用函数时,形参值假如发生改变,并所以,在执行一个被调用函数时,形参值假如发生改变,并不会改变调用函数中实参值。不会改变调用函数中实参值。10/10/35第35页10#include stdio.h20 float average(float x,float y,float av)30 40 av=(x+y)/2.0;50 printf(function:x=%f,y=%f,av=%fn,x,y,av);60 return av;70 80 main()90 100 float a=1.4,b=2.6,c=3;110 average(a,b,c);120 printf(main:a=%f,b=%f,c=%fn,a,b,c);130 单向传递单向传递单向传递单向传递程序运行结果是:程序运行结果是:function:x=1.400000,y=2.600000,av=2.000000main:a=1.400000,b=2.600000,c=3.00000010/10/36第36页运行运行位置位置main函数变量函数变量average函数变量函数变量说明说明abCxyav1001.42.63不存在不存在不存在不存在不存在不存在程序开始运行程序开始运行1101.42.631.42.63分配形参存放空间,实参向形参传递数值601.42.631.42.62运算运算1201.42.63不存在不存在不存在不存在不存在不存在函数调用结束,返回主函数调用结束,返回主调函数调函数程序运行过程和参数传递情况程序运行过程和参数传递情况 单向传递单向传递单向传递单向传递10/10/37第37页实参向形参传递数值过程:实参向形参传递数值过程:单向传递单向传递单向传递单向传递一次一次实参向形参传递数值过程,只是在发生函数调用时候执实参向形参传递数值过程,只是在发生函数调用时候执行一次。行一次。假如实参是表示式或函数形式,那么一定要先完成表示假如实参是表示式或函数形式,那么一定要先完成表示式运算,将该运算结果传递给形参。式运算,将该运算结果传递给形参。单向单向只能是实参把数值传递给形参,而形参是不可能把数值只能是实参把数值传递给形参,而形参是不可能把数值传递给实参。传递给实参。10/10/38第38页单向传递单向传递单向传递单向传递int swamp(int i,int j)int t;t=i;i=j;j=t;printf(In function i=%d,j=%dn,i,j);main()int i=2,j=3;swamp(i,j);printf(Out function i=%d,j=%d,i,j);程序运行结果是:程序运行结果是:In function i=3,j=2Out function i=2,j=3读程序写结果读程序写结果10/10/39第39页float abc(float x,float y)float av;x=x*x;y=y*y;av=(x+y)/2.0;printf(“nfunction x=%3.2f y=%3.2f av=%-5.2fn,x,y,av);return(av);变量作参数变量作参数 单向传递单向传递实参实参 形参形参已知已知 x,y x,y计算计算 av=?av=?#include main()float a=1,b=2,c;c=abc(a,b);printf(“main a=%3.2f b=%3.2f c=%3.2fn,a,b,c);运行结果:运行结果:function x=1.00 y=4.00 av=2.50main a=1.00 b=2.00 c=2.50传值调用举例传值调用举例传值调用举例传值调用举例10/10/40第40页float abc(int a,int b)float av;a=3*a;b=4*b;av=(a+b)/2.0;printf(“nfunction a=%2d b=%d av=%-5.2fn,a,b,av);return(av);main()int a=1,b=2,c;c=abc(a,b);printf(main a=%2d b=%2d c=%-8dn,a,b,c);*数据只能由实参传给形参数据只能由实参传给形参;*使用使用 return 返回一个计算结果;返回一个计算结果;*返回值类型要与函数值一致返回值类型要与函数值一致。*实参个数、次序与类型要与实参个数、次序与类型要与 形参一一对应,如形参一一对应,如 形参形参 a,b 与与 实参实参 a,b function x=3 y=8 av=5.50main a=1 b=2 c=5传值调用举例传值调用举例传值调用举例传值调用举例10/10/41第41页2.地址传递地址传递地址传递指是调用函数时,实参将一些量(如变量、字符串、地址传递指是调用函数时,实参将一些量(如变量、字符串、数组等)地址传递给形参。数组等)地址传递给形参。这么实参和形参指向同一个内存空间,在执行被调用函数过程这么实参和形参指向同一个内存空间,在执行被调用函数过程中,对形参所指向空间中内容改变,能够直接影响到调用函数中,对形参所指向空间中内容改变,能够直接影响到调用函数中对应量。中对应量。在地址传递方式下,形参和实参能够是指针变量(见第在地址传递方式下,形参和实参能够是指针变量(见第8章)章)或数组名,其中,实参还能够是变量地址。或数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服