当前位置:首页 > C语言程序设计(郑莉)课后习题答案
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-10 编写函数求两个整数的最大公约数和最小公倍数。 解: 源程序:
#include
int fn1(int i,int j); //求最大公约数的函数
void main() {
int i,j,x,y;
cout << \请输入一个正整数:\cin >> i ;
cout << \请输入另一个正整数:\cin >> j ;
x = fn1(i,j); y = i * j / x;
cout << i << \和\<< j << \的最大公约数是:\<< x << endl; cout << i << \和\<< j << \的最小公倍数是:\<< y << endl; }
int fn1(int i, int j) {
int temp; if (i < j)
{
temp = i; i = j; j = i; }
while(j != 0) {
temp = i % j; i = j; j = temp; }
return i; }
程序运行输出: 请输入一个正整数:120 请输入另一个正整数:72 120和72的最大公约数是:24 120和72的最小公倍数是:360
3-11 什么叫作嵌套调用?什么叫作递归调用? 解:
函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。
函数可以直接或间接地调用自身,称为递归调用。
3-12 在主程序中提示输入整数n,编写函数用递归的方法求1 + 2 + ? + n的值。 解:
#include
int fn1(int i);
void main() { int i;
cout << \请输入一个正整数:\cin >> i ;
cout << \从1累加到\<
13
int fn1(int i) {
if (i == 1) return 1; else
return i + fn1(i -1); }
程序运行输出: 请输入一个正整数:100 从1累加到100的和为:5050
3-13 编写递归函数GetPower(int x, int y)计算x的y次幂, 在主程序中实现输入输出。 解: 源程序:
#include
long GetPower(int x, int y); int main() {
int number, power; long answer;
cout << \cin >> number;
cout << \cin >> power;
answer = GetPower(number,power);
cout << number << \< long GetPower(int x, int y) { if(y == 1) return x; else return (x * GetPower(x,y-1)); } 程序运行输出: Enter a number: 3 To what power? 4 3 to the 4th power is 81 3-14 用递归的方法编写函数求Fibonacci 级数,公式为fib(n) = fib(n-1) + fib(n-2),n>2; fib(1) = fib(2) = 1;观察递归调用的过程。 解: 源程序见\实验指导\部分实验三 3-15 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出; 解: #include float p(int n, int x); void main() { int n,x; cout << \请输入正整数n:\cin >> n; cout << \请输入正整数x:\cin >> x; cout << \cout << \ cout << \} float p(int n, int x) { if (n == 0) return 1; else if (n == 1) return x; else return ((2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x)) /n ; } 程序运行输出: 请输入正整数n:1 请输入正整数x:2 n = 1 x = 2 P1(2) = 2 请输入正整数n:3 请输入正整数x:4 n = 3 14 x = 4 P3(4) = 154 3-16 使用模板函数实现Swap( x, y ),函数功能为交换x、y的值。 解: 源程序: #include template void main() { int j = 1, k = 2; double v = 3.0, w = 4.0; cout << \cout << \swap(j, k); //int swap(v, w); //double cout << \ cout << \cout << \} 程序运行输出: j = 1 k = 2 v = 3.14 w = 4.35 After swap: j = 2 k = 1 v = 4.35 w = 3.14 第 四 章 类 4-1 解释public和private的作用,公有类型成员与私有类型 成员有些什么区别? 解: 公有类型成员用public关键字声明,公有类型定义了类的外部接口;私有类型的成员用private关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。 4-2 protected关键字有何作用? 解: protected用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继承和派生时派生类的成员函数可以访问基类的保护成员。 4-3 构造函数和析构函数有什么作用? 解: 构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用。 析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。 4-4 数据成员可以为公有的吗?成员函数可以为私有的吗? 解: 可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。 4-5 已知class A中有数据成员int a,如果定义了A的两个对象A1、A2,它们各自的数据成员a的值可以不同吗? 解: 15 可以,类的每一个对象都有自己的数据成员。 4-6 什么叫做拷贝构造函数?拷贝构造函数何时被调用? 解: 拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。在以下三种情况下会被调用:在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时; 4-7 拷贝构造函数与赋值运算符(=)有何不同? 解: 赋值运算符(=)作用于一个已存在的对象;而拷贝构造函数会创建一个新的对象。 4-8 定义一个Dog 类,包含的age、weight等属性,以及对这些属性操作的方法。实现并测试这个类。 解: 源程序: #include class Dog { public: Dog (int initialAge = 0, int initialWeight = 5); ~Dog(); int GetAge() { return itsAge;} // inline! void SetAge (int age) { itsAge = age;} // inline! int GetWeight() { return itsWeight;} // inline! void SetWeight (int weight) { itsAge = weight;} // inline! private: int itsAge, itsWeight; }; Dog::Dog(int initialAge, int initialWeight) { itsAge = initialAge; itsWeight = initialWeight; } Dog::~Dog() //destructor, takes no action { } int main() { Dog Jack(2,10); cout << \ cout << Jack.GetAge() << \cout << Jack.GetWeight() << \Jack.SetAge(7); Jack.SetWeight(20); cout << \ cout << Jack.GetAge() << \cout << Jack.GetWeight() << \ return 0; } 程序运行输出: Jack is a Dog who is 2 years old and 10 pounds weight. Now Jack is 7 years old 20 pounds weight. 4-9 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。 解: 源程序: #include Rectangle (int top, int left, int bottom, int right); ~Rectangle () {} int GetTop() const { return itsTop; } int GetLeft() const { return itsLeft; } int GetBottom() const { return itsBottom; } int GetRight() const { return itsRight; } void SetTop(int top) { itsTop = top; } void SetLeft (int left) { itsLeft = left; } void SetBottom (int bottom) { itsBottom = bottom; } void SetRight (int right) { itsRight = right; } int GetArea() const; 16
共分享92篇相关文档