第四章习题答案
答案:
不一定,只要参数个数、次序和类型一致即可。函数原型中可以不写参数名,函数定义和
函数调用时,参数名也可以不同。
4.3编写函数把华氏温度转换为摄氏温度,公式为C = (F – 32) * 5/9;在主程序中提示用户
输入一个华氏温度,转化后输出相应的摄氏温度。
答案:
#include <iostream>
第四章函数
4.1C++中的函数是什么?什么叫主调函数?什么叫被调函数?二者之间有什么关系?如
何调用一个函数?
答案:
把相关的语句组织在一起,并给它们注明相应的名称,利用这种方法把程序分块,这种形
式的组合就称为函数,也称为过程,通常将相对独立、经常使用的功能抽象为函数。
函数的使用是通过函数调用实现的,调用其它函数的函数称为主调函数,被其它函数调用
c = (n – 32) * 5 / 9;
return c;
}
4.4什么叫内联函数?它有哪些特点?
答案:
函数定义时在在最前面加关键字inline,把函数定义为内联函数,编译时将把函数体嵌入在
每一个调用语句处。
特点:
(1)不是在调用时发生控制转移,节省参数传递和控制转移等开销;
(2)一般把功能简单、规模较小而又频繁使以多次,为了保证申明的一致性,把它们放在头文件
中,每个源文件都用#include包含该头文件,把变量申明嵌入进来。
4.14以下程序执行的结果是什么?
#include<iostream>
#include<iomanip>
using namespace std;
intf(intm);
{ char m;int i,j;
for(i=0,j=strlen(ch); i<j;i++,j--)
{ m=ch[i];
ch[i]=ch[j-1];
ch[j-1]=m;
}
cout<<ch<<endl;
}
void main( )
{ charstr[80];
char *sp;
sp=str;
cin>>sp;
void main()
{inta,i,j;
for (i=0;i<2;i++)
{
a=f(4+i);
cout<<setw(5)<<a;
}
}
intf(intm)
{
staticintn=1;
m/=2; m=m*2;
if(m)
{ n*=m; return f(m-2);}
else
return n;
}
答案:
48 96
的函数称为被调函数。二者之间是调用和被调用关系,但是一个函数很可能既调用别的函数又
被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用
与被调用关系中充当被调函数。
函数调用时需要指定被调函数的名字和调用函数所需的信息(参数)。
4.2函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?
cin>>n;
long f =fibo(n);
cout<<f <<endl;
}
4.8用递归的方法编写函数求Fibonacci数列第n项;观察递归调用的过程。
答案:
#include <iostream>
using namespace std;
long fib(intn)
{
if (n > 2)
return (fib(n-1) + fib(n-2));
void main()
{
intn;
cout<<"input n:";
cin>>n;
convert(n);
cout<<endl;
}
void convert(intn)
{
charch;
cin>>ch;
if (n==1)
cout<<ch;
else
{
convert(n-1);
cout<<ch;
}
}
存期;函数存放在代码区,具有静态生存期;自动变量(局部变量)存放在栈区,具有局部生
存期。
4.12什么叫外部存储类型?
答案:
构成一个程序的多个源文件之间,通过申明数据或函数为外部的(extern)来进行沟通,带
extern的变量说明是变量申明,不是变量定义,在此处不分配存储空间,是外部存储类型。
4.13C++中为什么要使用头文件?为什么要用#include包含头文件?
4.15编写一个函数convert,它的功能是:将一个字符串按逆序存放,如:字符串为“abcd”,
其结果为“dcba”。在主函数中调用这个函数。
答案:
#include<iomanip>
#include<cstring>
using namespace std;
void convert(charch[ ])
else
return 1;
}
void main()
{
intn;
cout<<"please input a number:\n";
cin>>n;
long f = fib(n);
cout<<f <<endl;
}
4.9什么叫做作用域?有几种类型的作用域?
答案:
作用域是标识符在程序中有效的范围。C++作用域有:
–局部(块)作用域
–函数作用域
–函数原型作用域
–文件作用域
–类作用域
4.10什么叫做可见性?可见性的一般规则是什么?
答案:
可见性是从标识符引用的角度来看变量的有效范围,程序运行到某一点,能够引用到的标
识符,就是该处可见的标识符。
可见性的一般规则:
–标识符要申明在前,引用在后
–在同一作用域中,不能申明同名标识符
using namespace std;
float trans(float n);
void main()
{
float f;
cout<<"please input a temperate:\n";
cin>>f;
cout<< trans(f) <<endl;
}
float trans(float n)
{
float c;
4.5重载函数时通过什么来区分?
答案:
函数名相同,形参个数、参数类型或参数顺序不同。
4.6什么叫递归调用?
答案:
函数可以直接或间接地调用自身,称为递归调用。
4.7用非递归的函数调用形式求Fibonacci数列第n项,公式为fib(n)=fib(n-1)+fib(n-2), n>2;
fib(1) = fib(2) = 1。
–在没有互相包含关系的不同作用域中声明的同名标识符互不影响
–如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。
4.11生存期与存储区域密切相关。试说明全局变量、静态变量、函数、自动变量(局部变量)
存放在什么存储区,具有什么生存期。
答案:
全局变量存放在全局数据区,具有静态生存期;静态变量存放在全局数据区,具有静态生
答案:
#include <iostream>
using namespace std;
longfibo(intn)
{
long a=1, b=1, temp;
for(inti=3;i<=n;i++){
temp=a+b; a=b; b=temp;
}
return b;
}
void main()
{
intn;
cout<<"please input a number:\n";
convert(sp);
}
//chap4_17
//编写一个函数convert,它的功能是:将一个字符串按逆序存放,如:字符串为"abcd",其结果为"dcba"。在主函数中调用这个函数。
#include<iostream>
using namespace std;
void convert(intn);