您好,欢迎访问三七文档
第4章【函数】重载、模板、默认形参。1.已知三边,求三角形面积。编写求面积的函数。floatgetarea(floata,floatb,floatc){floats=(a+b+c)/2;returnsqrt(s*(s-a)*(s-b)*(s-c));}2.编写函数,求圆柱体体积。在main函数中调用之。#includeiostreamusingnamespacestd;doublegetv(doubler,doubleh){return3.14159*r*r*h;}voidmain(){doubler,h;cinrh;coutgetv(r,h)endl;}1.什么是函数?函数调用的执行过程是怎样的?答:函数是某特定功能的抽象。发生函数调用时,首先由系统进行现场保护,才转去执行函数本身的代码,函数结束或遇到return语句时从系统获得返回地址,转回原位置继续程序的执行。2.什么是形式参数?什么是实际参数?二者在结合时,值传递和地址传递有何不同?答:形式参数是函数声明或定义时在参数列表中给出的参数,它必须有类型的声明,不能为常量,并且函数被调用前不被创建;实际参数是函数被调用时在参数列表中给出的参数,它可以是任何有确切值的表达式(包括常量、有返回值的函数调用),函数调用时由实际参数完成形式参数的初始化。值传递是单向的,即实际参数完成形式参数的初始化赋值后即完成使命,形参在函数体内所做修改均不影响实参;址传递是双向的,即实际参数除完成形式参数的初始化赋值外,形参在函数体内所做修改均直接体现在实参上。3.什么是函数的嵌套调用和递归调用?答:函数的嵌套调用是指函数执行中又调用其他函数。函数的递归调用是指函数执行中直接或间接地调用其自身。4.函数原型声明的作用是什么?如何做原型声明?答:函数可以先有原型声明即可被调用,函数的定义在调用之后,这样有利于保持程序结构的清晰以及外部函数在多文件组织时的共享。原型声明的格式为:函数类型函数名(类型形参1,类型形参2…);形参名此时可以省略。5.为函数设定默认形参值时有什么要求?答:默认形参值的给定必须按参数表由后向前不间断的给出,并且当有函数重载时,应避免默认值所造成的歧意。6.如何声明内联函数?任何函数都可以声明为内联的吗?答:内联函数的声明格式为:inline函数类型函数名(形参表);内联函数是为节省函数调用时的转移开销而设,因此内联函数一般为调用频繁而执行简单的函数,不能有循环语句和switch语句,也不能进行异常接口声明。7.函数重载有什么作用?重载函数靠什么来加以区分?答:函数重载可以提高代码的抽象度和可读性。重载函数是以参数表的参数个数或类型加以区分的。8.编写函数,把华氏温度转换成摄氏温度,公式为C=(F-32)*5/9。输入输出在主函数中完成。参考代码:#includeiostreamusingnamespacestd;floatfun(floatx){return(x-32)*5/9;}voidmain(){floatf,c;cout请输入华氏温度:;cinf;c=fun(f);cout转换后摄氏温度为:cendl;}运行结果:请输入华氏温度:104转换后摄氏温度为:409.编写函数,统计输入字符中英文字母个数和阿拉伯数字的个数,输入/输出在主函数中完成。参考代码:#includeiostream.h#defineMAXSIZE50voidcount(char*s,int&c,int&n){c=n=0;inti=0;while(s[i]){if(s[i]='a'&&s[i]='z'||s[i]='A'&&s[i]='Z')c++;elseif(s[i]='0'&&s[i]='9')n++;i++;}}voidmain(){chartext[MAXSIZE];intx,y;cout请输入任意字符:endl;cin.getline(text,MAXSIZE,'\n');//有效长度不超过MAXSIZE-1count(text,x,y);cout英文字母个数:xendl;cout阿拉伯数字个数:yendl;}运行结果:请输入任意字符:thisisatest.1+1=2.end.英文字母个数:14阿拉伯数字个数:310.编写函数,求解算式:1-1/2+1/3-1/4+1/5-1/6+1/7-1/8+……参考代码:分析:得公式niii111)1(#includeiostream.hintpower(intp,intq){intresult=1;for(ints=0;sq;s++)result*=p;returnresult;}doublesum(intn){doubleresult=0;for(intk=1;k=n;k++)result+=(double)power(-1,k+1)/k;returnresult;}voidmain(){intn;cinn;coutsum(n)endl;}运行结果:50.78333311.有十个人围坐一起,随机抽取属于自己的密码,已知第一个人说他的密码加10后刚好是第二个人密码的2倍,第二个人也说他的密码加10后刚好是第三个人密码的2倍,之后发现相邻的人密码均符合这一规律,已知第十个人密码为110,那么第一个人密码是多少?参考代码:#includeiostream.hintcode(intn){if(n==10)return110;return2*code(n+1)-10;}voidmain(){cout第1个人的密码是:code(1)endl;}运行结果:第1个人的密码是:5121012.编写重载函数,实现正方形、球体、圆锥体积的计算。参考代码:#includeiostream.hdoublevol(doublex){cout正方体体积计算...endl;returnx*x*x;}doublevol(doubler,doublepi){cout球体积计算...endl;returnpi*r*r*r*3/4;}doublevol(doubler,doubleheight,doublepi){cout圆锥体积计算...endl;returnpi*r*r*height/3;}voidmain(){coutvol(10)endl;coutvol(10,3.14)endl;coutvol(10,10,3.14)endl;}运行结果:正方体体积计算...1000球体积计算...2355圆锥体积计算...1046.67本题的重载函数,能否改编成模板函数。?(不能?能?)
本文标题:配套练习4章
链接地址:https://www.777doc.com/doc-2012517 .html