《C++语言程序设计课后答案.doc》由会员分享,可在线阅读,更多相关《C++语言程序设计课后答案.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-作者xxxx-日期xxxxC+语言程序设计课后答案【精品文档】第 二 章 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和dowhile语句完成同样的循环。解: for循环:for (int n = 100; n = 200; n += 2); while循环:int x = 100;while (n = 200)n += 2; dowhile循环:int n = 100;don += 2; wh
2、ile(n = 200);2-17 修改下面这个程序中的错误,改正后它的运行结果是什么?#include void main()int iint j;i = 10; /* 给i赋值j = 20; /* 给j赋值 */cout i + j = i + j; /* 输出结果 */return 0;解: 改正:#include int main()int i;int j;i = 10; / 给i赋值j = 20; /* 给j赋值 */cout i + j = i + j; /* 输出结果 */return 0;程序运行输出:i + j = 302-18 编写一个程序,运行时提示输入一个数字,再把这个
3、数字显示出来。解: 源程序:#include int main()int i;cout i;cout 您输入一个数字是 i endl;return 0;程序运行输出:请输入一个数字:5您输入一个数字是52-20 打印ASCII码为32127的字符。解: #include int main()for (int i = 32; i128; i+)cout (char) i;return 0;程序运行输出:!#$%G()*+,./0123456789:;?ABCDEFGHIJKLMNOP_QRSTUVWXYZabcdefghijklmnopqrstuvwxyzs2-21 运行下面的程序,观察其输出,
4、与你的设想是否相同?#include int main()unsigned int x;unsigned int y = 100;unsigned int z = 50;x= y - z;cout Difference is: x;x = z - y;cout nNow difference is: x endl;return 0;解: 程序运行输出:Difference is: 50Now difference is: 4294967246注意,第二行的输出并非 -50,注意x、y、z的数据类型。2-22 运行下面的程序,观察其输出,体会i+与+i的差别。#include int main(
5、)int myAge = 39; / initialize two integersint yourAge = 39;cout I am: myAge years old.n;cout You are: yourAge years oldn;myAge+; / postfix increment+yourAge; / prefix incrementcout One year passes.n;cout I am: myAge years old.n;cout You are: yourAge years oldn;cout Another year passesn;cout I am: my
6、Age+ years old.n;cout You are: +yourAge years oldn;cout Lets print it again.n;cout I am: myAge years old.n;cout You are: yourAge years oldn;return 0;解: 程序运行输出:I am 39 years oldYou are 39 years oldOne year passesI am 40 years oldYou are 40 years oldAnother year passesI am 40 years oldYou are 41 years
7、 oldLets print it againI am 41 years oldYou are 41 years old2-28 编写一个完整的程序,实现功能:向用户提问现在正在下雨吗?,提示用户输入Y或N。若输入为Y,显示现在正在下雨。; 若输入为N,显示现在没有下雨。;否则继续提问现在正在下雨吗?解: 源程序:#include #include void main()char flag;while(1)cout flag;if ( toupper(flag) = Y)cout 现在正在下雨。;break;if ( toupper(flag) = N)cout 现在没有下雨。;break;程
8、序运行输出:现在正在下雨吗?(Yes or No):x现在正在下雨吗?(Yes or No):l现在正在下雨吗?(Yes or No):q现在正在下雨吗?(Yes or No):n现在没有下雨。或:现在正在下雨吗?(Yes or No):y现在正在下雨。2-29 编写一个完整的程序,运行时向用户提问你考试考了多少分?(0100),接收输入后判断其等级,显示出来。规则如下:解: #include void main()int i,score;cout score;if (score100 | score0)cout 分数值必须在0到100之间!;elsei = score/10;switch (
9、i)case 10:case 9:cout 你的成绩为优!;break;case 8:cout 你的成绩为良!;break;case 7:case 6:cout 你的成绩为中!;break;default:cout 你的成绩为差!; 程序运行输出:你考试考了多少分?(0100):85你的成绩为良!2-31 用穷举法找出1100间的质数,显示出来。分别使用while,do-while,for循环语句实现。解: 源程序: 使用while循环语句:#include #include void main()int i,j,k,flag;i = 2;while(i = 100)flag = 1;k =
10、sqrt(i);j = 2;while (j = k)if(i%j = 0)flag = 0;break;j+;if (flag)cout i 是质数. endl;i+; 使用dowhile循环语句:#include #include void main()int i,j,k,flag;i = 2;doflag = 1;k = sqrt(i);j = 2;doif(i%j = 0)flag = 0;break;j+;while (j = k);if (flag)cout i 是质数. endl;i+;while(i = 100); 使用for循环语句:#include #include voi
11、d main()int i,j,k,flag;for(i = 2; i = 100; i+)flag = 1;k = sqrt(i);for (j = 2; j = k; j+)if(i%j = 0)flag = 0;break;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
12、定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。 解: 源程序见实验指导部分实验二2-34 在程序中定义一个整型变量,赋以1100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、dowhile语句实现循环。解: /使用while语句#include void main() int n = 18;int m = 0;while(m != n) cout m;if (n m)cout 你猜的值太小了! endl;else if (n m)cout 你猜的值太大了! endl;
13、elsecout 你猜对了! endl;/使用dowhile语句#include void main() int n = 18;int m = 0;docout m;if (n m)cout 你猜的值太小了! endl;else if (n m)cout 你猜的值太大了! endl;elsecout 你猜对了! endl;while(n != m); 程序运行输出:请猜这个数的值为多少?(0100):50你猜的值太大了!请猜这个数的值为多少?(0100):25你猜的值太大了! 请猜这个数的值为多少?(0100):10你猜的值太小了!请猜这个数的值为多少?(0100):15你猜的值太小了!请猜这
14、个数的值为多少?(0100):18你猜对了! 第三章 函数3-2 观察下面程序的运行输出,与你设想的有何不同?仔细体会引用的用法。源程序:#include int main()int intOne;int &rSomeRef = intOne;intOne = 5;cout intOne:tt intOne endl;cout rSomeRef:t rSomeRef endl;int intTwo = 8;rSomeRef = intTwo; / not what you think!cout nintOne:tt intOne endl;cout intTwo:tt intTwo endl;
15、cout rSomeRef:t rSomeRef endl;return 0;程序运行输出:intOne: 5rSomeRef: 5intOne: 8intTwo: 8rSomeRef: 83-7 编写函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1。在主程序中实现输入输出。解: 源程序:#include short int Divider(unsigned short int a, unsigned short int b)if (b = 0)return -1;elseretu
16、rn a/b;typedef unsigned short int USHORT;typedef unsigned long int ULONG;int main()USHORT one, two;short int answer;cout one;cout two;answer = Divider(one, two);if (answer -1)cout Answer: answer;elsecout Error, cant divide by zero!;return 0;程序运行输出:Enter two numbers.Number one:8Number two:2Answer: 43
17、-8 编写函数把华氏温度转换为摄氏温度,公式为:C = (F - 32) * 5/9; 在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。解: 源程序见实验指导部分实验三3-10 编写函数求两个整数的最大公约数和最小公倍数。解: 源程序:#include #include int fn1(int i,int j); /求最大公约数的函数void main()int i,j,x,y;cout i ;cout j ;x = fn1(i,j);y = i * j / x;cout i 和 j 的最大公约数是: x endl;cout i 和 j 的最小公倍数是: y endl;int f
18、n1(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请输入另一个正整数:72120和72的最大公约数是:24120和72的最小公倍数是:3603-12 在主程序中提示输入整数n,编写函数用递归的方法求1 + 2 + + n的值。解: #include #include int fn1(int i);void main()int i;cout i ;cout 从1累加到 i 的和为: fn1(i) 2;
19、fib(1) = fib(2) = 1;观察递归调用的过程。解: 源程序见实验指导部分实验三3-15 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出;解: #include float p(int n, int x);void main()int n,x;cout n;cout 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;elsereturn (2*n-1)*x*p
20、(n-1,x) - (n-1)*p(n-2,x) /n ;程序运行输出:请输入正整数n:1请输入正整数x:2n = 1x = 2P1(2) = 2请输入正整数n:3请输入正整数x:4n = 3x = 4P3(4) = 154 第 四 章 类4-9 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。解: 源程序:#include class Rectanglepublic:Rectangle (int top, int left, int bottom, int right);Rectangle () int GetTop() const
21、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
22、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;itsRight = right;int Rectangle:GetArea() constint Width = itsRight-itsLeft;int Height = itsTop - itsBottom;return (Wid
23、th * Height);int main()Rectangle MyRectangle (100, 20, 50, 80 );int Area = MyRectangle.GetArea();cout Area: Area n;return 0;程序运行输出:Area: 3000Upper Left X Coordinate: 204-11 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积 解: #include class Rectanglepublic:Rectangle(float len, float width)Length = len;Width = width;Rec
24、tangle();float GetArea() return Length * Width; float GetLength() return Length; float GetWidth() return Width; private:float Length;float Width;void main()float length, width;cout length;cout width;Rectangle r(length, width);cout 长为 length 宽为 width 的矩形的面积为: r.GetArea () endl;程序运行输出:请输入矩形的长度:5请输入矩形的
25、宽度:4长为5宽为4的矩形的面积为:204-12 定义一个数据类型 datatype类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。解: #include class datatypeenumcharacter,integer,floating_point vartype;union char c;int i;float f;public:datatype(char ch) vartype = character;c = ch;datatype(int ii) vartype = integer;i = ii;datatype(float ff) vartype = floa
26、ting_point;f = ff;void print();void datatype:print() switch (vartype) case character:cout 字符型: c endl;break;case integer:cout 整型: 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浮点型4-13 定义一个Circle类,有数
27、据成员半径Radius,成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。解: #include class Circlepublic:Circle(float radius) Radius = radius;Circle()float GetArea() return 3.14 * Radius * Radius; private:float Radius;void main()float radius;cout radius;Circle p(radius);cout 半径为 radius 的圆的面积为: p.GetArea () endl;程序运行输出:请输入
28、圆的半径:5半径为5的圆的面积为:4-14 定义一个tree类,有成员ages,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。解: #include class Tree int ages;public:Tree(int n=0);Tree();void grow(int years);void age();Tree:Tree(int n) ages = n;Tree:Tree() age();void Tree:grow(int years) ages += years;void Tree:age() cout 这棵树的年龄为 ag
29、es endl;void main()Tree t(12);t.age();t.grow(4);程序运行输出:这棵树的年龄为12这棵树的年龄为16第 五 章 C+程序的基本结构 5-12 在函数fn1()中定义一个静态变量n,fn1()中对n的值加1,在主函数中,调用fn1()十次,显示n的值。解: #include void fn1()static int n = 0;n+;cout n的值为 n endl;void main()for(int i = 0; i i =+10; void Y:g(X* x) x-i +; class Z public:void f(X* x) x-i +=
30、5; ;#endif / MY_X_Y_Z_H程序运行输出:无5-14 定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算二者的重量和。解: 源程序:#include class Boat;class Carprivate:int weight;public:Car(int j)weight = j;friend int totalWeight(Car &aCar, Boat &aBoat);class Boatprivate:int weight;public:Boat(int j)weight = j;friend int tota
31、lWeight(Car &aCar, Boat &aBoat);int totalWeight(Car &aCar, Boat &aBoat)return aCar.weight + aBoat.weight;void main()Car c1(4);Boat b1(5);cout totalWeight(c1, b1) endl;程序运行输出:9第 六 章 数组、指针与字符串6-1 数组A10515一共有多少个元素?解: 10515 = 750 个元素1-2 在数组A20中第一个元素和最后一个元素是哪一个?解: 第一个元素是A0,最后一个元素是A19。6-3 用一条语句定义一个有五个元素的整
32、型数组,并依次赋予15的初值。解: 源程序:int IntegerArray5 = 1, 2, 3, 4, 5 ;或:int IntegerArray = 1, 2, 3, 4, 5 ;6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别?解: 指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。6-10 定义一个有五个元素的整型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。解: 源程序:#include int main()int myArray5;int i;for ( i=0; i5; i+)
33、cout Value for myArray i myArrayi;for (i = 0; i5; i+)cout i : myArrayi n;return 0;程序运行输出:Value for myArray0: 2Value for myArray1: 5Value for myArray2: 7Value for myArray3: 8Value for myArray4: 30: 21: 52: 73: 84: 36-11 引用和指针有何区别?何时只能使用指针而不能使用引用?解: 引用是一个别名,不能为NULL值,不能被重新分配;指针是一个存放地址的变量。当需要对变量重新赋以另外的地
34、址或赋值为NULL时只能使用指针。6-12 声明下列指针:float类型变量的指针pFloat,char类型的指针pString和struct customer型的指针prec。解: float *pfloat;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 = 1
35、0;r = 5;6-21 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。解: 源程序:#include #include int count(char *str)int i,num=0;for (i=0; stri; i+)if ( (stri=a & stri=A & stri=Z) )num+;return num;void main()char text100;cout 输入一个英语句子: endl;gets(text);cout 这个句子里有 count(text) 个字母。 endl;程序运行输出:输入一个英语句子:It is very interesting!这个句子里有19个字母。6-22 编写函数int index(char *s, char *t),