解:
一个较为复杂的系统往往需要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C和C++语言中的子程序就体现为函数。调用其它函数的函数被称为主调函数,被其它函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数。
调用函数之前先要声明函数原型。按如下形式声明: 类型标识符 被调函数名 (含类型说明的形参表);
声明了函数原型之后,便可以按如下形式调用子函数: 函数名(实参列表)
3-2 什么叫内联函数?它有哪些特点?
解:
定义时使用关键字 inline的函数叫做内联函数;
编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销; 内联函数体内不能有循环语句和switch语句;
内联函数的定义必须出现在内联函数第一次被调用之前; 对内联函数不能进行异常接口声明;
3-3 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?
解:
不必一致,所有的参数是根据位置和类型而不是名字来区分的。
3-4 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9; 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。
解:
源程序见\实验指导\部分实验三
3-5 编写函数判断一个数是否是质数,在主程序中实现输入、输出。
解:
#include
int prime(int i); //判一个数是否是质数的函数
void main() { int i;
cout <<\请输入一个整数:\cin >> i; if (prime(i))
cout << i <<\是质数.\else
cout << i <<\不是质数.\}
int prime(int i) {
int j,k,flag; flag = 1; k = sqrt(i);
for (j = 2; j <= k; j++) {
if(i%j == 0) {
flag = 0; break; } }
if (flag) return 1; else return 0; }
程序运行输出:
请输入一个整数:1151 1151是质数.
3-6 什么叫作嵌套调用?什么叫作递归调用? 解:
函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。
函数可以直接或间接地调用自身,称为递归调用。
3-7 用递归的方法编写函数求Fibonacci 级数,公式为fib(n) = fib(n-1) + fib(n-2),n>2; fib(1) = fib(2) = 1;观察递归调用的过程。
3-8 实现重载函数Double(x),返回值为输入参数的两倍;参数分别为整型、长整型、浮点型、双精度型,返回值类型与参数一样。 解: 源程序:
#include
int Double(int); long Double(long); float Double(float); double Double(double);
int main() {
int myInt = 6500;
long myLong = 65000; float myFloat = 6.5F;
double myDouble = 6.5e20;
int doubledInt; long doubledLong; float doubledFloat; double doubledDouble;
cout <<\cout <<\cout <<\cout <<\
doubledInt = Double(myInt); doubledLong = Double(myLong); doubledFloat = Double(myFloat); doubledDouble = Double(myDouble);
cout <<\cout <<\cout <<\cout <<\
return 0; }
int Double(int original) {
cout <<\
return 2 * original; }
long Double(long original) {
cout <<\return 2 * original; }
float Double(float original) {
cout <<\return 2 * original; }
double Double(double original) {
cout <<\return 2 * original; }
程序运行输出: myInt: 6500 myLong: 65000 myFloat: 6.5
myDouble: 6.5e+20 In Double(int) In Double(long) In Double(float) In Double(double) DoubledInt: 13000 DoubledLong: 130000 DoubledFloat: 13
DoubledDouble: 1.3e+21
3-9 定义一个Rectangle类,有长itsWidth、宽itsLength等属性,重载其构造函数Rectangle()和Rectangle(int width, int length)。 解: 源程序:
#include
class Rectangle {
public:
Rectangle();
Rectangle(int width, int length); ~Rectangle() {}
int GetWidth() const { return itsWidth; } int GetLength() const { return itsLength; } private: int itsWidth; int itsLength; };
Rectangle::Rectangle() {
itsWidth = 5; itsLength = 10; }
Rectangle::Rectangle (int width, int length) {
itsWidth = width; itsLength = length; }
int main() {
Rectangle Rect1;
cout <<\cout <<\
int aWidth, aLength; cout <<\cin >> aWidth;
cout <<\cin >> aLength;
Rectangle Rect2(aWidth, aLength);
cout <<\cout <<\return 0; }
程序运行输出: Rect1 width: 5 Rect1 length: 10 Enter a width: 20