版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计函数第7章学习目标了解函数的概念,掌握函数的定义方法1了解变量的存储属性和编译预处理4掌握函数的调用方法、参数传递及函数的声明2学会用自定义函数的方法编写处理典型问题5掌握函数的嵌套调用和递归调用方法及其执行过程33.1C语言语句7.1函数概述C语言是用函数来实现程序模块的。编写程序时,将一个程序分成若干个相对独立的函数,每个函数可实现单一的功能,其代码结构层次分明。一个C程序可以由一个主函数(main)和若干个其他函数构成,这些函数可以是C语言提供的库函数,也可以是由用户自己编写的函数。执行程序时,总是从主函数开始,到主函数结束,主函数可以调用其他函数,其他函数之间可以互相调用(但其他函数不能调用主函数),同一个函数可以被一个或多个函数调用任意次,这些函数通过主函数的调用来构成一体,实现整个程序的功能。调用别的函数的称为主调函数,被别的函数调用的函数称为被调函数。7.1函数概述#include<stdio.h>voidprintstar()//自定义函数printstar的定义模块{ printf("************\n");}voidprintmessage()//自定义函数printmessage的定义模块{ printf("Helloworld!\n"); printstar(); //在printmessage函数中嵌套调用了printstar函数}voidmain()//主函数main的定义模块{ printstar(); //主函数中调用printstar函数 printmessage();//主函数中调用printstar函数
}7.1函数概述一个C程序由一个或多个源程序文件组成。对较大的程序,一般不希望全放在一个文件中,而将函数和其他内容(如预处理)分别放在若干个源文件中,再由若干源文件组成一个C程序。这样可以分别编写、分别编译,提高调度效率。一个源文件可以为多个C程序共用。一个源程序文件由一个或多个函数组成。系统以源程序为单位进行编译,而不以函数为单位进行编译。函数间可以互相调用,但不能调用main()函数。C程序的执行从main()函数开始,在main()函数中结束。函数定义模块是互相独立的,即函数不能嵌套定义。3.1C语言语句7.1函数概述从用户使用的角度看,函数有两种:(1)标准函数:即库函数,由系统提供的,用户可以直接使用这些函数。C语言提供了丰富的库函数,包括常用的输入输出函数、数学函数、字符和字符串函数、动态分配函数。应用库函数要有:#include<……>或#include“……”的预处理命令行。(2)用户自义的函数:是指用户自己编写的用以解决特定问题的函数。从函数的形式看,函数分两类:(1)无参函数:一般用来执行一组指定的操作,无需返回值的函数。如例7-1中printstar()和printmessage()就是无参函数。(2)有参函数:在调用函数时,在主调函数和被调函数之间有数据传递,即主调函数可以将数据传给被调用函数使用,被调用函数中的数据也可以带回来供主调函数使用。3.1C语言语句7.2函数的定义函数定义由以下几部分组成:(1)函数名;(2)函数的类型,即函数的返回值类型;(3)函数参数的类型和名称;(4)函数的功能,也称“函数体”,即函数需要完成的操作。函数定义的一般格式如下:[数据类型名]函数名(形参类型
形式1,…形参类型
形参n){
函数体语句部分}关于函数的定义,有如下说明:(1)数据类型名:说明函数返回值的类型。当函数的返回值类型为int时,可以省略不加数据类型,即缺省代表省略的是int型,若函数无返回值,可将数据类型定义为void。(2)函数名:函数命名要符合标识符命名规则,且不能与该函数中其他标识符重名,也不能与本程序中其他函数名相同。(3)形参列表:无参函数无形参,有参函数有形参,无论形参有无,函数名后面的一对圆括号不能省略。形参必须是变量,函数定义时,形参并没有具体的值,只有当其他函数调用该函数时,形参才会得到具体的值,多个形参定义组之间用逗号隔开。(4)在函数体:函数定义的主体部分,除了形参之外的其他变量的声明和程序语句。3.1C语言语句7.2函数的定义1、无参函数定义的一般形式数据类型名
函数名(){声明部分;语句;}2、有参函数定义的一般形式数据类型名
函数名(形参列表){声明部分;语句;}例如:max(intx,inty){ intz; z=x>y?x:y; returnz;}说明:C语言规定,若函数名前没有数据类型说明,系统默认int型。3、空函数数据类型名
函数名(){}例如:fun1(){}调用空函数时,什么工作也不做,起到占位的作用,待以后用编好的函数代替它。它可以使程序结构清楚、可读性好,便于扩充新功能。3.1C语言语句7.3函数的参数和函数的值1、函数的参数在调用有参函数时,主调函数和被调用函数之间的数据传递是通过实参和形参实现的。(1)实参:在调用一个函数时,也就是真正使用一个函数时,函数名后面括号中的参数为实际参数,即实参。实参可以是常量、变量或表达式,但要求它们有确定的值。(2)形参:在函数定义模块中,函数名后面括号中的变量名为形式参数,即形参,用于接收实参传递的参数。定义函数时,必须说明形参的类型。(3)实参和形参在数量上,类型上,顺
序上应严格一致,否则会发生类型不匹配的错误。【例7-2】函数调用时的数据传递。程序代码:#include<stdio.h>voidmain()
{ intx,y,z; scanf("%d%d",&x,&y); z=max(x,y);
//x和y为实参
printf("Maxis%d\n",z);}max(intm,intn)
//m和n为形参{ int
k; k=m>n?m:n; return(k);}3.1C语言语句7.3函数的参数和函数的值函数执行的最后一个操作是返回主调函数,有的函数有返回值,有的函数函数无返回值。关于函数值的说明如下:(1)
函数的返回值是通过函数中的return语句获得的。return语句按需要可有可无,函数中无return语句并不是不返回一个值,而是返回一个不确定的值。为使程序减少出错,,凡不要求带回函数值的函数,
一般应定义为void类型(2)函数中可有多个return语句,执行到哪一个return语句,哪一个语句起作用。(3)return语句后面的一对圆括号可以省略,如“returnk;”“与”return(k);”等价。(4)return后面可以是一个表达式,此时返回的是该表达式的值。(5)定义函数时,对函数类型的说明应与return语句中返回值的类型一致,若不一致,将由函数类型决定返回值的类型,系统会自动转换。【例7-3】运行程序,观察运行结果。
#include<stdio.h>voidmain(){intmax(floatm,floatn);//max函数的声明 floatx,y; intz; scanf("%f,%f",&x,&y);//实参为float型 z=max(x,y); //max函数的返回值为int型 printf("Maxis%d\n",z);}intmax(floatm,floatn)//max函数为int型,形参为float型{ floatk; k=m>n?m:n; return(k);//k为float型}运行过程及结果:(1)编译后出现1个警告信息:warningC4244:'return':conversionfrom'float'to'int',possiblelossofdata(2)输入:1.5,6.5↙(3)输出:maxis63.1C语言语句7.4函数的调用函数调用的一般形式为:函数名(实参表列)说明:(1)调用函数时,函数名称必须与具有该功能的自定义函数名称完全一致。如果是调用无参函数,则实参表列可以没有,但括号不能省略。(2)实参可以是常量、变量、表达式或函数,如果实参表列包含多个实参,则各参数间用逗号隔开。实参表列包括多个实参,对实参求值的顺序根据不同的C语言版本而定,有的系统按自左至右的顺序进行,而有的系统则按自右至左的顺序进行。许多C版本是按自右向左的顺序求值。按照函数在程序中出现的位置划分,函数调用的方式有以下三种:【例7-4】实参求值顺序实例。程序代码:#include<stdio.h>voidmain()
{ intf(intx,inty); intn=1m; m=f(n,++n); printf("m=%d\n",m);}intf(intx,inty){
printf("x=%d,y=%d\n",x,y); if(x>y)return1; elseif(x==y)return0; elsereturn-1;}函数参数函数表达式函数语句3.1C语言语句7.4函数的调用与变量一样,函数在使用之前要对其进行声明。所谓声明,是指在函数被调用前,说明该被调用的函数是什么类型的函数以及参数的数据类型等。声明的作用是把函数名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。函数原型声明的一般形式有两种:函数类型
函数名(参数类型,参数类型,…);函数类型
函数名(参数类型
形参,参数类型
形参,…);【例7-5】对被调函数的声明实例。程序代码:#include<stdio.h>voidmain(){floats(floata,floatb);//对s函数原型的声明floatx,y;scanf("%f,%f",&x,&y);printf("sum=%f\n",s(x,y));}floats(floata,floatb)//对s函数的定义,函数首部{return(a+b);//函数体}3.1C语言语句7.5函数的嵌套和递归调用在C语言中,函数间无从属关系,各函数的定义是平行的、独立的。虽然不允许嵌套定义函数(即在一个函数的内部定义另一个函数),但可以嵌套调用,即在调用一个函数的过程中,被调用的函数可以调用另一个函数。执行过程:在main()函数中调用a()函数的语句时,即转去执行a()函数;在a()函数中调用b()函数时,又转去执行b()函数;b()函数执行完毕,返回a()函数的断点,继续执行其后续语句;a()函数执行完毕,返回main()函数的断点,继续执行后续语句。【例7-6】计算整数1到5的阶乘之和。#include<stdio.h>inta(intm),b(intn);//a()函数和b()函数的原型声明voidmain(){printf("%d\n",a(5));//main()函数中调用a()函数}inta(intm) //a()函数定义,用于阶乘累加{intsum,i;for(sum=0,i=1;i<=m;i++) sum=sum+b(i); //a()函数嵌套调用b()函数returnsum; //带返回值返回main()函数}intb(intn) //b()函数定义,用于求阶乘{intk,i;for(i=1,k=1;i<=n;i++) k=k*i;returnk; //带返回值返回a()函数}3.1C语言语句7.5函数的嵌套和递归调用函数的递归调用是C语言的一大特色,一个函数在它的函数体内直接或间接地调用它自身,称为递归调用,这种函数称为递归函数。递归函数既是主调函数,同时又是被调用函数。若函数直接调用自身则称为直接递归调用,若函数间接调用自身则称为间接递归调用递归分为两个过程:(1)递推过程:将一个原始问题分解为一个新问题,新问题的解决办法与原始问题的解决方法相同,这样逐步从未知向已知推进,最终达到递归结束条件,结束递归过程。(2)回推过程:从递归结束条件出发,沿递推的逆过程,逐一求值回推,直到递推的起点,结束回推过程。【例7-7】用递归方法求n!。用递归的方法求n!两要素为:(1)递归算法为:n!=(n-1)!*n(n>1)(2)终结条件为:1!=1(n==1||n==0)#include<stdio.h>longfacto(intn){longr;if(n==0||n==1)r=1;elser=n*facto(n-1);return(r);}voidmain(){intn;longp;printf("Inputainteger:");scanf("%d",&n);p=facto(n);printf("%d!=%ld\n",n,p);}3.1C语言语句7.5函数的嵌套和递归调用【例7-8】用递归求斐波那契数列的第n项。斐波那契数列数列的规律是:从第3个数开始,每个数等于前2个数之和。其递归求解两要素为:(1)递归算法:f(n)=f(n-1)+f(n-2)(n>2)(2)终结条件:f(n)=1(n==1||n==2)#include<stdio.h>longfibona(intn){longr;if(n==1||n==2)r=1;elser=fibona(n-1)+fibona(n-2);return(r);}voidmain(){intn;longp;printf("Inputn=:");scanf("%d",&n);p=fibona(n);printf("fibona=%ld\n",p);}运行结果:Inputn=:10↙fibona=557.6数组作为函数的参数【例7-9】从键盘输入5个任意整数,求最大数。程序代码:#include<stdio.h>max(intm,intn){return(m>n?m:n);}voidmain(){ inta[5],i,y; printf("Input5integers:"); for(i=0;i<5;i++) scanf("%d",&a[i]); y=a[0]; for(i=1;i<5;i++) y=max(y,a[i]); printf("maxis%d\n",y);}运行结果:Input5integers:42619↙maxis9数组元素作函数实参数组元素就是下标变量,它与普通变量并无区别,因此作为函数实参使用与普通变量完全相同。在调用函数时把作为实参的数组元素的值传递给形参,实现单向的值传送。7.6数组作为函数的参数【例7-10】
在数组n中存放了一个学生3门课程的成绩,求总成绩。#include<stdio.h>floatsum(floata[3]);intmain(){inti;floatsco[3];printf("Input3scores:");for(i=0;i<3;i++)scanf("%f",&sco[i]);printf("sumis%.2f\n",sum(sco));//以数组名作为实参调用sum函数return0;}floatsum(floata[3])//接收来自实参数组名(数组的首地址){inti;floats;for(i=0,s=0;i<3;i++)s=s+a[i];return(s);}数组名作为函数参数用数组名作函数的参数可以解决函数只能有一个返回值的问题。数组名代表数组的首地址,当数组名作为函数的参数时,形参和实参都应该是数组名。在函数调用时,实参传递给形参的数据是实参数组的首地址,即实参数组和形参数组完全等同,它们是存放在同一存储空间的同一个数组,共享相同的存储单元。如果在函数调用过程中形参数组的内容被修改了,实际上也是修改了实参数组的内容。7.6数组作为函数的参数【例7-11】
求一个3×3矩阵中所有元素的和。程序代码:#include<stdio.h>intsum(inta[][3]);intmain(){intb[3][3]={{1,2,3},{4,5,6},{7,8,9}};printf("sumis%d\n",sum(b));return0;}intsum(inta[][3]){inti,j,sum;for(i=0,sum=0;i<3;i++)for(j=0;j<3;j++)sum+=a[i][j];returnsum;}关于数组名作为函数参数有几点说明:(1)数组名作函数参数时,应该在主调函数和被调函数分别定义数组。形参数组和实参数组的类型必须一致,否则将引起错误。(2)数组元素作为函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元,在函数调用时值是“单向”传递;数组名作函数参数时,即把实参数组的首地址赋予形参数组,实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化,形成一种“双向”的值传递。(3)形参数组可以不指定大小,即在定义数组时,在数组名后面接一个空的方括号。也可以用另一参数作为数组的大小,以确定实际使用数组的元素个数。(4)多维数组也可以作函数的参数。在函数定义时,对形参数组可以指定每一维的长度,也可省去第一维的长度。3.1C语言语句7.7变量的作用域【例7-12】
分析程序的运行结果。#include<stdio.h>voidfun(){intx=3;{intx=2;//第1个复合语句中的局部变量x{intx=1;//第2个复合语句中的局部变量xprintf("*x=%d\n",x);}printf("**x=%d\n",x);}printf("***x=%d\n",x);}intmain(){intx=10;//主函数中的局部变量xprintf("1:x=%d\n",x);fun();printf("2:x=%d\n",x);return0;}变量的作用域是指变量的有效范围,C语言中所有变量都有自己的作用域,按照作用域的不同可分为局部变量和全局变量。局部变量局部变量也称为内部变量。局部变量是在函数体或复合语句内部定义的变量,其作用域仅在函数内或复合语句内部有效。全局变量定义在所有函数之外的变量称为全局变量。其作用范围为从定义开始到本文件结束。全局变量一经定义,编译系统为其分配固定的内存单元,在程序运行中都占用固定单元。如果在定义之前使用该全局变量,并用extern加以说明,则可扩展全局变量的作用域。3.1C语言语句7.7变量的作用域【例7-13】
全局变量与局部变量同名实例。#include<stdio.h>intx=100;//x为全局变量voidfun1(),fun2(),fun3();//函数原型的声明voidfun1(){intx=10;//局部变量x的定义fun2();fun3();printf("%d\n",x);}voidfun2(){intx=20;//局部变量x的定义x+=10;printf("%d\n",x);}voidfun3(){x+=100;//全局变量x有效printf("%d\n",x);}intmain(){fun1();return0;}使用全局变量与局部变量,应注意以下几点:(1)不同函数内的局部变量可以同名,互不影响。(2)全局变量与局部变量可以同名,在局部变量起作用的范围内,全局变量不起作用。(3)全局变量的初始化只能有一次,是在对全局变量说明的时候。3.1C语言语句7.8变量的存储类别自动变量存储在动态存储区中。由于自动变量极为常用,所以C语言把它设计成默认的存储类型,即auto可以省略不写。如果没有指定变量的存储类型,那么变量的存储类型就默认为auto,如函数中的形参、函数中定义的变量、复合语句中定义的变量都属于此类。自动变量的生存期是在函数被调用期间,即在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。auto变量的一般定义形式如下:[auto]数据类型
变量名;//auto通常可以省略【例7-14】
自动变量运行示例。程序代码:#include"stdio.h"intmain(){intx=1;//main函数中的自动变量xvoidf1(),f2(int);f1();f2(x);printf("x=%d\n",x);return0;}intf1(){intx=3;//f1函数中的自动变量xprintf("x=%d\t",x);}voidf2(intx)//f2函数中的形参x是自动变量{printf("x=%d\t",++x);}3.1C语言语句7.8变量的存储类别静态变量存放在内存中的静态存储区。静态变量的生存期是从编译时开始,编译时为静态变量分配内存单元,在整个程序运行期间,静态变量占用该内存单元。程序结束后,这部分内存单元才被释放,所以其生存期为整个程序的运行过程。静态变量定义的一般形式如下:static变量数据类型
变量名;根据静态变量的作用域范围,可将其分为两种:静态局部变量和静态全局变量。1.静态局部变量在函数体或复合语句内部,用static关键字进行声明的变量称为静态局部变量。2.静态全局变量静态全局变量(静态外部变量)是在函数之外定义的,定义全局变量时加上static,而构成静态全局变量。静态全局变量只能被本文件中的函数引用,而不能被其他文件引用。静态全局变量是外部变量的一种。【例7-15】
静态局部变量示例。程序代码:#include<stdio.h>intmain(){voidf1(),f2();f1();f1();f1();f2();f2();f2();return0;}voidf1(){intn=0;//说明自动变量n并赋初值n++;printf("inf1n=%d\n",n);}voidf2(){staticintn=0;//说明静态局部变量n并赋初值n++;printf("inf2n=%d\n",n);}3.1C语言语句7.8变量的存储类别extern变量是在函数外定义的变量,又称“外部变量”或“全局变量”。外部变量定义的形式如下:extern变量数据类型
变量名;1.在一个文件中声明外部变量若外部变量定义在源文件的开头,所有函数体之前,则该文件中的所有函数可以不加说明直接使用;若外部变量定义在源文件的中间,则在其定义点之前的函数使用该变量时,需要使用extern说明,以扩展它的作用域。【例7-16】
同一文件内用extern声明外部变量示例。程序代码:intA=13;//外部变量A定义在所有函数前intmax(intx,inty){return(x>y?x:y);}#include<stdio.h>intmain(){externB;//需要用extern声明B变量printf("%d\n",max(A,B));return0;}intB=-8;//外部变量B定义点在函数后3.1C语言语句7.8变量的存储类别在多个文件中声明外部变量若一个程序由多个源文件组成,则在一个源文件中定义的外部变量,要想在另一个源文件中使用,需要使用extern声明,声明后就可以把外部变量的作用域扩展到多个文件,甚至整个应用程序。外部变量的特点,决定了它可以在函数之间传递数据。在程序设计中,函数之间传递数据是通过函数的参数及函数的返回值实现的。由于函数只能返回一个值,这就有一定的局限性,而外部变量不受数量的限制。但是,外部变量始终占用内存单元,会使程序的运行受到一定的影响,外部变量也会使各函数的独立性降低,因此,从模板化程序设计的角度看,不宜过多使用外部变量。【例7-17】
多个文件中用extern声明外部变量示例。//源文件f1.c#include"stdio.h"intm=5,n=5;//定义外部变量m、nvoidadd(){m=5+n;n=n*n;}intmain(){externvoidsub();//声明sub是外部函数m=m+5;add();sub();printf("m=%d,n=%d\n",m,n);return0;}//源文件f2.cvoidsub(){externintm;//声明外部变量mm=m-5;}3.1C语言语句7.8变量的存储类别寄存器变量(register变量)在C语言中,存储类别声明为register的变量称为寄存器变量。它也是自动类型变量,与auto变量的区别仅在于:register变量建议编译程序将变量的值保留在CPU寄存器中,而不是像一般变量那样占用内存单元。由于确定和修改寄存器变量的值不需要访问内存,程序运行时,访问存于寄存器内的值要比访问存于内存中的值快得多。因此,我们通常将使用频繁的变量定义为register变量,以提高程序的运行速度。一个常见的用法是将register变量作为循环控制变量。寄存器变量定义的一般形式:register数据类型
变量名;【例7-18】
比较register变量和auto变量作为循环变量的程序的运算速度。程序代码:#include"stdio.h"intmain(){registerintm,n;//register变量for(m=0;m<=10000;m++)for(n=0;n<=100;n++)printf("*");return0;}3.1C语言语句7.8变量的存储类别变量的存储类别归纳为以下几种形式:(1)局部变量默认为auto型;(2)register型变量个数受限;(3)局部static变量具有全局寿命和局部可见性。(4)局部static变量具有可继承性;(5)extern不是变量定义,而是一个声明,它用于扩展外部变量或函数的作用域变量类型局部变量全局变量存储类别autoregister局部static外部static外部存储方式动态静态存储区域动态区域寄存器静态存储区生存期函数调用开始至结束程序整个运行期间作用域定义变量的函数或复合语句内本文件跨文件赋初值每次函数调用时编译时只赋一次初值未赋初值随机数0或空字符3.1C语言语句7.9编译预处理宏是一种预处理指令,它提供了一种机制,可以用来替换源程序中的字符串。从本质上说,宏定义就是用一串字符串替换程序中指定的标识符,因此也称为宏替换。宏定义分为不带参数宏定义和带参数宏定义两种。1.不带参数宏定义一般形式:#define标识符
字符串2.带参数宏定义进行宏替换时,可以像使用函数一样,通过实参与形参传递数据,以增加程序的灵活性。一般形式:#define宏名(形参表)字符串调用形式:宏名(实参表)【例7-19】
不带参数宏定义示例。程序代码:#include<stdio.h>#definePI3.14#defineR2intmain(){doubles;s=2*PI*R*R;printf("半径为R的圆的面积=%.2f\n",s);return0;}C语言与其他高级语言的一个重要区别就是它可以使用预处理命令,具有预处理的功能。所谓预处理,是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所进行的工作。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分进行处理,处理完毕自动进入对源程序的编译。【例7-20】带参数的宏替换。#include<stdio.h>#defineS(a,b)(a>b)?(a):(b)intmain(){intx,y;scanf("%d,%d",&x,&y);printf("%d",S(x,y));return0;}3.1C语言语句7.9编译预处理文件包含的一般形式文件包含是将一个指定文件的内容完全包含到当前文件中,用“include”实现。格式1:#include<文件名>格式2:#include"文件名"条件编译C语言的预处理程序提供了条件编译的功能,可以对源程序的一部分进行编译,每一部分产生不同的目标代码文件,这对于程序的移植和调试是很有用的。条件编译有三种形式。1.if格式#if表达式程序段1[#else程序段2]#endif2.ifdef格式#ifdef标识符程序段1[#else程序段2]#endif3.ifndef格式#ifndef标识符程序段1[#else程序段2]#endif【例7-21】条件编译的作用。程序代码:#include<stdio.h>#defineY1voidmain(){intm=10;#if1printf("m=%d\n",m);#endif#ifdefYprintf("Yisdefined\n");#endif#ifndefYprintf("Yisnotdefined\n");#endif}7.10程序举例intsum1(intnumber){intsum=0;while(number!=0){sum+=number%10;//取出最低位的数字并加到sum上number/=10;//移除最低位的数字}returnsum;}intmain(){intnumber,sum;printf("请输入一个整数:");scanf("%d",&number);sum=sum1(number);printf("各位数字之和为%d\n",sum);return0;}运行结果:请输入一个整数:12345↙各位数字之和为15【例7-22】
编写一个函数intsum1(intnumber),计算主函数中输入的整数各位数字之和,并在主函数中将结果输出。7.10程序举例【例7-23】函数calculate的功能是根据以下公式求,当给指定精度的变量eps输入0.0005时,应输出pi_half=1.570289084840168#include<stdio.h>doublecalculate(doubleeps){doublet=1.0,s=0.0;intn=1;while(t>eps){s=s+t;t=t*n/(2*n+1);n++;}returns;}intmain(){doubleeps=0.0005;//指定的精度doublepi_half=calculate(eps);printf("Theapproximatedvalueofpi/2witherrorlessthan%。4fis:%.15f\n",eps,pi_half);return0;}运行结果:Theapproximatedvalueofpi/2witherrorlessthan5.0000e-004is:1.5702890848401687.10程序举例【例7-24】fun函数的功能是:将形参n中各位中的偶数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值是64862。#include<stdio.h>intfun(intn){inteven_digits=0;int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有限空间作业安全专项施工方案
- 2026四川自贡市中医医院编外人员招聘10人备考题库及完整答案详解1套
- 2026上半年四川成都职业技术学院(考核)招聘高层次人才8人备考题库及参考答案详解(新)
- 2026广西崇左宁明县那堪镇卫生院招聘1人备考题库含答案详解(达标题)
- 2026浙江大学宁波国际科创中心未来计算技术创新中心工程师招聘备考题库带答案详解(培优a卷)
- 2026广西崇左天等县市场监督管理局招聘编外工作人员1人考试备考试题及答案解析
- 2026年烟台文化旅游职业学院公开招聘高层次、高技能人才备考题库附答案详解(培优)
- 2026西藏阿里地区城乡环境综合提升办公室招聘1人备考题库带答案详解(a卷)
- 2025年汉中市汉台区事业单位招聘考试试题及答案解析
- 2026福建事业单位统考三明市泰宁县招聘63人考试备考题库及答案解析
- 博望区农村生活垃圾治理PPP项目中期评估报告
- (高清版)TDT 1037-2013 土地整治重大项目可行性研究报告编制规程
- 手术室一次性手术铺巾标准化操作流程
- 堤防波浪壅高、爬高计算表格
- 打起手鼓唱起歌二声部合唱谱
- 同等学力申硕英语大纲词汇(第六版)
- 广东惠州大亚湾经济技术开发区霞涌街道招考聘用综合应急救援队伍专职队员笔试历年高频考点试卷含答案解析
- 初中英语听力mp3下载带原文mp3 初中英语听力mp3下载免费百度网盘
- 手机摄影技巧培训PPT
- 西门子111报文详细
- X光安检机培训-PPT
评论
0/150
提交评论