




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
七、函数本章概述:以笔试和上机两种形式考核。笔试中常考察下面大纲要求(6)、(7),分值约占14%。上机中,三种题型中均有体现,其中大纲要求(2)、(3)、(4)、(5)是考查重点,抽中几率约为37%。考生要熟练掌握。大纲要求:1.库函数的正确调用。2.函数的定义方法。3.函数的类型和返回值。4.形式参数与实在参数,参数值传递。5.函数的正确调用,嵌套调用,递归调用。6.局部变量和全局变量。7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。重点难点:1.函数的类型和返回值。2.形式参数与实在参数,参数值传递。3.局部变量和全局变量。考点1考点分析: 库函数C语言的函数分为:标准函数(系统函数):系统提供的,定义好的函数,用户直接调用即可。自定义函数:用户根据实际需要,自己定义的函数。要先定义,再调用。库函数:C语言提供了丰富的库函数,这些函数包括常用的数学函数、字符及字符串处理函数、各种输入输出函数等。调用C语言标准库函数时,要先将库函数所在的头文件,用 #include命令包含进来。库函数的调用:同下面“考点5 函数的调用”。考点2 函数的定义函数定义的一般形式:函数返回值类型 函数名称(类型1 参数1,类型2 参数2,) / 函数体函数返回值类型:是函数返回值的数据类型,可以是C语言中的char、int、short、long、float、double等任何一种基本的数据类型。返回类型可以省略不写,如不写则默认为int类型。函数名称:是用户自己定义的名称,与变量的命名规则一样。函数形参列表:函数可以有很多形参,每一个参数都有一个类型及名称,它们是函数的变量,各定义的形参之间用逗号分隔。若所定义的函数没有形参,函数名后的一对圆括号依然不能省略。如:fun().函数体:是函数的程序代码,它们包含在一对大括号内。函数体中,除形参外,所有用到的其他变量必须在说明部分进行定义,这些变量(包括形参)只在函数被调用时才被临时分配内存单元,退出函数时,这些临时存储单元将全部被释放掉,即在该函数体内部定义的变量都将不存在。因此这些变量只在函数体内部起作用,与其他函数的内部变量不相关。l 试题解析1不合法的main函数命令行参数表示形式是A main(int a,char *c) B main(int arc,char *arv)C main(int argc,char *argv) D main(int argv,char *argc)答案:C解析:main()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用来记下命令行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量(指向一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串的首地址。故本题只有C选项不符合要求。考点3 函数的类型与返回值函数返回值:函数的返回值是指函数被调用之后,所取得的并返回给主调函数的值。通过函数内部的return 语句来返回这个值,格式是:return 表达式;函数的类型:return 语句返回的表达式的值的数据类型要与定义函数时,该函数返回值类型一致,称为函数的类型。没有返回值的函数函数也可以没有返回值,这种函数的返回类型被定义成void类型,例如下面函数:void SayHello() puts(“Hello,everyone!”);void类型的函数中也可以有return语句,但return 后面不可以有任何表达式,如:void fun(float x) if(x0) return; /在xy?x:y);解析:调用Max函数后值不确定,例如Max(1,2)的值不一定是。考点4 形式参数与实在参数,参数值传递形参与实参在定义函数时,函数名后面圆括号中的变量称为“形式参数”(简称“形参”);在主调函数中,函数名后面圆括号中的参数(可以是表达式)称为“实际参数”(简称“实参”)。说明:(1)形参出现在函数定义中,必须有名称及类型。在整个函数体内都可以使用,离开该函数则不能使用;(2) 实际参数的个数与类型必须与形式参数一致,实际参数可以是变量,常数、表达式、甚至是一个函数;(3)如实际参数的类型与形式参数的类型不完全一致,至少是可以赋值转换的,否则会发生“类型不匹配”的错误; 【特别提醒】:(1)实参不一定要与相应形参同名,在内存中,形参与实参占据不同的存储单元。(2)在函数调用时,给形参分配存储单元,并将对应实参的值传递给给存储单元。调用结束后,形参单元被释放,实参单元仍保留并维持原值。(3)C语言规定,实参对形参的数据传送是“值传递”,即单向的,只能由实参传送给形参,而不能由形参反向地传送给实参。因此函数调用过程中,形参值的变化不会影响到实参值的变化。l 试题解析1以下叙述中错误的是(D)A)C程序必须由一个或一个以上的函数组成B)函数调用可以作为一个独立的语句存在C)若函数有返回值,必须通过return语句返回D)函数形参的值也可以传回给对应的实参解析:形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是“值传递”。2以下程序的输出结果是 f(int b,int m,int n) int i,s=0; for (i=m;in;i=i+2)s=s+bi; return s; main() int x,a=1,2,3,4,5,6,7,8,9; x=f(a,3,7); printf(%dn,x); A)10 B)18 C)8 D)15 答案:A解析:在main()函数中定义了一个变量x,以及一个有9个元素的数组a,并且每个元素分别赋初值为1、2、3、4、5、6、7、8和9。执行函数调用f(a,3,7),把a的首地址赋给形参b,把3和7分别赋给形参m和n。在f()函数中,for循环执行了2次:第一次,i的值为3,相当于执行了语句“s=s+b3”,b3的值就是a3的值4,故s的值变为4;第二次,i值为5,相当于执行了语句“s=s+b5;”,b5的值为6,故s的值变为10。把s作为函数值返回并赋值给x。考点5 函数的调用函数调用的一般形式:函数名(实参表列);若实参表列包含了两个以上实参,各参数之间用逗号分隔。实参的个数应与形参的个数相同,且按顺序对应。若调用的是无参函数,则不用“实参表列”,但括号不能省略。函数调用的一般方式:(1)函数语句:函数调用单独成为一条语句。例如:puts(str1); /* 调用系统提供的标准函数 */swap(x1,x2); /* 调用用户自定义的函数swap */以语句的形式调用的函数一般只需要完成一定的操作而不必有返回值。(2)函数表达式:函数出现在一个表达式中,例如:if(strcmp(s1,s2)0) /* 函数调用位于条件表达式式中*/n_max=max(x,y,z); /* 函数调用位于赋值语句右侧的表达式中*/因为要参与表达式中的计算,所以要求函数有一个确定的返回值提供给表达式。(1) (2)函数参数:函数调用结果作为另外一个函数的实参。例如:printf(“%dn”,max(x,y,z);/* max函数是printf函数的部分参数 */fun1 ( fun2 ( t ) ); /* fun2函数是fun1函数的实参 */被调用函数必须返回一个确定的返回值,提供给主调函数作为实际参数,一进行后续操作。函数的声明:(1)函数的声明用户(自定义)函数一般应定义在前,调用在后。若被调函数出现调用在前,定义在后时,则应在主调函数的适当位置,对被调函数作声明。函数声明的一般格式为:函数类型 函数名(参数类型1, 参数类型2,)或函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2,)注意:此处的参数名完全是虚设的,即不必与函数首部的形参名一致,又可以与程序中任意用户标示符同名,实际上,这里的参数名常常省略。函数声明语句中的“函数类型”必须与函数返回值的类型一致。函数的嵌套调用 C语言的函数之间都是独立的、平行的,函数之间没有从属关系,即不能在一个函数内定义另外一个函数。但可以嵌套调用,即函数调用中又存在调用。如函数1调用函数2,函数又调用函数3每个函数既可以被其它函数调用,也可以调用其它函数。函数的递归调用函数的“递归调用”是指一个函数直接调用自己(即直接递归调用)或通过其它函数间接地调用自己(即间接递归调用)。l 试题解析1下面程序的运行结果是: 。fun(int t,int n)int i,m;if(n=1)return t0;elseif(n=2)m=fun(t,n-1); return m; main()int a=11,4,6,3,8,2,3,5,9,2;printf(dn,fun(a,10);解析:此题涉及函数的调用和if语句。程序先执行第二个if语句,然后在执行第一个if语句,最后用return返回数值。答案112有以下程序int fun(int n)if(n=1)return 1;elsereturn(n+fun(n-1);main()int x;scanf(d,&x); x=fun(x);printf(dn,x);执行程序时,给变量X输入10,程序的输出结果是 (A)A)55 B)54C)65 D)45解析:本程序考察的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10=55。3有以下程序void f(int a, int i, int j) int t;if(iJ) t=ai; ai=aj; aj=t;f(a,i+1,j-1);main() int i, aa5=1,2,3,4,5;f(aa,0,4);for(i=0; i5; i+) printf(%d,aai);printf(n);执行后输出结果是A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,5,4,3,2,答案:A解析:f(aa,0,4)调用是地址双向传递.i=0,j=4,交换aa=0、aa4的值使aa5=5,4,3,2,1;接着递归调用f(a,i+1,j-1)即f(a,1,3),交换aa1、aa=3的值使aa5=5,4,3,2,1;接着递归调用f(a,i+1,j-1)即f(a,2,2),由于i=j=2,退出函数调用,依次输出aa5的数组元素为5,4,3,2,1, 答案:A4以下程序的输出结果是 。 main() int x=0; sub(&x,8,1); printf(%dn,x); sub(int *a,int n,int k) if(k=n)sub(a,n/2,2*k); *a+=k; 解析:在主函数中定义了一个变量x并赋初值0,然后执行函数调用语句,该语句的执行过程为sub(&x,8,1)调用sub(&a,4,2),sub(&a,4,2)调用sub(&a,2,4),sub(&a,2,4)中由于24,所以if后面括号里的判断为假,递归结束,执行其后的*a+=k;语句此时x=x+k=0+4=4,回退到上一层调用函数sub(&x,4,2)中,执行后面的语句,x=x+k=4+2=6,再回推到最上一层调用函数sub(&x,8,1)执行后面的语句,x=x+k=6+1=7,所以最后输出7。考点6 变量的作用域、局部和全局变量变量的作用域: 变量的作用域指(从空间角度来看)变量的有效范围或者变量的可见性。变量定义的位置决定了变量的作用域。变量从作用域的角度可以分为:局部变量,全局变量。局部变量:所谓“局部变量”指在一定范围内有效的变量。C语言中,在以下各位置定义的变量均属于局部变量,其作用域也不同。 在函数体内定义的变量,在本函数范围内有效,即其作用域只局限在本函数体内。 在复合语句内定义的变量,仅在本复合语句范围内有效。 有参函数中的形式参数也是局部变量,只在其所在的函数范围内有效。说明:(1) 局部变量所在的函数被调用或执行时,系统临时给相应的局部变量分配存储单元,一旦函数执行结束,则系统立即释放这些存储单元。(2) 因为所有局部变量的定义都位于函数中,且从宏观角度来说,局部变量的作用域也都局限于函数内,所以局部变量也可称作内部变量。(3) 不同函数中和不同的复合语句中可以使用(即定义)同名变量。因为它们的作用域不同,程序运行时在内存中占据不同的存储单元,各自代表不同的对象,所以它们之间互不干预。全局变量:所谓“全局变量”是指在函数之外定义的变量。全局变量的定义位置可以在所有函数之前、各个函数之间。当然从理论上讲,也可以在所有函数之后(但实际应用中很少用)。全局变量作用域:从定义全局变量的位置起到本源程序结束为止。说明: (1) 因为全局变量的定义位置都在函数之外(且作用域范围较广,不局限于一个函数内),所以全局变量又可称为外部变量。 (2) 使用全局变量可以增加各个函数之间数据传输的渠道,即在某个函数中改变一全局变量的值,就可能影响到其它函数的执行结果。但它会使函数的通用性降低,使程序的模块化、结构化变差,所以应慎用、少用全局变量。 (3) 全局变量可以和局部变量同名,当局部变量有效时,同名的全局变量不起作用。l 试题解析1程序如下:main() int i=5; fun1(i/2); printf(i=%dn,i); fun1(i=i/2); printf(i=%dn,i); fun1(i/2); printf(i=%dn,i); fun2(i); printf(i=%dn,i);fun1(int i) i=iy?x:y;int f2(int x,int y)return xy?y:x;main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d); f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; printf(%d,%d%dn,e,f,g);程序运行后的输出结果是_。A)4,3,7B)3,4,7C)5,2,7D)2,5,7(4)有以下程序#define P 3#define F(int x) return (P*x*x);main() printf(%dn,F(3+5);程序运行后的输出结果是_。A)192B)29C)25D)编译出错(5) 若程序中定义了以下函数 double myadd(double a,double B) return (a+B) ;并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是_。A) double myadd(double a,B) ; B) double myadd(double,double);C) double myadd(double b,double A) ;D) double myadd(double x,double y);(6) 有以下程序char fun(char x , char y) if(xy) f(x,y); else if(yz) f(y,z); else f(x,z); printf(“%d,%d,%dn”,x,y,z);执行后输出结果是_。A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,1(8) 若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是_。A) 调用可以作为独立的语句存在B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中D) 调用可以作为一个函数的形参(9) 有以下函数定义:void fun( int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是_。A) fun(int y,double m); B) k=fun(10,12.5);C) fun(x,n); D) vold fun(n,x);(10) 有以下程序fun(int a, int b) if(ab) return(a);else return(b);main() int x=3, y=8, z=6, r; r=fun (fun(x,y), 2*z); printf(%dn, r);程序运行后的输出结果是_。A) 3 B) 6 C) 8 D) 12(11) 在一个C程序中_。A) main函数必须出现在所有函数之前B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置(12) 有以下程序intfl(intx,inty)returnxy?x:y;intf2(intx,int y)returnxy?y:x;main()int a=4,b=3,c=5,d,e,f;d=f1(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf(%d,%d,%dn,d,f,e);执行后输出结果是_。A) 3,4,5B) 5,3,4C) 5,4,3D) 3,5,4(13) 有如下程序void f(int x,inty)intt;if(xy)t=x;x=y;y=t;main()inta=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf(%d,%d,%dn,a,b,c);执行后输出结果是_。A) 3,4,5B) 5,3,4C) 5,4,3D) 4,3,5(14) C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是_。A) void B) intC) floatD) double(15) 有以下程序float fun(int x,int y) return(x+y); main() int a=2,b=5,c=8;printf(“%3.0fn”,fun(int)fun(a+c,b),a-c);程序运行后的输出结果是_。A) 编译出错B)9C)21D)9.0(16) 若有以下程序#include void f(int n);main() void f(int n);f(5);void f(int n) printf(%dn,n); 则以下叙述中不正确的是_。A) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D) 函数f无返回值,所以可用void将其类型定义为无值型(17) 以下函数值的类型是_。fun ( float x ) float y;y= 3*x-4;return y;A) int B) 不确定 C) void D) float(18) 以下所列的各函数首部中,正确的是_。A) void play(var :Integer,var b:Integer)B) void play(int a,b)C) void play(int a,int b)D) Sub play(a as integer,b as integer)(19) 以下程序的输出结果是_。A) 0 B) 29C) 31D) 无定值fun(int x, int y, int z) z=x*x+y*y; main() int a=31; fun(5,2,a); printf(“%d”,a);(20) 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5);该函数调用语句中,含有的实参个数是_。A) 3 B) 4 C) 5 D) 有语法错(21) 有如下程序int runc(int a,int b) return(a+b);main0 int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%dn”,r);该程序的输出的结果是_。A) 12 B) 13 C) 14 D) 15(22) 以下叙述中不正确的是_。A) 在不同的函数中可以使用相同名字的变量B) 函数中的形式参数是局部变量C) 在一个函数内定义的变量只在本函数范围内有效D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(23) 有以下程序viod fun (int a,int b,int c) a=456; b=567; c=678;main() int x=10, y=20,z=30;fun (x,y,z);printf(%d,/%dn,c,d);输出结果是_。A)30,20,10B)10,20,30C) 456,567,678 D) 678,567,456(24) 有以下程序include atdio.hint abc(int u,intv);main () int a=24,b=16,c; c=abc(a,b); printf(%dn,c);nt abc(int u,int v) int w; while(v) w=u%v; u=v; v=w return u;输出结果是_。A) 6 B) 7 C) 8 D) 9(25) 以下说法中正确的是_。A) C语言程序总是从第一个的函数开始执行B) 在C语言程序中,要调用的函数必须在main()函数中定义C) C语言程序总是从main()函数开始执行D) C语言程序中的main()函数必须放在程序的开始部分(26) 请读程序:#includefunc( int a, int b) int c;c=a+b;return c;main() int x=6, y=7, z=8, r;r=func( x-,y=,x+y),z-);printf(%dn,r);上面程序的输出结果是_。A) 11 B) 20 C) 21 D) 31 二、填空题(1)有以下程序int sub(int n) return (n/10+n%10); main() int x,y; scanf(%d,&x); y=sub(sub(sub(x); printf(%dn,y);若运行时输入:1234,程序的输出结果是 【1】 。(2) 通过函数求f(x)的累加和,其中f(x)x21main() printf(The sum=%dn,SunFun(10);SunFun(int n) int x,s=0; for(x=0;x=n;x+) s+=F( 【2】 ); return s;F( int x) return 【3】 );(3) 函数fun的功能是计算xndouble fun(double x,int n) int i; double y=1; for(i=1;i=n;i+) y=y*x; retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年合肥市瑶海区直机关事业单位公开招募青年就业见习人员32人备考考试题库附答案解析
- 2025浙江宁波古塘街道办事处招聘编外工作人员1人(二)考试参考题库及答案解析
- 上高县2025年城郊学校公开选调教师【11人】考试参考试题及答案解析
- 2025云南省玉溪市红塔区林业和草原局公开招聘(6人)备考模拟试题及答案解析
- 2025年职业资格董秘资格证深交所-深交所参考题库含答案解析(5卷)
- 南部县2025年公开引进“带编入企”人才(10人)备考考试题库附答案解析
- 2025年职业资格出版专业资格中级出版专业理论与实务-初级出版专业理论与实务参考题库含答案解析(5卷)
- 2025年职业资格企业人力资源管理师四级企业人力资源管理师-基础知识参考题库含答案解析(5卷)
- 2025年职业技能西式烹调师西式烹调师(高级)-西式烹调师(初级)参考题库含答案解析(5卷)
- 农产品销售采购合同书
- 2025年汽车零部件企业公司组织架构图职能部门及工作职责
- 机械加工质量控制计划
- 《水利工程质量》课件
- 《市场营销岗位介绍》课件
- 《电子收费系统E》课件
- 2024年全国《考评员》专业技能鉴定考试题库与答案
- 原材料不合格品处理流程
- 40m预制箱梁汽车吊双机台吊专项方案(经典)
- 人教版小学数学四年级上册教案全集(表格式教案)
- 全国人力资源和社会保障法律法规知识网络竞赛题及答案
- 医学教材 变态反应性疾病的诊疗进展标准版资料
评论
0/150
提交评论