1、 第 二 章 C++简单程序设计 2-10 执行完下列语句后,a、b、c三个变量的值为多少? a = 30; b = a++; c = ++a; a:32 ; b:30 ; c:32; 2-13 写一条for语句,计数条件为n从100到200,步长为2;然后用while和do…while语句完成同样的循环。 解: for循环: for (int n = 100; n <= 200; n += 2); while循环: int x = 100; while (n <= 200) n += 2; do…while循环: int n = 100;
2、do
{
n += 2;
} while(n <= 200);
2-17 修改下面这个程序中的错误,改正后它的运行结果是什么?
#include
3、 给j赋值 */
cout << "i + j = " << i + j; /* 输出结果 */
return 0;
}
程序运行输出:
i + j = 30
2-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。
解:
源程序:
#include
4、clude
5、 y = 100;
unsigned int z = 50;
x= y - z;
cout << "Difference is: " << x;
x = z - y;
cout << "\nNow difference is: " << x <
6、main() { int myAge = 39; // initialize two integers int yourAge = 39; cout << "I am: " << myAge << " years old.\n"; cout << "You are: " << yourAge << " years old\n"; myAge++; // postfix increment ++yourAge; // prefix increment cout << "One year passes...\n"; cout << "I am: " << myAge << " y
7、ears old.\n"; cout << "You are: " << yourAge << " years old\n"; cout << "Another year passes\n"; cout << "I am: " << myAge++ << " years old.\n"; cout << "You are: " << ++yourAge << " years old\n"; cout << "Let's print it again.\n"; cout << "I am: " << myAge << " years old.\n"; cout << "You ar
8、e: " << yourAge << " years old\n"; return 0; } 解: 程序运行输出: I am 39 years old You are 39 years old One year passes I am 40 years old You are 40 years old Another year passes I am 40 years old You are 41 years old Let's print it again I am 41 years old You are 41 years old 2-28 编写一个完整的
9、程序,实现功能:向用户提问"现在正在下雨吗?",提示用户输入Y或N。若输入为Y,显示"现在正在下雨。"; 若输入为N,显示"现在没有下雨。";否则继续提问"现在正在下雨吗?"
源程序:
#include
10、er(flag) == 'N')
{
cout << "现在没有下雨。";
break;
}
}
}
程序运行输出:
现在正在下雨吗?(Yes or No):x
现在正在下雨吗?(Yes or No):l
现在正在下雨吗?(Yes or No):q
现在正在下雨吗?(Yes or No):n
现在没有下雨。
或:
现在正在下雨吗?(Yes or No):y
现在正在下雨。
2-29 编写一个完整的程序,运行时向用户提问"你考试考了多少分?(0~100)",接收输入后判断其等级,显示出来。规则如下:
解:
#include
11、id main() { int i,score; cout << "你考试考了多少分?(0~100):"; cin >> score; if (score>100 || score<0) cout << "分数值必须在0到100之间!"; else { i = score/10; switch (i) { case 10: case 9: cout << "你的成绩为优!"; break; case 8: cout << "你的成绩为良!"; break; case 7: case 6: cout << "你的成绩为中!"; break; defa
12、ult:
cout << "你的成绩为差!";
}
}
}
程序运行输出:
你考试考了多少分?(0~100):85
你的成绩为良!
2-31 用穷举法找出1~100间的质数,显示出来。分别使用while,do-while,for循环语句实现。
解:
源程序:
使用while循环语句:
#include
13、 (j <= k)
{
if(i%j == 0)
{
flag = 0;
break;
}
j++;
}
if (flag)
cout << i << "是质数." << endl;
i++;
}
}
使用do…while循环语句:
#include
14、
}while (j <= k);
if (flag)
cout << i << "是质数." << endl;
i++;
}while(i <= 100);
}
使用for循环语句:
#include
15、 } } if (flag) cout << i << "是质数." << endl; } } 程序运行输出: 2是质数. 3是质数. 5是质数. 7是质数. 11是质数. 13是质数. 17是质数. 19是质数. 23是质数. 29是质数. 31是质数. 37是质数. 41是质数. 43是质数. 47是质数. 53是质数. 59是质数. 61是质数. 67是质数. 71是质数. 73是质数. 79是质数. 83是质数. 89是质数. 97是质数. 2-33 定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户
16、输入年、月、日、小时、分、秒的值,然后完整地显示出来。
解:
源程序见"实验指导"部分实验二
2-34 在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、do…while语句实现循环。
解:
//使用while语句
#include
17、ut << "你猜的值太小了!" << endl;
else if (n < m)
cout << "你猜的值太大了!" << endl;
else
cout << "你猜对了!" << endl;
}
}
//使用do…while语句
#include
18、ut << "你猜的值太大了!" << endl; else cout << "你猜对了!" << endl; }while(n != m); } 程序运行输出: 请猜这个数的值为多少?(0~~100):50 你猜的值太大了! 请猜这个数的值为多少?(0~~100):25 你猜的值太大了! 请猜这个数的值为多少?(0~~100):10 你猜的值太小了! 请猜这个数的值为多少?(0~~100):15 你猜的值太小了! 请猜这个数的值为多少?(0~~100):18 你猜对了! 第三章 函数 3-2 观察下面程序的运行输出,与你设想的有何不同?仔细体
19、会引用的用法。
源程序:
#include
20、<< "intTwo:\t\t" << intTwo << endl;
cout << "rSomeRef:\t" << rSomeRef << endl;
return 0;
}
程序运行输出:
intOne: 5
rSomeRef: 5
intOne: 8
intTwo: 8
rSomeRef: 8
3-7 编写函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1。在主程序中实现输入输出。
解:
源程序:
#include
21、hort int Divider(unsigned short int a, unsigned short int b) { if (b == 0) return -1; else return a/b; } typedef unsigned short int USHORT; typedef unsigned long int ULONG; int main() { USHORT one, two; short int answer; cout << "Enter two numbers.\n Number one: "; cin >> one; cout <<
22、 "Number two: "; cin >> two; answer = Divider(one, two); if (answer > -1) cout << "Answer: " << answer; else cout << "Error, can't divide by zero!"; return 0; } 程序运行输出: Enter two numbers. Number one:8 Number two:2 Answer: 4 3-8 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9; 在主程序中提示用户输入一个华氏温度
23、转化后输出相应的摄氏温度。
解:
源程序见"实验指导"部分实验三
3-10 编写函数求两个整数的最大公约数和最小公倍数。
源程序:
#include
24、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的最小
25、公倍数是:360
3-12 在主程序中提示输入整数n,编写函数用递归的方法求1 + 2 + … + n的值。
解:
#include 26、);
}
程序运行输出:
请输入一个正整数:100
从1累加到100的和为:5050
3-14 用递归的方法编写函数求Fibonacci 级数,公式为fib(n) = fib(n-1) + fib(n-2),n>2;
fib(1) = fib(2) = 1;观察递归调用的过程。
解:
源程序见"实验指导"部分实验三
3-15 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出;
解:
#include 27、请输入正整数n:";
cin >> n;
cout << "请输入正整数x:";
cin >> x;
cout << "n = " << n << endl;
cout << "x = " << x << endl;
cout << "P" << n << "(" << x << ") = " << p(n,x) << endl;
}
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 28、2,x)) /n ;
}
程序运行输出:
请输入正整数n:1
请输入正整数x:2
n = 1
x = 2
P1(2) = 2
请输入正整数n:3
请输入正整数x:4
n = 3
x = 4
P3(4) = 154
第 四 章 类
4-9 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。
源程序:
#include 29、 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 30、 (int bottom) { itsBottom = bottom; }
void SetRight (int right) { itsRight = right; }
int GetArea() const;
private:
int itsTop;
int itsLeft;
int itsBottom;
int itsRight;
};
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
itsTop = top;
itsLeft = left;
itsBottom = bottom; 31、
itsRight = right;
}
int Rectangle::GetArea() const
{
int Width = itsRight-itsLeft;
int Height = itsTop - itsBottom;
return (Width * Height);
}
int main()
{
Rectangle MyRectangle (100, 20, 50, 80 );
int Area = MyRectangle.GetArea();
cout << "Area: " << Area << "\n";
return 0;
}
程序运行输 32、出:
Area: 3000
Upper Left X Coordinate: 20
4-11 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积
解:
#include 33、ength; }
float GetWidth() { return Width; }
private:
float Length;
float Width;
};
void main()
{
float length, width;
cout << "请输入矩形的长度:";
cin >> length;
cout << "请输入矩形的宽度:";
cin >> width;
Rectangle r(length, width);
cout << "长为" << length << "宽为" << width << "的矩形的面积为:"
<< r.GetArea 34、) << endl;
}
程序运行输出:
请输入矩形的长度:5
请输入矩形的宽度:4
长为5宽为4的矩形的面积为:20
4-12 定义一个"数据类型" datatype类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。
解:
#include 35、vartype = character;
c = ch;
}
datatype(int ii) {
vartype = integer;
i = ii;
}
datatype(float ff) {
vartype = floating_point;
f = ff;
}
void print();
};
void datatype::print() {
switch (vartype) {
case character:
cout << "字符型: " << c << endl;
break;
case integer:
cout << "整型: " << 36、 i << endl;
break;
case floating_point:
cout << "浮点型: " << f << endl;
break;
}
}
void main() {
datatype A('c'), B(12), C(1.44F);
A.print();
B.print();
C.print();
}
程序运行输出:
字符型: c
整型: 12
浮点型: 1.44
4-13 定义一个Circle类,有数据成员半径Radius,成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。
解:
#include < 37、iostream.h>
class Circle
{
public:
Circle(float radius){ Radius = radius;}
~Circle(){}
float GetArea() { return 3.14 * Radius * Radius; }
private:
float Radius;
};
void main()
{
float radius;
cout << "请输入圆的半径:";
cin >> radius;
Circle p(radius);
cout << "半径为" << radius << "的圆的面积为:" << 38、 p.GetArea ()
<< endl;
}
程序运行输出:
请输入圆的半径:5
半径为5的圆的面积为:78.5
4-14 定义一个tree类,有成员ages,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。
解:
#include 39、n;
}
Tree::~Tree() {
age();
}
void Tree::grow(int years) {
ages += years;
}
void Tree::age() {
cout << "这棵树的年龄为" << ages << endl;
}
void main()
{
Tree t(12);
t.age();
t.grow(4);
}
程序运行输出:
这棵树的年龄为12
这棵树的年龄为16
第 五 章 C++程序的基本结构
5-12 在函数fn1()中定义一个静态变量n,fn1()中对n的值加1,在主函数中,调 40、用fn1()十次,显示n的值。
解:
#include 41、的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X*)实现对X的成员i加5,函数h(X*)是X的友元函数,实现对X的成员i加10。在一个文件中定义和实现类,在另一个文件中实现main()函数。
解:
#include "my_x_y_z.h"
void main()
{
X x;
Z z;
z.f(&x);
}
// my_x_y_z.h文件
#ifndef MY_X_Y_Z_H
class X;
class Y {
void g(X*);
};
class X
{
private:
int i;
public:
X(){i 42、0;}
friend void h(X*);
friend void Y::g(X*);
friend class Z;
};
void h(X* x) { x->i =+10; }
void Y::g(X* x) { x->i ++; }
class Z {
public:
void f(X* x) { x->i += 5; }
};
#endif // MY_X_Y_Z_H
程序运行输出:无
5-14 定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算二者的重量和。
解:
源程序:
#includ 43、e 44、aCar, Boat &aBoat)
{
return aCar.weight + aBoat.weight;
}
void main()
{
Car c1(4);
Boat b1(5);
cout << totalWeight(c1, b1) << endl;
}
程序运行输出:
9
第 六 章 数组、指针与字符串
6-1 数组A[10][5][15]一共有多少个元素?
解:
10×5×15 = 750 个元素
1-2 在数组A[20]中第一个元素和最后一个元素是哪一个?
解:
第一个元素是A[0],最后一个元素是A[19]。
6 45、3 用一条语句定义一个有五个元素的整型数组,并依次赋予1~5的初值。
解:
源程序:
int IntegerArray[5] = { 1, 2, 3, 4, 5 };
或:int IntegerArray[] = { 1, 2, 3, 4, 5 };
6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别?
解:
指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。
6-10 定义一个有五个元素的整型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。
解:
源程序:
#incl 46、ude 47、 myArray[2]: 7
Value for myArray[3]: 8
Value for myArray[4]: 3
0: 2
1: 5
2: 7
3: 8
4: 3
6-11 引用和指针有何区别?何时只能使用指针而不能使用引用?
解:
引用是一个别名,不能为NULL值,不能被重新分配;指针是一个存放地址的变量。当需要对变量重新赋以另外的地址或赋值为NULL时只能使用指针。
6-12 声明下列指针:float类型变量的指针pFloat,char类型的指针pString和struct customer型的指针prec。
解:
float *pfloat;
48、char *pString;
struct customer *prec;
6-13 给定float类型的指针fp,写出显示fp所指向的值的输出流语句。
解:
cout << "Value == " << *fp;
6-16 定义一个整型变量a,一个整型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5
解:
void main()
{
int a;
int *p = &a;
int &r = a;
*p = 10;
r = 5;
}
6-21 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。
解:
源程序:
#in 49、clude 50、unt(text) << "个字母。" << endl;
}
程序运行输出:
输入一个英语句子:
It is very interesting!
这个句子里有19个字母。
6-22 编写函数int index(char *s, char *t),返回字符串t 在字符串s中出现的最左边的位置,如果在s中没有与t匹配的子串,就返回-1。
解:
源程序:
#include






