第8章 函数41176.doc

上传人:人*** 文档编号:546730156 上传时间:2023-05-01 格式:DOC 页数:25 大小:75KB
返回 下载 相关 举报
第8章 函数41176.doc_第1页
第1页 / 共25页
第8章 函数41176.doc_第2页
第2页 / 共25页
第8章 函数41176.doc_第3页
第3页 / 共25页
第8章 函数41176.doc_第4页
第4页 / 共25页
第8章 函数41176.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第8章 函数41176.doc》由会员分享,可在线阅读,更多相关《第8章 函数41176.doc(25页珍藏版)》请在金锄头文库上搜索。

1、第8章 函数41176必须有所知,否则不如死。罗曼罗兰第8章 函数一、概述一个复杂的程序可以由一个主函数和若干个其他函数组成。主函数就是main函数,其他函数需要另外定义。例8.1 函数调用的简单例子。程序如下:#include void printstar();/*函数printstar的声明*/void print_message();/*函数print_message的声明*/void main()/*主函数main */printstar();print_message();printstar();void printstar()/*函数printstar 定义部分*/printf(*

2、n);void print_message()/*函数print_message定义部分*/printf( How do you do!n);运行结果:* How do you do!*使用函数的好处:(1)相同的功能不用书写多遍,如上面程序中执行了2次画线程序,只需调用2次printstar函数即可。(2)使主函数main变得非常简洁。(3)其他很多好处。二、函数定义的一般形式1、无参函数定义的一般形式类型标识符 函数名()函数体如下是无参函数:void printstar()printf(*n);其中类型标识符为void,表示没有函数返回值,函数名为printstar。又如:void pr

3、int_message()printf( How do you do!n);2、有参函数定义的一般形式类型标识符 函数名(形式参数列表)函数体如下列是有参函数:int max(int x, int y)int z;z = xy?x:y;return z;其中类型标识符为int,表示函数返回一个整型数,函数名为max。形式参数有2个:第1个是整型数x,第2个是整型数y。注:函数一般都有独立而完整的功能,如上面的max函数的功能是求两整数的较大值。3、空函数没有函数体的函数叫空函数,如:void dummy() 它的作用是:为函数扩充预留空间。调用该函数时,什么也不做就返回了。一般用在大程序的相对

4、前期设计和编程上,便于逐步完善,好象先建立一个空房子,以后逐步添加家具。三、函数参数和函数的值1、形式参数和实际参数例8.2 调用函数时的数据传递#include int max(int x, int y); /*函数max 的声明*/void main()int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b); /*调用函数max,将a的值作为第一个参数传给max,将*/printf(较大值是%dn,c);int max(int x, int y) /*函数max 的定义部分*/int z;z = xy?x:y;return z;说明:主函数main中的语句c=max

5、(a,b);表示:调用函数max,将a的值作为第一个参数传给max函数(定义部分的x),将b的值作为第二个参数传给max函数(定义部分的y)。我们称定义部分int max(int x, int y)中的参数int x, int y叫做形式参数(简称形参),而调用时使用的参数(如c=max(a,b);中的a,b)叫做实际参数(简称实参)。注意:函数要先声明,后使用。运行结果:7,8(回车)较大值是8实参可以是常量、变量或表达式。如max(3,a+b)将3作为第一个参数传给max函数,将a+b的计算结果作为第二个参数传给max函数。注意:形式参数和实际参数的类型和个数必须匹配。思考:下面程序中,显

6、示的结果是什么?#include void swap(int x, int y);void main()int a=1,b=2;swap(a,b); 必须有所知,否则不如死。罗曼罗兰printf(a=%d,b=%dn,a,b);void swap(int x, int y)int t;t=x; x=y; y=t结论:按值传递时,被调用的函数内对参数的改变不会影响调用函数中的变量。原理:语句swap(a,b);是将变量a、b中的值拿出来(复制)赋给函数swap的参数变量x和y,变量x、y有自己的存储空间,与变量a、b的存储空间无关。当x、y在swap函数内被改变时,a、b不受任何影响。2、函数的

7、返回值(1)函数的返回值通过函数内的return语句来返回。如:int max(int x, int y) /*这里max前的 int 表示函数返回值的数据类型*/int z;z = xy?x:y;return z; /*将 z的值作为函数的返回值*/又如:int max(int x, int y)return(xy?x:y); /*将表达式 xy?x:y 的值作为函数的返回值*/(2)函数值的类型如下面是各种函数的定义的开始部分:int max(int x, int y) /*函数值为 int 型*/float max(float x, float y) /*函数值为 float型*/uns

8、igned int strlen(char str)/*函数值为 unsigned int型*/double min(int x,int y) /*函数值为 double型*/char letter(char c1,char c2) /*函数值为 char型*/(3)return返回值的数据类型必须与函数定义的返回类型一致。(4)不带返回值的函数,应该用void来定义函数无类型(也叫空类型)。四、函数的调用1、函数调用的一般形式参见课本161,作为自学内容。注意:不建议使用类似于书中例8.4中的这种模糊不清的参数来进行函数调用。2、函数调用的方式(1)函数语句例8.1程序中的printstar

9、();(2)函数表达式例8.2程序中的c=max(a,b)(3)函数参数如:下面程序中,将函数作为另一函数的参数。#include int max(int x, int y);void main()int a,b,c,m;scanf(%d,%d,%d,&a,&b,&c);m=max(a,max(b,c); /*先计算红色的函数值,然后将它作为外一层函数的参数*/printf(较大值是%dn,m);int max(int x, int y)int z;z = xy?x:y;return z;思考:上面程序的功能是什么?3、对被调用函数的声明和函数原型在一个函数中调用另一个函数需要具备以下条件:(

10、1)首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。(2)如果使用库函数,应该用#include把库函数信息包含进来(其中包括函数声明的信息)。(3)如果使用用户自定义函数,而该函数的位置在调用它的函数的后面,应该先在前面对被调用函数进行声明。以上(2)(3)两点其实就是:先声明,后使用(和变量一样)。例8.5 对被调用的函数作声明。#include void main()float add(float x, float y);/*先对被函数声明,此处的函数声明称为函数原型*/float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b); /*在上面

11、声明后,才能在这里使用*/printf(和是%fn,c);float add(float x, float y) /*这一行是函数首部,下面是函数体*/float z;z = x + y;return z;运行情况:3.6,6.5(回车)和是10.100000注:如果不进行函数声明就进行使用,编译时,编译器无法判断下列情况:(1)add是否是函数名?(2)你给它的参数个数和类型是否正确?(3)它的函数值是什么类型?能否参加语句c=add(a,b)的赋值或其他运算。进行了函数声明,以上三点就迎刃而解了。五、(标题略)(注:作为初学者容易对本标题产生误解,看书的同学也请忽略标题和书上这一节的前面内

12、容,应该从书本第168页的例子开始看,也可不看书,看本文档以下的内容)例8.6 用弦截法求方程f(x)=x3-5x2+16x-80=0的一个根。数学定理:f(x)在区间x1,x2内连续可导,且f(x1)和f(x2)符号相反,则区间(x1,x2)内必有一个根。直观理解: f(x)=0的根就是f(x)与x轴的交点,f(x)是连续光滑的曲线,如果f(x1)和f(x2)符号相反,说明f(x)在区间(x1,x2)内必与x轴相交。算法分析:(1)取两个不同点x1、x2,如果f(x1)和f(x2)符号相反,则区间(x1,x2)内必有一个根。如果f(x1)和f(x2)同号,则应改变x1、x2的选取,直到f(x

13、1)和f(x2)异号为止。(2)连接(x1,f(x1)和(x2,f(x2)两点,此线(即弦)交x轴于x。x的坐标可由公式得到:x=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1)(3)若f(x)与f(x1)同号,则根必在区间(x,x2)内,此时将x作为新的x1。如果f(x)与f(x2)同号,则根必在区间(x1,x)内,此时将x作为新的x2。(4)重复步骤(2)和步骤(3),直到|f(x)|为止(是一个很小的数,如10-6)。此时认为f(x)0。如何实现该算法?(1)分析该算法中包含哪些基本功能?基本功能1:要对x1、x2、x作函数计算。(即已知一个点的x值,求出f(x)的值)基本功能2:求出两点(x1,f(x1)和(x2,f(x2)的连线和x轴的交点的x值。 必须有所知,否则不如死。罗曼罗兰基本功能3:求出f(x)在区间(x1,x2)内的一个根。(2)如何组装这些基本功能,使程序完成整个过程?* 给出主函数的基本思路:步骤一:输入:请用户输入x1和x2的值作为初始区间x1,x2。(注意:需要检测f(x1)和f(x2)是否同号,如果同号则重新输入,直到异号为止)步骤二:用上面的基本功能3求出f(x)在区间(x1,x2)内的一个根。步骤三:输出结果。* 如何实现三个基本功能?* 对于上面的基本功能1,我们用函数f(x)来实现。(注意:这里是指程序内的函数,函数

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

当前位置:首页 > 生活休闲 > 社会民生

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