您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 作业━━第3章━━函数的定义和调用
函数的定义和调用【学习要点】1.掌握函数的定义、调用、返回、函数的原型声明。2.掌握函数的参数传递──值传递。3.掌握函数的参数传递──引用传递。4.掌握全局变量及其作用域。5.掌握局部变量及其作用域。6.掌握C++程序的内存布局。7.掌握标识符的作用域(块作用域、文件作用域、函数原型作用域、函数作用域)。8.掌握变量的存储类型和生存期。9.掌握函数的调用机制。-------------------------------------------------------------------------------------------------------------------------------------------------【例题分析】1.C++中函数返回值的类型是由______决定的。A.return语句中的表达式类型B.调用该函数的主调函数类型C.定义函数时所指定的函数类型D.传递给函数的实参类型【答案】C【解析】定义函数时所指定的返回值类型也称为函数类型。2.以下描述中正确的是______。A.在一个C++的函数中,可以定义和调用其他函数B.在一个C++的函数中,可以调用但不能定义其他函数C.在一个C++的函数中,不可以调用但能定义其他函数D.在一个C++的函数中,不可以调用也不能定义其他函数【答案】B【解析】C++函数之间是并列平等的关系,在程序中的定义位置任意,一个函数可以调用其它函数,也可以被其他函数所调用,但主函数只能调用其他函数,而不能被调用。3.在程序执行过程中,某函数fun()中声明的static变量k有这样的特性:______。A.k存在于fun()被调用期间,且仅能被fun()所用B.k存在于整个程序执行过程中,且仅能被fun()所用C.k存在于fun()被调用期间,且可被所有函数所用D.k存在于整个程序执行过程中,且可被所有函数所用【答案】B【解析】static局部变量的生存期:在程序运行中第一次进入其作用域时在静态区分配,离开其作用域时并不释放,只是不能引用,若程序运行中再次进入该static局部变量的作用域,由于该变量已经存在,所以不再分配空间,可直接引用。static局部变量直到程序运行结束才被释放。4.下面程序的运行结果是______。#includeiostream.hvoidmain(){externinta;cout”a=”aendl;}inta=16;【答案】输出:a=16【解析】在变量声明时,用关键字extern修饰,称为外部变量。当全局变量的引用在定义之前,对此需作外部变量声明。需提醒的是:外部变量的定义性声明和外部变量的引用性声明不同,外部变量的定义(开辟存储单元)只能出现一次,而对外部变量的引用性声明根据需要可出现多次,需用extern进行修饰。5.下面程序的运行结果是______。#includeiostream.hintfac(inta){intb=0;staticintc=3;b++;c++;returna+b+c;}voidmain(){inta=3,j;for(j=0;j3;j++)coutfac(j)‘\t’;coutendl;}【答案】输出:5796.下面程序的运行结果是______。#includeiostream.hfun(int,int);voidmain(){intk=4,m=1,p;p=fun(k,m);coutp‘\t’;p=fun(k,m);coutpendl;}fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}【答案】输出:8177.下面程序的运行结果是______,其中函数abc(intx,inty)的功能是______。#includeiostream.hintabc(int,int);voidmain(){inta=24,b=16;coutabc(a,b)endl;}intabc(intx,inty){intw;while(y){w=x%y;x=y;y=w;}returnx;}【答案】输出:6【答案】函数abc(intx,inty)的功能:用展转法求整数x和y的最大公约数。8.编写程序:设计一个函数abc(),求两个整数的最大公约数。【答案】编写程序如下:#includeiomanip.hintabc(intx,inty){for(inti=(xy?x:y);;i--)if(x%i==0&&y%i==0)returni;}voidmain(){inta,b;cout“请输入两个正整数:”;cinab;cout“整数”a“和”b“的最大公约数是:”abc(a,b)endl;}-------------------------------------------------------------------------------------------------------------------------------------------------【思考题】㈠选择题1.变量的有效范围与其定义的位置有关,______,其作用域在整个源文件中都有效。A.在第一个函数中定义的变量B.在定义第一个函数之前所定义的变量C.在主函数中定义的变量D.在函数中定义的静态变量【答案】???2.在一个源文件中定义的全局变量,其作用域是______。A.文件的全部范围B.本程序的全部范围C.本函数的全部范围D.从定义该变量的位置开始至本文件的结尾处结束【答案】???-------------------------------------------------------------------------------------------------------------------------------------------------㈡填空题1.若有函数声明:intcount(int&a,intn);则调用时实参和形参之间的传递方式是:第一个参数按______传递;第二个参数按______传递。【答案】???【答案】???2.执行以下程序的输出是______。#includeiostream.hfun(intx){staticinta=3;a=x;returna;}voidmain(){intk=2,m=1,n;n=fun(k);n=fun(m+n);coutnendl;}【答案】???3.执行以下程序的输出是______。#includeiostream.hintfun(inti);voidmain(){inti=1;switch(i){default:i++;break;case0:i++;fun(i);case1:i++;fun(i);case2:i++;fun(i);}coutiendl;}intfun(inti){statick=10;i++;k++;coutk’\t’;returnk;}【答案】???-------------------------------------------------------------------------------------------------------------------------------------------------㈢写出下列程序的输出结果1.下面程序的运行结果是______。#includeiostream.hintmax1(inta,intb,intc){intt=ab?a:b;returnct?c:t;}floatmax2(floata,floatb,floatc){floatt=ab?a:b;returnct?c:t;}intmax3(floata,floatb,floatc){floatt=ab?a:b;returnct?c:t;}voidmain(){floatx=3.4,y=5.6,z=1.9;charc1=‘A’,c2=‘b’,c3=’C’;inta=20,b=30,c=24;coutmax1(x,y,z)‘\t’;coutmax2(x,y,z)‘\t’;coutmax3(x,y,z)‘\n’;coutmax1(c1,c2,c3)‘\t’;coutmax2(c1,c2,c3)‘\t’;coutmax3(c1,c2,c3)‘\n’;coutmax1(a,b,c)‘\t’;coutmax2(a,b,c)‘\t’;coutmax3(a,b,c)‘\n’;coutmax1(a+x,y+c1/c2,c+z)‘\t’;coutmax2(a+x,y+c1/c2,c+z)‘\t’;coutmax3(a+x,y+c1/c2,c+z)‘\n’;}【答案】第1行输出:???第2行输出:???第3行输出:???第4行输出:???2.下面程序的运行结果是______。#includeiostream.hvoidswap1(inta,intb){intt=a;a=b;b=t;}voidswap2(int&a,int&b){intt=a;a=b;b=t;}voidswap3(int&a,intb){intt=a;a=b;b=t;}voidswap4(inta,int&b){intt=a;a=b;b=t;}voidmain(){intx=1,y=2;cout“调用前:x=”x“\ty=”y”\t\t”;swap1(x,y);cout“调用后:x=”x“\ty=”yendl;x=3,y=4;cout“调用前:x=”x“\ty=”y”\t\t”;swap2(x,y);cout“调用后:x=”x“\ty=”yendl;x=5,y=6;cout“调用前:x=”x“\ty=”y”\t\t”;swap3(x,y);cout“调用后:x=”x“\ty=”yendl;x=7,y=8;cout“调用前:x=”x“\ty=”y”\t\t”;swap4(x,y);cout“调用后:x=”x“\ty=”yendl;}【答案】第1行输出:???第2行输出:???第3行输出:???第4行输出:???3.下面程序的运行结果是______。#includeiostream.hintfun(intn){cout“正在求:1×2×…×”n“\t\t”;intt=1;for(inti=1;i=n;i++){chara=7;couta;t*=i;}returnt;}voidmain(){inta=2,b=4;cout“第1次调用:”fun(a)endl;{inta=3,b=5;cout“第2次调用:”fun(a)endl;{inta=7;cout“第3次调用:”fun(a)endl;cout“第4次调用:”fun(b)endl;}cout“第5次调用:”fun(b)endl;}cout“第6次调用:”fun(b)endl;}【答案】第1行输出:???第2行输出:???第3行输出:???第4行输出:???第5行输出:???第6行输出:???4.下面程序的运行结果是______。#includeiostream.hvoidac(floatx);bc();intm=10;voidmain(){inti,s=0;floatx;x=0.5;ac(x);for(i=0;i4;i++){s=s+bc();cout”&”sendl;}}voidac(floatx){inti=0;floats=0;while(i
本文标题:作业━━第3章━━函数的定义和调用
链接地址:https://www.777doc.com/doc-2709165 .html