您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > c++复习2(函数)
C++程序设计函数zjunqiang@126.com函数的定义一般格式:类型函数名(形式参数列表){函数体}函数的调用函数调用就是使程序转去执行某个函数体。C++中,除了main函数外,其他任何函数都是通过被主函数直接或间接调用进行的。调用无参函数的调用格式:函数名()有参函数的调用格式:函数名(实参表)实参实参用来将实际参数的值传递给形参可以是常量、具有值的变量或表达式。函数调用和返回的过程编写求阶乘n!的函数函数[例]以下函数定义中能正确编译的是。A.doublefun(intx,y){intz=x+y;returnz;}B.doublefun(intx,inty){intx,y;doublez;z=x+y;returnz;}C.doublefun(intx,inty){z=x+y;returnz;}D.doublefun(intx,inty){doublez;z=x+y;returnz;}函数[例]C++中函数返回值的类型是由决定的。A.return语句中的表达式的值B.调用该函数的主调函数类型C.定义函数时所指定的函数类型D.传递给函数的实参类型[例]设有函数定义:intf(void){return100,200;},则调用函数f1()时的返回值是。函数[例]C++的函数体中,下面是正确的。A.可以定义和调用其他函数B.可以调用但不能定义其他函数C.不可调用但可以定义其他函数D.不可调用也不可定义其他函数[例]在函数说明时,下列项是不必要的。A.函数的类型B.函数参数类型和名字C.函数名字D.返回值表达式函数[例]以下叙述中不正确的是。A.在函数中,通过return语句传回函数值B.在函数中,可以有多条return语句C.主函数名main后的一对圆括号中也可以带有形参D.调用函数必须在一条独立的语句中完成函数[例]在一个被调用函数中,关于return语句使用的描述,错误的是。A.被调用函数中可以不用return语句B.被调用函数中可以使用多个return语句C.被调用函数中,如果有返回值,就一定要有return语句D.被调用函数中,一个return语句可返回多个值给调用函数函数调用函数通常需“先定义,后使用”;函数不能嵌套定义,但是可以嵌套调用;函数调用[例]以下函数调用语句中实参的个数是。excc((v1,v2),(v3,v4,v5),v6);A.3B.4C.5D.6函数调用[例]有如下程序intrune(inta,intb){return(a+b);}voidmain(){intx=2,y=5,z=8,r;r=func(func(x,y),z);coutrendl;}该程序的输出结果是________。A.12B.13C.14D.15函数的原型说明1)使用场合:调用函数在前,被调函数在后。2)书写位置:调用函数定义之前或在调用函数函数体中调用语句之前。3)书写形式:类型函数名(形参类型说明表);4)语句后面的分号不可缺少;5)形参类型说明表中的形参名可省略,但其数据类型必须写完整;函数的原型说明[例]在以下的函数原型说明中存在语法错误的是________。A.voidf(inta,int);B.voidf2(int,int);C.voidf3(int,int=5);D.intf4(intx=2,inty);函数重载所谓函数重载指的是指同一个函数名可以由多个不同功能的函数实现。构成函数重载的必要条件是函数名相同、参数的个数或类型不同,如果仅仅是返回类型不同,则不能构成函数的重载。函数重载[例]某函数原型为floatfun(int,int=0);,以下一组同名函数中哪一个不能与该函数构成重载?A.floatfun(int,double);B.intfun(float);C.voidfun(float,int=1);D.intfun(int,int&);参数传递值传递指针传递引用传递一、值调用值传递在调用时仅将实参的值赋给形参,在函数中对形参值的任何修改都不会影响到实参的值。好处:减少了调用函数与被调用函数之间的数据依赖,增强了函数自身的独立性。缺点:被调用函数向调用函数传递的数据仅有一个返回值,有时显得不够用值传递#includeiostreamusingnamespacestd;voidswap(intx,inty){inttmp;tmp=x;x=y;y=tmp;}引用调用1、引用是一种特殊类型的变量,可以被认为是另一个变量的别名。通过引用名与通过被引用的变量名访问变量的效果是一样的。引用运算符“&”用来说明一个引用。例如:inti,&refi=i;引用传递#includeiostreamusingnamespacestd;voidswap(int&x,int&y){inttmp=x;x=y;y=tmp;}[例]设有说明语句:floatfun(char*,int&);intk;charstr[200];以下对函数fun的调用中,正确的调用格式是。A.fun(str,&k)B.fun(str,k)C.fun(str[100],k)D.fun(str[100],&k)[例]设有说明语句:floatfun(char*,int&);intx;chars[200];以下对函数fun的调用中,正确的调用格式是。A.fun(s,&x)B.fun(s,x)C.fun(*s,x)D.fun(*s,&x)引用[例]有变量说明:intx=500;下列说明引用变量y的方法中,正确的是。A.int&y=x;B.int&y=500C.int&y=&xD.inty=&x[例]若定义了说明语句:intm=10;下列选项中,能正确说明引用类型变量x的语句是。(2006春)A.int&x=m;B.int&x=10C.int&x;D.int&x=&m值传递[例]若定义函数:intf(intx){x++;returnx;}执行以下语句:inta=5;f(a)+f(a);则a的值A.5B.6C.7D.8引用传递[例]以下程序运行后输出四行分别为:#includeiostream.hvoidf(inta,int&b){intt=a;a=b;b=t;}voidmain(void){intx=3,y=4;coutx’\t’yendl;f(x,y);coutx’\t’yendl;f(y,x);coutx’\t’yendl;f(x,x);coutx’\t’yendl;f(y,y);coutx’\t’yendl;}指针传递[例]以下程序的输出结果是。voidp(int*a,int*b){intt=*a;*a=*b;*b=t;}voidmain(void){intx=100,y=200;p(&x,&y);coutx'\t'y'\n';}函数的递归调用[例]以下程序输出voidfun(intn,int*s){intf1,f2;if(n==1||n==2)*s=1;else{fun(n-1,&f1);fun(n-2,&f2);*s=2*f1+f2+1;coutf1’\t’f2’\n’;}}voidmain(void){intx;fun(4,&x);cout”x=”x’\n’;}函数的递归调用[例]以下程序输出#includeiostream.hvoidf(inti){if(i0){couti%10;if(i9)f(i/10);}elseif(i0){if(i=-1)f(i/10);cout(-i)%10;}elsecouti;}voidmain(void){f(125);cout'\n';f(-234);cout'\n';f(0);cout'\n';v}#includeiostream.h(2006春)intm=10;voidfun(intn){m+=m;if(n=1)coutm'\n';else{fun(n-1);m+=m;coutm'\n';}}voidmain(){fun(3);fun(5);}voidf(intj)(2006秋){if(!j){coutj;return;}if(j%2){f(j/10);coutj%10;}else{coutj%10;f(j/10);}}voidmain(){f(0);cout'\n';f(1357);cout'\n';f(2468);cout'\n';}标识符的作用域块作用域1)括号括起来的程序段称为块,块内标识符的有效范围是从声明处开始,到该块结束处为止。2)块的嵌套问题:当块A中嵌套另一个块B,块A与B中存在同名标识符,则在B中的标识符将屏蔽A中的同名标识符,即局部优先。3)if语句和switch语句的表达式(即括号中语句)中定义的标识符,作用域在该语句内。for语句的第一个表达式中声明的标识符,作用域为包含该for语句的整个块。4)有参函数形式参数的作用域为块作用域。函数原型作用域函数原型声明中参数的作用域为函数原型作用域,有效范围即参数所在的括号内。文件作用域1)在所有函数之外定义的不属于任何块的标识符,所具有的作用域为文件作用域。有效范围从标识符声明处开始,一直到文件结束。具有文件作用域的变量称为全局变量。2)当全局变量与局部变量存在同名时,局部变量优先,但是可以通过作用域运算符“::”来强制调用全局变量。函数作用域指在函数内定义的标识符在其定义的函数内均有效。类作用域标识符的作用域[例]以下程序输出结果的第一行是(1),第二行是(2)。#includeiostream.hintx=100;//Avoidmain(void){intx=200;//Bx+=::x;{intx=500;//D::x+=x;}//Ecoutxendl;;cout::xendl;}[例]以下程序输出结果#includeiostream.hintz;//Avoidfun(intx,int&y){z=x;x=x+y;y=y+z;//Bcoutx‘,’y‘,’zendl;}voidmain(void){intx=5,y=10;z=15;//Cfun(x,y);coutx‘,’y‘,’zendl;}#includeiostream.h(2006春)inta=15;voidmain(){inta=20,b=40;{inta=0,b=0;for(inti=1;i3;i++){a+=i;b+=a;}couta''b''::aendl;}couta''bendl;}标识符的生命期变量的生存期分为:自动(auto)、寄存器(register)、静态(static)和外部(extern)。默认情况下:函数内定义的变量为auto类型,若未赋初值,其变量值不确定;函数外定义的变量为static类型,若未赋初值,其变量值为0。局部变量也可以是static类型,若未赋初值,其变量值也为0。[例]在VC++语言中,函数中变量的隐含存储类别是__________。A.autoB.staticC.externD.无存储类别[例]静态的整型变量有确定的初值,其缺省的初值为______。[例]以下程序输出的第一行是(1),第二行是(2)。#includeiostream.hintf(void){staticinta,b=10,c=20;//Aa+=b;b+=c;returnc=a+b;//B}voidmain(void){coutf()endl;//Ccoutf()endl;//D}[例]以下程序输出的第一行是(1),第二行是(2)。intf(intx=0){staticintt=10;//Ainta=10;//Bt+=5;a+=5;
本文标题:c++复习2(函数)
链接地址:https://www.777doc.com/doc-5180212 .html