西安石油大学《C语言程序设计》课件-第6章 函数

上传人:zjm****gmk 文档编号:327674865 上传时间:2022-07-27 格式:PPT 页数:53 大小:7.83MB
返回 下载 相关 举报
西安石油大学《C语言程序设计》课件-第6章 函数_第1页
第1页 / 共53页
西安石油大学《C语言程序设计》课件-第6章 函数_第2页
第2页 / 共53页
西安石油大学《C语言程序设计》课件-第6章 函数_第3页
第3页 / 共53页
西安石油大学《C语言程序设计》课件-第6章 函数_第4页
第4页 / 共53页
西安石油大学《C语言程序设计》课件-第6章 函数_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《西安石油大学《C语言程序设计》课件-第6章 函数》由会员分享,可在线阅读,更多相关《西安石油大学《C语言程序设计》课件-第6章 函数(53页珍藏版)》请在金锄头文库上搜索。

1、第六章西安石油大学C语言程序设计6.1 概述概述 1.一个完整的一个完整的C语言程序可以由多源文件组成。每个语言程序可以由多源文件组成。每个C文件可含有若文件可含有若干个函数,但只能有一个主函数干个函数,但只能有一个主函数(main),其他函数都是,其他函数都是“子函数子函数”。2.C程序的执行从程序的执行从main函数开始,调用其他函数后仍回到函数开始,调用其他函数后仍回到main函数,函数,程序在程序在main函数结束时结束,而与主函数的位置无关。函数结束时结束,而与主函数的位置无关。3.所有子函数都是相互独立、平等的,没有从属关系;主函数可以所有子函数都是相互独立、平等的,没有从属关系;

2、主函数可以调用任一子函数,子函数也可以相互调用,但主函数不能被调用,调用任一子函数,子函数也可以相互调用,但主函数不能被调用,主函数由操作系统调用。主函数由操作系统调用。(如下图如下图)mainabcbcadb函数调用层次结构函数调用层次结构4.程序中使用的函数,从用户程序中使用的函数,从用户角度看可分为:角度看可分为:标准函数,即库函数标准函数,即库函数自定义函数自定义函数5.从函数形式看,可分为:从函数形式看,可分为:无参数函数无参数函数有参数函数有参数函数例例6.1 有参数函数和无参数函数有参数函数和无参数函数#include void main()printf(*n);6.2 函数的定

3、义和调用函数的定义和调用6.2.1函数定义的一般形式函数定义的一般形式类型说明类型说明 函数名函数名(形式参数说明形式参数说明)函数体函数体形式参数说明方法形式参数说明方法:类型说明类型说明 变量名变量名,类型说明类型说明 变量名变量名1.无参数函数定义形式无参数函数定义形式类型说明类型说明 函数名函数名()函数体函数体2.有参数函数的定义形式有参数函数的定义形式类型说明类型说明 函数名函数名(形式参数说明形式参数说明)函数体函数体3.空函数空函数 是即没有内部数据说是即没有内部数据说明也没有执行语的函数。调用此明也没有执行语的函数。调用此函数时,什么也不做,没有任何函数时,什么也不做,没有任

4、何实际作用。空函数的空是暂时的,实际作用。空函数的空是暂时的,起形式作用,目的是等以后扩充起形式作用,目的是等以后扩充函数功能时补上具体内容。函数功能时补上具体内容。如如:void dummy()6.2.2 6.2.2 函数的调用函数的调用 1.1.函数调用的一般形式为函数调用的一般形式为:函数名(实参表列)函数名(实参表列)说明说明:(1)(1)如果是调用无参函数,则如果是调用无参函数,则“实参表列实参表列”可以没有,但可以没有,但括弧不能省略。括弧不能省略。(2)实参的个数和形参一般相等。实参的个数和形参一般相等。(3)实参与形参的类型应一一对应。实参与形参的类型应一一对应。(4)不同的系

5、统不同的系统,实参的计算顺序不同,一般是从右到左。实参的计算顺序不同,一般是从右到左。为了避免混乱,一般应在调用函数前计算出实参的值。为了避免混乱,一般应在调用函数前计算出实参的值。例例 6.26.2实参求值的顺序实参求值的顺序#include void main()int f(int a,int b);/*函数声明函数声明*/int i=2,p;p=f(i,+i);/*函数调用函数调用*/printf(“%dn”,p);int f(int a,int b)/*函数定义函数定义*/int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);如果按自左

6、至右顺序求实如果按自左至右顺序求实参的值,则函数调用相当参的值,则函数调用相当于(,)于(,)如果按自左至右顺序求实如果按自左至右顺序求实参的值,则函数调用相当参的值,则函数调用相当于(于(3,),)对于函数调用对于函数调用 int i=2,p;p=f(i,+i);2 2.函数调用的方式函数调用的方式(1)函数语句函数语句把函数调用作为一个语句。这时不要求函数带回值,把函数调用作为一个语句。这时不要求函数带回值,只要求函数完成一定的操作。只要求函数完成一定的操作。例如:例如:print_message();printf(“%d”,p);说明:这种方式不要求函数带回返回值,函数仅完成说明:这种方

7、式不要求函数带回返回值,函数仅完成一定的操作。一定的操作。按函数在程序中出现的位置来分,可以有以下三种函按函数在程序中出现的位置来分,可以有以下三种函数调用方式:数调用方式:(3)函数参数函数参数函数调用作为一个函数的实参。函数调用作为一个函数的实参。例如例如:m=max(a,max(b,c);其中其中max(b,c)是一次函数调用,它的值作为是一次函数调用,它的值作为max另一次另一次调用的实参。调用的实参。m的值是的值是a、b、c三者中的最大者。三者中的最大者。(2)(2)函数表达式函数表达式函数出现在一个表达式中,这种表达式称为函数表达函数出现在一个表达式中,这种表达式称为函数表达式。函

8、数的返回值参与运算。这时要求函数带回一个式。函数的返回值参与运算。这时要求函数带回一个确定的值以参加表达式的运算。确定的值以参加表达式的运算。例如例如:c=2*:c=2*max(amax(a,b)b);3.函数的声明函数的声明(1)(1)首先被调用的函数必须是已经存在的函数(是库首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数),且遵循函数或用户自己定义的函数),且遵循“先定义后使先定义后使用用”的原则。的原则。(2)如果使用库函数,需要在本文件开头用如果使用库函数,需要在本文件开头用#include命令调用有关库函数。命令调用有关库函数。(不用声明不用声明)。(3)如果使用

9、用户自己定义的函数,而该函数的位置如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面,应该在主调在调用它的函数(即主调函数)的后面,应该在主调函数中对被调用的函数作声明函数中对被调用的函数作声明函数原型函数原型。在程序中调用函数需要以下条件:在程序中调用函数需要以下条件:函数声明的一般形式为函数声明的一般形式为:1.1.函数类型函数类型 函数名函数名(参数类型参数类型1 1,参数类型,参数类型2 2);如:如:float float f(floatf(float););2.函数类型函数类型 函数名函数名(参数类型参数类型1 参数名参数名1,参数类型,参数类型2 参数名

10、参数名2);声明的作用是把函数名、函数参数的个数和参数类型声明的作用是把函数名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。系统能正确识别函数并检查调用是否合法。注意:注意:函数的函数的“定义定义”和和“声明声明”的区别:的区别:l 函数的定义是指对函数功能的确立,包括指定函数函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。个完整的、独立的函数单位。l 函数的声明的作用则是

11、把函数的名字、函数类型以函数的声明的作用则是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。用该函数时系统按此进行对照检查。例例6.3 6.3 对被调用的函数作声对被调用的函数作声明明#include float add(float,float)*函数首部函数首部*float;/*函数体函数体*/z=+;return(z);void main()()float a,b,c;scanf(f,f,a,b););cadd(a,b);printf(sum is f n,c);例例6.3 对被调用的函数作

12、声明对被调用的函数作声明#include void main()()float add(float x,float y);*对被调用函数对被调用函数add的声明的声明*float a,b,c;scanf(f,f,a,b);c=add(a,b);printf(sum is f n,c);float add(float,float)*函数首部函数首部*float;/*函数体函数体*/z=x+y;return(z);6.2.3 6.2.3 函数的参数和函数的值函数的参数和函数的值a,b例例6.4#include void main()()int max(int x,int y);int a,b,c;

13、scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max is%d”,c);int max(int,int)int;z=xy?x:y;return(z);说明:各函数间的信息的往来是由说明:各函数间的信息的往来是由参数传递参数传递和和返回语句返回语句实现的实现的1.1.形式参数和实际参数形式参数和实际参数 例例6.4#include void main()()int max(int x,int y);int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max is%d”,c);int max(int,int)int;

14、z=xy?x:y;return(z);关于形参与实参的说明:关于形参与实参的说明:(1)定义函数时,必须说明形参的类型。形参只能是变量或数组。定义函数时,必须说明形参的类型。形参只能是变量或数组。(2)函数被调用前,形参不占用内存;函数调用结束后,形参所函数被调用前,形参不占用内存;函数调用结束后,形参所占用的内存也将被回收。占用的内存也将被回收。(3)实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。(4)实参与形参的类型必须一致。字符型和整型可以互相匹配。实参与形参的类型必须一致。字符型和整型可以互相匹配。(5)实参对形参的数据传递是单向传递,只由实参传递给形参,实参对形参的数据

15、传递是单向传递,只由实参传递给形参,而不能由形参传递给实参。传递仅由参数的对应位置确定,与而不能由形参传递给实参。传递仅由参数的对应位置确定,与名字无关。名字无关。(6)实参向形参传递数据有两种形式:数值传递和地址传递,数实参向形参传递数据有两种形式:数值传递和地址传递,数值传递后实参仍保留原值不变,地址传递后实参地址中的内容值传递后实参仍保留原值不变,地址传递后实参地址中的内容可能会改变。可能会改变。例例6.5 读程序,写出运行结果读程序,写出运行结果2.数组作为函数的参数数组作为函数的参数(1)数组元素作为函数的实参数组元素作为函数的实参 与普通变量做实参一样,与普通变量做实参一样,数组元

16、素做实参是单向数组元素做实参是单向“值值传递传递”。例例6.6 求求10个任意整数中的个任意整数中的最大数。最大数。max(a,10)(int x,int n)n(2)数组作为函数的形参数组作为函数的形参3、数组做函数参数时,形参数组和实参数组共享同一、数组做函数参数时,形参数组和实参数组共享同一内存单元。内存单元。起始地址起始地址结论:如果形参数组元素的值被修改,实参数组的元结论:如果形参数组元素的值被修改,实参数组的元素的值也就被改变了。素的值也就被改变了。例例6.7 编一个函数编一个函数swap用于交换两个整数的值用于交换两个整数的值例如,设例如,设a=3,b=4,调用函数,调用函数swap后,得后,得a=4,b=3。3.函数的返回值函数的返回值(1)return语句语句一般形式一般形式 return(表达式表达式);函数的返回值也就是函数值,是一个确定的值。函数的返回值也就是函数值,是一个确定的值。如果一个函数有返回值,就必须用如果一个函数有返回值,就必须用return语句。语句。一个函数中可以有一个以上的一个函数中可以有一个以上的return语句,但无论执行到语句,但无论执行

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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