程序设计教程-用C++语言编程-陈家骏-教材习题解答.docx
《程序设计教程-用C++语言编程-陈家骏-教材习题解答.docx》由会员分享,可在线阅读,更多相关《程序设计教程-用C++语言编程-陈家骏-教材习题解答.docx(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、程序设计教程一一用C+语言编程(第二版习题解答)目录第1章概述2第2章基本数据类型和表达式4第3章程序的流程控制一一语句7第4章过程抽象一一函数16第5章构造数据类型22第6章数据抽象一一类37第7章操作符重载53第8章继承一一派生类77第9章类属(泛型)机制一一模板87第10章输入/输出(I/O) 93第11章异常处理101第12章 实例面向对象的Windows应用程序框架102else if (ch =) count-;)if (count = 0)cout ”配对!” vv endl;else if (count 0)cout 多左括号! endl; elsecout ”多右括号!” e
2、ndl;return 0;6、编写一个程序,输入一个字符串(以字符#结束),对其中的“二”进行计数。 解:#include using namespace std;int main() int count=0;char chl-0ch2;cout nPlease input a string(terminated with #): “ endl;for (cinch2; ch2 !=#; cinch2) if (ch2 = -1 & chi = ) count+;chi =ch2;)cout Number of =: count endl;return 0;7、假定邮寄包裹的计费标准如下(重量
3、在档次之间时往上一挡靠):重量(克) 收费(元)15530945126014(每满1000公里加收1元)60以上15(每满1000公里加收2元)编写一个程序,输入包裹重量和邮寄距离,计算并输出收费数额。解:#include 100 char id20;char name20;int average_score; students 300 ; /假设最多300个学生void sort_by_average(Student sts r int num) for (int i=0; inum-l; i+) int k=i;for (int j=i + l; j stsk.average_score)
4、 k = j; if (k != i) Student temp=stsi;sts i = stsk;stsk = temp;)int main() ifstream in_file(nd:myfile.txtr ios:in);/输入文件每二f亍按下面格式:学号,姓名,成绩1,成绩2,,成绩8if (!in_file) return -1;int index=0; /学生数组下标in_file.getline(studentsindex .id,20, * , 1 );while (!in_file.eof() in_file.getline(studentsindex.name,20,);
5、studentsindex.average_score = 0;int scores 8;for (int i=0; i scores i;char ch;in_f ile . get (ch) ; /读入逗号和回车符studentsindex.average_score += scoresi;studentsindex.average_score /= 8;index+;in_file.getline(studentsindex.id,20,1,1);)in_file.close();sort_by_average (students, index) ; /排序ofstream out_fi
6、le(nd:myfile_sort , txtn,ios:out);/输出文件每一行按下面格式:学号,届名,平均成绩if ( !out_file) return -1;for (int i=0; iindex; i+) out_file studentsi.id studentsi .name , , 1 studentsi .average_score endl;out file.close();return 0;第11章异常处理1、程序的错误包括哪几种?它们分别是由于什么原因造成的?试举例说明。答:程序的错误通常包括:语法错误,逻辑错误和运行异常。 语法错误是指程序的书写不符合语言的语法规
7、那么,这类错误可由编译程序发现。 逻辑错误(或语义错误)是指程序设计不当造成程序没有完成预期的功能,这类错误通过测 试发现。 运行异常(exception)是指由程序运行环境问题造成的程序异常终止,如:内存空间缺乏、 翻开不存在的文件进行读操作、程序执行了除以0的指令等等。2、C+提供的异常处理机制的好处是什么?答:C+的异常处理机制的好处是: 把程序的异常处理和正常逻辑分开描述。 方便实现异常的异地处理。3、在本教程给出的例子程序中,有些程序的鲁棒性是不好的。请找到假设干个这样的程序并加以改进。 答:如:例3-2中的n如果输入了负数,那么程序的行为未定义。例3-6中的如果输入了负数,程序行
8、为未定义。例3-9中的月份如果输入的不在112范围内,程序行为未定义。等等。4、定义一个具有数组性质的类,对该类重载操作符“口”实现数组元素的访问。要求:在操作符“口” 重载函数中对下标进行检查,越界时抛掷一种异常对象。答:#include using namespace std;class IntArray int *p;unsigned int len;public:IntArray(int n) p=new int n; len=n; -IntArray() delete p; p=0; len=0;int &operator(int i) if (i=len) throw -1;ret
9、urn pi;);int main() IntArray a (10);int i;loop:cin i;try a i = i; ) catch (int) cout nErrornn; goto loop;) cout ai endl; return 0;)5、如何对本章的错误!未找到引用源。中的程序作修改,使得该程序能够一直运行到用户输入正确的 数据为止?答:#include using namespace std; int divide(int x, int y) if (y = 0) throw 0;return x/y;) void f() int a,b;cout a b;int
10、 r=divide(a,b);cout a 除以 b ”的商为:n r endl;)catch (int) cout ”除数不能为0,请重新输入两个数:I goto loop;)int main() f 0 ; return 0;)6、如果一个函数以抛掷异常对象来通知函数的运行情况,那么,该函数的接口说明应包括哪些内容? 答:参数和返回值类型,以及可能抛掷哪些种类的异常对象。7、如果不用C+的异常处理机制,那么,如何处理在构造函数中发现的异常?答: 在构造函数中调用函数exit或abort就地处理,或给对象设置一个数据成员,用于记录对象的异常状态。在构造函数中如果发现异常,那么对这个数据成员进
11、行置位,通过另外提供的一个成员函数来判断对象的异常状态。第12章 实例面向对象的Windows应用程序框架using namespace std;int main() int charge;double weight;cout ”Please input the weight of the package : endl;cin weight;if (weight = 0)cout ”The input weight is wrong !H endl;else if (weight = 15)charge = 5;else if (weight = 30)charge = 9;else if (
12、weight = 45)charge = 12;else double distance;cout Please input the distance : “ endl;cin distance;if (distance = 0)cout ”The inputed distance is wrong!n endl;elsedistance /= 1000;if (weight = 60)charge = 14 + (int)distance;elsecharge = 15 + (int)distance * 2;)cout charge endl;return 0;)8、编写一个程序,计算圆周
13、率。可利用公式:) 1 1 1=11F43 5 7直到最后一项的绝对值小于10-8。解:#include #include using namespace std;int main() double item= 1.0,sum=0.0;int i=l, signal;while (fabs(item) = le-8) sum += item;sign *=;i += 2;item = sign/(double)i;cout setprecision(8) sum*4 endl;return 0;)它们等于它们的各位数字的立方和。例如:9、编写一个程序,求所有这样的三位数,153 = 13 +
14、33 + 53解:#include using namespace std;int main() for (int n = 100; n = 999; n+) int i,j, k;i=n/100; 百位数字j 二 n% 100/10;/十位数字k = n%10;个位数字if (n = i*i*i+j*j*j+k*k*k) cout n endl;return 0;)或#include using namespace std;int main() for (int i=l; i=9; i+) int n=i*100,m=i*i*i;for (int j=0; j=9; j+) int nl=n
15、+j*10,ml=m+j*j*j; for (int k=0; k=9; k+) if (nl+k = ml+k*k*k)cout nl+k endl;)return 0;)10、编写一个程序,求a利b的最大公约数。 解:#include using namespace std;int main() int a, b;cout ”Please input a, b : “ endl;cin a b;int c=(ab)?b:a;while (c 0) if (a%c = 0 & b%c = 0) break;c-;)cout c endl;return 0;)或#include using n
16、amespace std;int main() int a, b;cout nPlease input a, b : n endl;cin a b;int c;do c = a-b*(a/b);a = b;b = c; while (c != 0);cout a endl;return 0;或#include using namespace std;int main() int a, b;cout Please input a, b : “ endl;cin a b;int c=(ab)?b:a;a=(ab)?a:b;b二c;while (c 0) c=a%b; a=b; b=c;cout a
17、 endl;return 0;)11、编写一个程序,输出十进制乘法表。12391123922461833692799182781解:#include using namespace std;int main() for (int i = 0; i 10; i+) if(i!=0)couti;cout ntH;for (int j = 1; j 10; j+)if(i*j !=0)cout i * j “t;elsecout j ntn;cout endl;)return 0;12、将下面的for循环重写为等价的while循环。for (i=0; imax_length;i+)if (input
18、_line i = * ? 1 ) quest_count-i-+;解:i = 0;while (i max_length) if (input_linei = ?) quest_count+;i+;13、说明下面的三个程序可以用图3-6中的三种控制结构来表示。第4章过程抽象一一函数1、简述子程序的作用。答:子程序是有名字的一段程序代码,它通常完成一个独立的(子)功能。在程序的其他地方 通过子程序的名字来使用它们。除了能减少程序代码外,采用子程序的主要作用是实现过 程抽象,使用者只需知道子程序的功能,而不需要知道它是如何实现的,这有利于大型、 复杂程序的设计和理解。2、简述局部变量的作用。答:
19、1、实现信息隐藏,使得函数外无法访问该函数内部使用的数据。2、减少名冲突,一个函数可以为局部变量定义任何合法名字,而不用担忧与其他函数的局 部变量同名。2、局部变量的内存空间在栈中分配,函数调用完之后释放,因此,使用局部变量能节省程 序的内存空间。3、简述变量的生存期和标识符的作用域。答:变量的生存期指程序运行时一个变量占有内存空间的时间段。C+把变量的生存期分为静 态、自动和动态三种。标识符的作用域是指:一个定义了的标识符的有效范围,即该标识 符所标识的程序实体能被访问的程序段。在C+中,根据标识符的性质和定义位置规定了 标识符的作用域。作用域分为:全局作用域、文件作用域、局部作用域、函数作
20、用域、函 数原型作用域、类作用域、名空间作用域。4、全局标识符与局部标识符在哪些方面存在不同?答:1、作用域不同2、生存期不同3、用途不同,全局标识符用于标识共享的实体,而局部标识符用于标识专用的实体。5、下面的声明中哪一些是定义性声明?这些定义性声明的非定义性声明是什么?(1) const int i=l;(2) static double square(double dbl) return dbl*dbl; (3) char *str;(4) struct Point;(5) char* (*pFn)(int(*)(char*,int),char*);答:1)是。非定义性声明:extern
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程 C+ 语言 编程 陈家骏 教材 习题 解答
限制150内