C语言项目开发教程PPT 第4章.ppt
《C语言项目开发教程PPT 第4章.ppt》由会员分享,可在线阅读,更多相关《C语言项目开发教程PPT 第4章.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言项目开发教程PPT 第4章任务目标了解函数的功能和优点。掌握函数的定义形式。掌握函数的调用方法。掌握形参和实参的概念。掌握函数说明语句的形式和用法。掌握函数的值的概念。掌握函数返回值的用法。完成数学能力测试程序设计。C语言项目开发教程PPT 第4章函数定义就是确定函数完成什么功能以及如何运行的程序模块。函数必须先定义,然后才能使用。创建一个函数时,必须指定函数头作为定义的第一行,接着是这个函数放在一对大括号内的执行代码。这些代码成为函数体。函数头指明了函数的返回值类型、函数的名称和参数,函数体完成函数所有的处理操作。函数定义的一般形式为:类型标志符 函数名(形式参数表)变量说明 执行语句
2、其中,类型标志符即函数类型,函数类型和函数返回值的类型一致,如果没有返回值,则函数类型为void。有的函数有返回值,有的函数没有返回值。函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调用函数的值。有返回值的参数,其函数体中必须有相应的返回语句return。函数名是唯一标识一个函数的名称,应为一个合法的标识符。形式参数列表由0个、1个或多个参数组成。参数之间用逗号隔开,每个参数都包括参数的类型和名称。例如int max(int a,int b);中声明了两个参数,它们均为int类型。用大括号括起来的部分为函数体,包括变量说明和执行语句,这一部分的代码表明了函数可以实现的功
3、能。函数体内可以没有代码,但是大括号必须存在。空的函数体在调试大型程序时经常用到。出现在形式参数列表中的形参,以及出现在函数体变量说明中的变量都是局部变量,只在函数内部生效。C语言项目开发教程PPT 第4章下面是合法的函数定义的例子。【案例4-1】输出简单图形。void print()int i,j;for(i=1;i=10;i+)for(j=1;j=i;j+)printf(*);printf(n);案例4-1中定义了一个void类型的无参数函数print,该函数的功能为在屏幕上打印一个10行的三角形。当函数没有返回值时,必须说明函数类型为void,这里的void不可以省略。【案例4-2】根据
4、参数输出简单图形。void print(int x)int i,j;for(i=1;i=x;i+)for(j=1;j=i;j+)printf(*);printf(n);案例4-2中定义的函数print包含一个参数,其功能同样为在屏幕上打印一个三角形,不同的是三角形的行数是由函数的参数确定的。函数运行前首先接收通过函数调用传递的参数,确定x的取值,然后执行后续操作。C语言项目开发教程PPT 第4章下面几个关于函数定义的案例是不正确的。【案例4-3】定义函数,根据输入的参数输出一个长方形。void print(int x,y)int i,j;for(i=1;i=x;i+)for(j=1;j=y;j
5、+)if(i=1|j=1|i=x|j=y)printf(*);else printf();printf(n);在函数定义中,每一个形参都必须用一个类型说明符单独说明,不可以公用。将上述案例中的函数定义改为void print(int x,int y),则函数定义正确。【案例4-4】定义一个函数,输出一个数的平方。void add(int x,int y)int result;void squart(int x);result=suqart(x)+squart(y)printf(%d,result);案例4-4中,在一个函数的函数体内又定义了另外一个函数,这种现象为函数的定义嵌套,这是不正确的。
6、C语言项目开发教程PPT 第4章在C语言中,所有的函数定义,包括main()函数在内,都是平行的,也就是说一个函数的函数体内,不能定义另一个函数,即不能嵌套定义。是函数之间运行互相调用时,也允许嵌套调用,但main()函数除外,main()只能调用其他函数而不能被调用。因此,C程序的执行总是从main()函数开始,完成对其他函数的调用后再返回到mian()函数,最后由mian()函数结束整个程序。一个程序有且只能有一个mian()函数。C语言项目开发教程PPT 第4章4.1.2 函数的调用 1函数调用形式程序中之所以定义函数,是为了在程序中其他需要的地方调用函数。在程序中是通过对函数的调用来执
7、行函数体的。在前面的章节中,其实已经涉及到了一些函数的调用的案例,如printf函数、puts函数等的调用。函数调用时通过函数调用语句实现的,主函数就是主调函数,主函数中调用的函数为被调函数。函数调用的一般形式为:函数名(实际参数表)对无参数函数调用时无实际参数。实际参数列表中的参数可以是常数,变量或其他构造类型数据表达式,各参数之间用逗号隔开。这里的参数的个数、类型和顺序都应与被调函数定义中的参数列表中的设置相同。函数调用的过程为:先计算出实际参数表中各表达式的值,然后把值传递给对应的形参,然后再将执行控制流转向被调函数的第一个语句并执行函数体。当函数执行完后,执行控制流返回到主调函数中。函
8、数调用的结果称为函数的值,也就是函数体中return 语句返回的值。可通过“函数名(实际参数表)”的形式访问返回语句返回的值,如,有以下函数:int add(int a,int b)return a+b;其中,return语句表示返回a加b的值,即调用该函数可获得a加b的值,调用形式为add(a,b)。函数调用有三种表现形式,分别为:作为单独的函数调用语句;作为函数的部分参数;作为表达式的一部分。C语言项目开发教程PPT 第4章【案例4-5】编写程序,求三个数中的最大值。#include int max(int a,int b,int c)if(ab)if(ac)return a;else r
9、eturn c;else if(bc)return b;else return c;void main()int a,b,c;int maxnum;printf(请依次输入三个整数:n);scanf(%d%d%d,&a,&b,&c);printf(最大值为:%dn,max(a,b,c);/函数调用作为输出参数C语言项目开发教程PPT 第4章程序运行结果如下:请依次输入三个整数:9 2 6最大值为:9案例中定义了求三个数中的最大值函数max,函数中通过比较返回三个参数中的最大值。在主程序中,函数调用作为输出参数直接输出。可以将上述程序中的输出部分提取出来单独作为一个函数,则程序可变为:void
10、print(int maxnum)printf(最大值为:%dn,maxnum);void main()int a,b,c;int maxnum;printf(请依次输入三个整数:n);scanf(%d%d%d,&a,&b,&c);print(max(a,b,c);此时对print函数的调用是作为单独的函数调用语句,函数没有返回值,只是完成独立的操作。max函数的调用结果则作为参数传递给print函数。C语言项目开发教程PPT 第4章 2函数的形参和实参在函数定义中,出现在函数名括号中的参数为形式参数,简称形参;函数调用时,出现在函数名后括号中的参数是实际参数,简称实参。函数调用时,形参的数量
11、和类型要和实参的数量和类型相一致,并且实参和形参的顺序也应保持一致,所代表的意义也一致。形参和实参的功能是数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参,从而实现主调函数向被调函数的数据传送。形参和实参的使用有以下特点:(1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。(2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。(3)实参和形参在
12、数量上、类型上、顺序上应严格一致,否则会发生“类型不匹配”的错误。(4)函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此,在函数调用过程中,形参的值发生改变,而实参中的值不会变化。C语言项目开发教程PPT 第4章【案例4-6】计算从1到n的和。#include int s(int n)int i;for(i=n-1;i=1;i-)n=n+i;printf(函数s中:n=%dn,n);return 0;void main()int n;printf(请输入一个正整数:n);scanf(%d,&n);printf(主函数中调用s前:n=%dn,n
13、);s(n);printf(主函数中调用s后:n=%dn,n);程序运行结果如下:请输入一个正整数:100主函数中调用s前:n=100函数s中:n=5050主函数中调用s后:n=100C语言项目开发教程PPT 第4章本程序中定义了一个函数s,该函数的功能是求ni的值。在主函数中输入n值,并作为实参,在调用时传送给s函数的形参量n(注意,本例的形参变量和实参变量的标识符都为n,但这是两个不同的量,各自的作用域不同)。在主函数中调用函数s前用printf语句输出一次n值,这个n值是实参n的值。在函数s中也用printf语句输出了一次n值,这个n值是形参最后取得的n值,然后再在主函数中输出一次n的值
14、,发现n的值仍为10不变。从运行情况看,输入n值为100。即实参n的值为100。把此值传给函数s时,形参n的初值也为100,在执行函数过程中,形参n的值变为5050。返回主函数之后,输出实参n的值仍为100。可见传值调用时实参不随形参的变化而变化。在函数调用时,为形参变量n分配内存单元,并将实参n的值传递给形参n。然后在函数s内对n的值进行计算,形参n的值发生了变化。在程序结束时,要释放为形参n分配的内存空间。即形参n只在函数s内部有效,函数s的执行不会影响主函数中实参s的值,函数调用前后实参值不变。C语言项目开发教程PPT 第4章C语言可以由若干个文件组成,每一个文件又可以单独编译,因此当编
15、译程序中的函数调用时,如果不知道该函数参数的个数和类型,编译系统就无法检查形参和实参是否匹配。为了保证函数调用时,编译程序能够检查出调用过程中传递的参数和函数定义中的参数是否类型一致和个数匹配,以保证函数调用的成功,因此有时在主调用函数中需要对调用函数进行说明。在之前的例子中,总是先写调用函数然后再写主调函数。但是实际上组成一个程序的函数的位置是任意的,即有可能主调函数在被调函数之前,此时需要用到函数说明语句,否则将无法使用被调函数。函数说明的一般形式如下:函数类型 函数名(形式参数列表)例如:int max(int a,int b);C语言项目开发教程PPT 第4章【案例4-7】求圆的面积。
16、#include#define PI 3.14void main()float x;float a;float area(float x);printf(请输入圆的半径:n);scanf(%f,&x);a=area(x);printf(圆的面积为:%.3fn,a);float area(float x)float a;a=PI*x*x;return a;程序运行结果如下:请输入圆的半径:6圆的面积为:113.040C语言项目开发教程PPT 第4章函数的说明除了在主调函数中,也可以出现在函数的外部,如上述程序可以改写为:#include#define PI 3.14float area(floa
17、t x);void main()float x;float a;printf(请输入圆的半径:n);scanf(%f,&x);a=area(x);printf(圆的面积为:%.3fn,a);float area(float x)float a;a=PI*x*x;return a;函数的说明和函数定义在形式上类似,但是函数说明并不等价于函数定义。函数的定义由两部分组成:函数首部和函数体,函数的定义中应包括实现函数功能的语句和返回值等;而函数的说明中只是一个说明,没有具体的功能实现语句。C语言项目开发教程PPT 第4章另外,函数的定义只能有一次,而函数的说明可以有多次,每次调用函数之前就应该在主调
18、函数中说明依次。例如:#define PI 3.14void main()float area(float x);void print()float area(float x);float area(float x)float a;a=PI*x*x;return a;在主函数和另外一个函数print中均用到了函数area,所以都在调用前对函数area进行了说明,但是函数area的定义只有一次,在定义中给出了函数的具体功能的实现。而函数的说明则不包括功能实现。函数说明并不是必须的,在下列情况中不需要对函数进行说明也可以使用:函数返回值为整型或字符型时,且在同一个文件中既定义函数,又调用函数;函数
19、的定义和调用在同一个文件中,且定义在调用之前。如果函数的定义和调用在两个不同的文件中,则无论函数返回值的类型是什么,在调用函数时,必须给出函数的说明。C语言项目开发教程PPT 第4章【案例4-8】求长方形的面积。#include void main()int x,y;int a;printf(请输入长方形两边长:n);scanf(%d%d,&x,&y);a=area(x,y);printf(长方形的面积为:%dn,a);int area(int x,int y)int a;a=x*y;return a;程序运行结果如下:请输入长方形两边长:5 6长方形的面积为:30C语言项目开发教程PPT 第
20、4章函数的值指示函数调用之后,执行函数体中的程序段所取得并返回给主调用函数的值,函数值的类型为函数类型。函数的值只能通过返回值的形式返回给主调用用函数。返回值语句return的形式如下:return 表达式;执行时,首先计算表达式的值(可以为常量表达式、变量或复合类型的表达式),然后将该值返回给调用函数。函数类型一般与return 语句表达式的类型一致。如果函数不提供返回值,则可以定义函数类型为空类型(void)。如果return 语句中表达式的类型与函数的类型不一致,则以函数的类型为准,返回时自动进行数据类型转换。一个程序中可以有多个return语句,但是每次调用只能执行一个return语句
21、,因此函数只能有一个返回值。如果函数不提供返回值,且被定义为空类型时,系统默认函数类型为整型。返回值语句return 的作用为:结束本函数运行,返回到主调用函数中执行下一条指定;将表达式运算结果返回到调用处。C语言项目开发教程PPT 第4章【案例4-9】编写一个函数,在屏幕上显示一个字符串。#includevoid print()char s100;printf(请输入一个字符串:n);gets(s);printf(输入的字符串为:n);puts(s);return;void main()print();printf(输出结束n);程序运行结果如下:请输入一个字符串:Hello输入的字符串为:
22、Hello输出结束C语言项目开发教程PPT 第4章程序中定义了一个无参数函数print(),在执行完最后一个语句puts(s),即显示字符串s 之后,遇到return语句,函数结束并返回到主调用函数中,即继续执行主函数中的输出语句。在函数类型为void的情况下,通常可以省略return语句的使用,函数执行完最后一条语句后,自动结束并返回到主调用函数中C语言项目开发教程PPT 第4章【案例4-10】编写一个函数,比较a、b的大小,并返回其中较大的一个。#include int max1(int a,int b)if(a=b)return a;else return b;int max2(int
23、a,int b)Return(ab?a:b);void main()int a,b;int m;printf(请输入两个整数:n);scanf(%d%d,&a,&b);printf(两个数中较大值为:n);m=max1(a,b);printf(调用函数max1运行结果:%dn,m);m=max2(a,b);printf(调用函数max2运行结果:%dn,m);C语言项目开发教程PPT 第4章程序运行结果如下:请输入两个整数:10 15两个数中较大值为:调用函数max1运行结果:15调用函数max2运行结果:15在这个程序中定义的函数max1和max2的功能为返回两个数中的较大值。在这个两个函数
24、中,程序并不是执行到最后一条语句之后才终止并跳出到主程序中的,而是根据比较结果,如已知ab时,则不需要执行下面的else语句就可以确定最大值,这时可以直接跳出函数。程序max1和max2的功能均为比较两个数的最大值,max2函数中只有一条return语句,max1中有两条return语句,但函数具体执行时都只执行其中的一条return语句,返回该函数值到主调用函数中。函数的返回值非空时,则可以将函数的值看成一个明确的数值用在任意表达式中,如将函数返回值赋给另外的变量或直接输出函数返回值。注意,用户定义的函数大部分属于以下三种类型:第一种为数据处理型,函数的主体为对数据进行计算或其他处理,最后输
25、出数据处理结果;第二种为信息处理型,对一些信息进行处理,处理后返回一个值,这个值仅作为处理成功或失败的标记,而无具体的含义;第三种为功能独立型,完成指定的功能,没有返回值。C语言项目开发教程PPT 第4章1问题描述编写程序,训练儿童加、减、乘、除数学算数能力的程序。程序应该能自动生成加法、减法、乘法和除法运算的算数表达式,并且通过学生输入的答案判断结果是否正确,然后给出提示。在用户选择结束程序时,可以统计共回答了多少题,得分为多少。2要点解析根据程序功能,可以将总程序分为5个模块,即add:随机输出加法表达式并判断答案是否正确。sub:随机输出减法表达式并判断答案是否正确。mul:随机输出乘法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言项目开发教程PPT 第4章 语言 项目 开发 教程 PPT
限制150内