您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > C++3函数习题及答案
第三章函数3-1C++中的函数是什么?什么叫主调函数,什么叫被调函数,二者之间有什么关系?如何调用一个函数?解:一个较为复杂的系统往往需要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C和C++语言中的子程序就体现为函数。调用其它函数的函数被称为主调函数,被其它函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数。调用函数之前先要声明函数原型。按如下形式声明:类型标识符被调函数名(含类型说明的形参表);声明了函数原型之后,便可以按如下形式调用子函数:函数名(实参列表)3-2观察下面程序的运行输出,与你设想的有何不同?仔细体会引用的用法。源程序:#includeiostream.hintmain(){intintOne;int&rSomeRef=intOne;intOne=5;coutintOne:\t\tintOneendl;coutrSomeRef:\trSomeRefendl;intintTwo=8;rSomeRef=intTwo;//notwhatyouthink!cout\nintOne:\t\tintOneendl;coutintTwo:\t\tintTwoendl;coutrSomeRef:\trSomeRefendl;return0;}程序运行输出:intOne:5rSomeRef:5intOne:8intTwo:8rSomeRef:83-3比较值调用和引用调用的相同点与不同点。解:值调用是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名,对形参的任何操作也就直接作用于实参。3-4什么叫内联函数?它有哪些特点?解:定义时使用关键字inline的函数叫做内联函数;编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;内联函数体内不能有循环语句和switch语句;内联函数的定义必须出现在内联函数第一次被调用之前;对内联函数不能进行异常接口声明;3-5函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?解:不必一致,所有的参数是根据位置和类型而不是名字来区分的。3-6重载函数时通过什么来区分?解:重载的函数的函数名是相同的,但它们的参数的个数和数据类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。★3-7编写函数,参数为两个unsignedshortint型数,返回值为第一个参数除以第二个参数的结果,数据类型为shortint;如果第二个参数为0,则返回值为-1。在主程序中实现输入输出。源程序:#includeiostream.hshortintDivider(unsignedshortinta,unsignedshortintb){if(b==0)return-1;elsereturna/b;}typedefunsignedshortintUSHORT;typedefunsignedlongintULONG;intmain(){USHORTone,two;shortintanswer;coutEntertwonumbers.\nNumberone:;cinone;coutNumbertwo:;cintwo;answer=Divider(one,two);if(answer-1)coutAnswer:answer;elsecoutError,can'tdividebyzero!;return0;}程序运行输出:Entertwonumbers.Numberone:8Numbertwo:2Answer:43-8编写函数把华氏温度转换为摄氏温度,公式为:C=(F-32)*5/9;在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。(略)★3-9编写函数判断一个数是否是质数,在主程序中实现输入、输出。源程序:#includeiostream.h#includemath.hintprime(inti);//判一个数是否是质数的函数声明voidmain(){inti;cout请输入一个整数:;cini;if(prime(i))//函数调用couti是质数.endl;elsecouti不是质数.endl;}intprime(inti)//判一个数是否是质数的函数实现(定义){intj,k,flag;flag=1;k=sqrt(i);for(j=2;j=k;j++){if(i%j==0){flag=0;break;}}if(flag)return1;elsereturn0;}程序运行输出:请输入一个整数:11511151是质数.★3-10编写函数求两个整数的最大公约数和最小公倍数。源程序:#includeiostream.h#includemath.hintfn1(inti,intj);//求最大公约数的函数声明voidmain(){inti,j,x,y;cout请输入一个正整数:;cini;cout请输入另一个正整数:;cinj;x=fn1(i,j);//函数调用y=i*j/x;couti和j的最大公约数是:xendl;couti和j的最小公倍数是:yendl;}intfn1(inti,intj)//求最大公约数的函数实现{inttemp;if(ij){temp=i;i=j;j=i;}while(j!=0){temp=i%j;i=j;j=temp;}returni;}程序运行输出:请输入一个正整数:120请输入另一个正整数:72120和72的最大公约数是:24120和72的最小公倍数是:3603-11什么叫作嵌套调用?什么叫作递归调用?解:函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。函数可以直接或间接地调用自身,称为递归调用。★3-12在主程序中提示输入整数n,编写函数用递归的方法求1+2+…+n的值。源程序:#includeiostream.hintfn1(inti);voidmain(){inti;cout请输入一个正整数:;cini;cout从1累加到i的和为:fn1(i)endl;}intfn1(inti)//递归函数的实现{if(i==1)return1;elsereturn(i+fn1(i-1));}程序运行输出:请输入一个正整数:100从1累加到100的和为:5050★3-13编写递归函数GetPower(intx,inty)计算x的y次幂,在主程序中实现输入输出。源程序:#includeiostream.hlongGetPower(intx,inty);intmain(){intnumber,power;longanswer;coutEnteranumber:;cinnumber;coutTowhatpower?;cinpower;answer=GetPower(number,power);coutnumbertothepowerthpowerisanswerendl;return0;}longGetPower(intx,inty)//递归函数的实现{if(y==1)returnx;elsereturn(x*GetPower(x,y-1));}程序运行输出:Enteranumber:3Towhatpower?43tothe4thpoweris813-14用递归的方法编写函数求Fibonacci级数,公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib(2)=1;观察递归调用的过程。(略)★3-15用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出。程序代码:#includeiostream.hfloatp(intn,intx);voidmain(){intn,x;cout请输入正整数n:;cinn;cout请输入正整数x:;cinx;coutn=nendl;coutx=xendl;coutPn(x)=p(n,x)endl;}floatp(intn,intx)//递归函数的实现{if(n==0)return1;elseif(n==1)returnx;elsereturn((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;}程序运行输出:请输入正整数n:1请输入正整数x:2n=1x=2P1(2)=2请输入正整数n:3请输入正整数x:4n=3x=4P3(4)=154补充:编写4个同名函数Max1,可分别求取2个整数、3个整数、2个单精度数、3个双精度数的最大值,实现函数重载。并在main()函数中测试函数功能。(重载)源程序:#includeiostream.hintMax1(inta,intb);intMax1(inta,intb,intc);floatMax1(floata,floatb);floatMax1(floata,floatb,floatc);voidmain(){intchoose,x1,y1,z1;floatx2,y2,z2;while(1){cout“请选择1.求取2个整数最大值”endl;cout“请选择2.求取3个整数最大值”endl;cout“请选择3.求取2个浮点数最大值”endl;cout“请选择4.求取3个浮点数最大值”endl;cout“请选择5.退出”;cinchoose;switch(choose){case1:cout请输入2个整数x1,y1:;cinx1y1;cout最大值为Max1(x1,y1)endl;break;case2:cout请输入3个整数:;cinx1y1z1;cout最大值为Max1(x1,y1,z1)endl;break;case3:cout请输入2个浮点数:;cinx2y2;cout最大值为Max1(x2,y2)endl;break;case4:cout请输入3个浮点数:;cinx2y2z2;cout最大值为Max1(x2,y2,z2)endl;break;default:exit(0);}cout------------------------------------------------------endl;}}intMax1(inta,intb){if(ab)returna;elsereturnb;}intMax1(inta,intb,intc){if(ab)if(ac)returna;elsereturnc;elseif(bc)returnb;elsereturnc;}floatMax1(floata,floatb){if(ab)returna;elsereturnb;}floatMax1(floata,floatb,floatc){if(ab)if(ac)returna;elsereturnc;elseif(bc)returnb;elsereturnc;}知识点及作业:①递归算法:3-14、3-15②引用作为形参:P77利用“引用调用”编写函数swap(),实现两个单精度数据的交换。③内联函数:编写内联函数,求圆的周长Cir
本文标题:C++3函数习题及答案
链接地址:https://www.777doc.com/doc-2904166 .html