logo资料库

C++程序设计思想与方法课后答案.pdf

第1页 / 共123页
第2页 / 共123页
第3页 / 共123页
第4页 / 共123页
第5页 / 共123页
第6页 / 共123页
第7页 / 共123页
第8页 / 共123页
资料共123页,剩余部分请下载后查看
第一章 【1】简述冯·诺依曼计算机的组成及工作过程。 【解】冯·诺依曼计算机由五大部分组成:运算器、控制器、存储器、输入设备和输出设备。 运算器是真正执行计算的组件。它在控制器的控制下执行程序中的指令,完成算术运算、逻 辑运算和移位运算等。 控制器用于协调机器其余部分的工作。控制器依次读入程序的每条指令,分析指令,命令各 其他部分共同完成指令要求的任务。 存储器用来存储数据和程序。存储器可分为主存储器和外存储器。主存储器又称为内存,用 来存放正在运行的程序和程序处理的数据。外存储器用来存放长期保存的数据。 输入/输出设备又称外围设备,它是外部和计算机交换信息的渠道。输入设备用于输入程序、 数据、操作命令、图形、图像和声音等信息。输出设备用于显示或打印程序、运算结果、文 字、图形、图像等,也可以播放声音和视频等信息。 【2】简述寄存器、主存储器和外存储器的异同点。 【解】 寄存器、主存储器和外存储器都是用于存储信息,但级别不同。从功能来讲,寄存器 存储的是运算器当前正在运算的数据或当前正在执行的那条指令。主存储器保存的是正在运 行的程序代码和数据。外存储器保存的是需要长期保存的数据。从容量角度来讲,寄存器容 量最小,内存次之,外存储器最大。从访问速度来讲,寄存器最快,内存次之,外存最慢。 【3】所有的计算机能够执行的指令都是相同的吗? 【解】 计算机能够执行的指令是直接由硬件完成的,与硬件设计有关。不同的硬件设计产生 不同的指令系统。因此,不同类型的计算机所能执行的指令是不同的。 【4】投入正式运行的程序就是完全正确的程序吗? 【解】程序的调试及测试不可能将程序所有的路径、所有的数据都执行一遍,因此只能发现 并改正程序中的某些错误,而不能证明程序是正确的。 【5】为什么需要编译?为什么需要链接? 【解】计算机硬件能“认识”的只有机器指令,它并不认识程序设计语言,如C++。要使计 算机能够执行C++写的程序,必须把C++的程序翻译成计算机认识的机器语言,机器语言版 的程序称为目标程序。源程序到目标程序的翻译是由编译器完成的。 程序员编写的程序通常会用到其他程序员或C++系统已经编好的一些工具,程序运行时会用 到这些工具的代码。需要将目标文件和这些工具的目标文件捆绑在一起,这个过程称为链接。 链接器就是完成这个链接工作。链接以后的代码称为一个可执行文件。这是能直接在某台计 算机上运行的程序。 【6】调试的作用是什么?如何进行程序调试? 【解】调试的作用是尽可能多地找出程序中逻辑错误,使程序能给出正确的答案。调试一般 需要运行程序,通过观察程序的阶段性结果来找出错误的位置和原因,并改正错误。 【7】试列出一些常用的系统软件和应用软件。 【解】常用的系统软件有:操作系统、编译系统、数据库系统等。应用软件又分成通用的应 用软件和专用的应用软件。通用的应用软件提供一些常规的应用,如文字处理软件word, 媒体播放软件Media Play等。专用的应用软件是某个领域专用的一些软件,如银行系统、 证劵交易系统等。 【8】为什么在不同生产厂商生产的计算机上运行C++程序需要使用不同的编译器。 【解】因为不同的生产厂商生产的计算机有不同的机器语言,所以需要不同的编译器将同样 的C++程序翻译成不同的机器语言。 【9】什么是源程序?什么是目标程序?为什么目标程序不能直接运行? 【解】用某种程序设计语言写的程序称为源程序,源程序经过编译产生的机器语言的程序称 为目标程序。因为程序可能用到了一些其他程序员写好的程序,没有这些工具程序的代码整
个程序就无法运行,因此需要将目标程序和这些工具的目标程序链接在一起后才能运行。 【11】为什么不直接用自然语言和计算机进行交互,而要设计专门的程序设计语言? 【解】自然语言太复杂,而计算机本身(机器语言)的功能又非常简单,如果要将自然语言 作为人机交互的工具,编译器的设计与实现必将非常的复杂。另外,自然语言太灵活,理解 自然语言需要一些背景知识,否则会产生二义性,这也给计算机实现带来了很大的麻烦。 【12】试列举出高级语言的若干优点(相比与机器语言)。 【解】首先高级语言更接近于自然语言和人们熟悉的数学表示,学起来比较方便。其次高级 语言功能比机器语言强。一般的机器语言只能支持整数加法、移位、比较等操作,而高级语 言能执行复杂的算术表达式、关系表达式和逻辑表达式。高级语言可以使程序员在较高的抽 象层次上考虑问题,编程序比较容易。第三,高级语言具有相对的机器独立性,在一台机器 上用高级语言编写的程序可以在另外一台不同厂商生产的计算机上运行,这使得程序有较好 的可移植性,有利于代码重用。 【13】为什么不同类型的计算机可以运行同一个C++程序,而不同类型的计算机不能运行同 一个汇编程序? 【解】因为不同类型的计算机上有不同的C++编译器,可以将同一个C++程序编译成不同机 器上的机器语言表示的目标程序。而汇编程序仅是机器语言的另一种表现形式。不同类型的 计算机有不同的机器语言,也就有不同的汇编语言。 【14】机器语言为什么要用难以理解、难以记忆的二进制比特串来表示指令,而不用人们容 易理解的符号来表示? 【解】因为计算机是由逻辑电路组成的,而0、1正好对应于逻辑电路中的两种电平信号,可 以直接翻译成控制信号,使计算机硬件实现比较容易。如果采用人比较容易理解的符号,如 英文、中文或者数学符号,则计算机需要用硬件将这些符号翻译成控制信号,使硬件设计非 常复杂,甚至无法实现。 【15】为什么电视机只能播放电视台发布的电视,DVD播放机只能播放DVD碟片,而计算机 却既能当电视机用,又能当DVD机用,甚至还可以游戏机用? 【解】电视机只能播放电视台发布的电视,DVD播放机只能播放DVD碟片,这是因为设计时 已经规定好它们的功能。而计算机有一个开放的平台,具有学习的功能,可以允许程序员“教 会”它们新的知识和技能。只要编写了能完成相应功能的程序,计算机就具备了相应的功能。 【16】说明下面概念的异同点: (1)硬件和软件 (2)算法与程序 (3)高级语言和机器语言 (4)语法错误与逻辑错误 【解】 (1)硬件和软件:计算机的硬件是计算机的“肉体”,是看得见、摸得着的实体,它只能做 一些非常简单的工作。计算机的软件是计算机的“灵魂”。“灵魂”指导“肉体”完成一项项 的工作。当你买了一台计算机后,它的硬件是不变的,但是你可以让它“学习”,即安装不 同的软件,你的计算机就有了不同的能力。 (2)算法与程序:算法是按照计算机能够完成的基本功能,设计出的解决某一问题的基本 步骤。用某一种程序设计语言描述的算法称为程序。 (3)高级语言和机器语言:机器语言是计算机硬件具备的功能的抽象,高级语言是面向程 序员的语言,比较接近数学表示,使程序容易编写。 (4)语法错误是指程序的表述没有完全符合程序设计语言的语法规范。逻辑错误是指算法 设计过程中的错误或漏洞。 第二章 简答题
【1】程序开头的注释有什么作用? 【解】程序开头的注释是对程序整体的介绍。一般包括源文件的名称、程序的功能、作者、 创建日期、修改者、修改日期、修改内容等。程序注释还可以描述程序中特别复杂的部分的 实现方法和过程,给出如何改变程序行为的一些建议等。当程序在将来的某一天需要修改时, 程序员可以通过这些注释而不是程序本身来了解程序是如何工作的。 【2】库的作用是什么? 【解】库是一些常用工具的集合,这些工具是由其他程序员编写的,能够完成特定的功能。 当程序员在编程时需要用到这些功能时,不需要再自己编程解决这些问题,只需要调用库中 的工具。这样可以减少重复编程。 【3】在程序中采用符号常量有什么好处? 【解】采用符号常量主要有两个好处:提高程序可读性和可维护性。 【4】C++有哪两种定义符号常量的方法?C++建议的是哪一种? 【解】第一种是C语言的风格:#define 符号常量 值 第二种是C++语言的风格:const 类型 符号常量 = 值; C++建议用第二种。用#define定义符号常量有两个问题:一是所定义的符号常量无法进 行类型检查;二是#define的处理只是简单的字符串替换,可能会引起一些意想不到的错 误。而C++的风格指明了常量的类型,同时是将右边的表达式的值计算出来后再与符号常量 关联起来。例如有定义 #define ABC 3+5 程序中有语句 x = 3 * ABC; 则x 的结果是14,即3 * 3 + 5,而不是24,即3 * 8。但如果用 const int ABC 3+5 则结果是24。 【5】C++定义了一个称为cmath的库,其中包括常用的数学函数。要访问这些函数,需要在 程序中引入什么语句? 【解】需要有一个编译预处理命令:#include ,表示程序用到这个库。 【6】每个C++语言程序中都必须定义的函数的名称是什么? 【解】每个C++语言程序中都必须定义的函数的名称是main。main函数是C++程序的主程序, 是程序执行的入口。 【7】如何定义两个名为num1和num2的整型变量?如何定义三个名为x、y、z的实型双精度 变量? 【解】定义两个名为num1和num2的整型变量可用语句 int num1, num2; 定义三个名为x、y、z的实型双精度变量 double x, y, z; 【8】简单程序通常由哪三个阶段组成? 【解】简单程序通常由输入阶段、计算阶段和输出阶段组成。输入阶段接收用户输入的需要 加工的数据。计算阶段将输入的数据加工成输出数据。输出阶段将加工后的数据输出给用户。 在编写程序时,最好在各阶段之间插入一个空行,使程序逻辑更加清晰。 【9】一个数据类型有哪两个重要属性? 【解】第一个是该类型的数据在内存中是如何表示的,第二个是这类数据允许执行哪些操作。 【10】两个短整型数相加后,结果是什么类型? 【解】短整型数据在执行算术运算时会先被转换成标准的整型然后执行整型运算,所以两个 短整型的整数相加后的结果是整型。 【11】算术表达式 true + false 的结果是多少?结果值是什么类型的?
【解】布尔型数据在执行算术运算时会先被转换成标准的整型然后执行整型运算,true转换 位1, false转换为0,所以true+false的结果是整型1。 【12】说明下列语句的效果,假设i、j和k声明为整型变量: i = (j = 4) * (k = 16); 【解】j的值为4,k的值为16,i的值为64。 【13】用怎样的简单语句将x和y的值设置为1.0(假设它们都被声明为double型)? 【解】可以用嵌套赋值:x = y = 1.0; 【14】假如整型数用两个字节表示,写出下列各数在内存中的表示,并写出它们的八进制和 十六进制表示: 10 32 240 -1 32700 【解】整型数在机器内部被表示为补码形式,所以这些整数在内存中的表示以及八进制、十 六进制表示如下表所示。 内存中的表示 八进制 十六进制 10 32 0000000000001010 12 0000000000100000 40 240 0000000011110000 360 a 20 f0 -1 1111111111111111 177777 ffff 32700 0111111110111100 77674 7fbc 【15】辨别下列哪些常量为C++语言中的合法常量。对于合法常量,分辨其为整型常量还是 浮点型常量: 42 1,000,000 -17 3.1415926 123456789 -2.3 0.000001 20 【解】这些值的情况如下表所示。 1.1E+11 2.0 1.1X+11 23L 2.2E2.2 1,000,000 42 整型 非法 -17 整型 浮点型 20 整型 浮点型 1.1E+11 2.0 1.1X+11 浮点型 非法 整型 23L 整型 浮点型 浮点型 2.2E2.2 非法 3.1415926 123456789 -2.3 0.000001 【16】指出下列哪些是C++语言中合法的变量名? a. x b. formulal g. total output h. aReasonablyLongVariableName c. average_rainfall i. 12MonthTotal d. %correct e. short j. marginal-cost k. b4hand f. tiny 【解】这些符号的情况如下表所示。 l. _stk_depth x formulal average_rainfall %correct short tiny total output 合法 合法 合法 不合法 不合法 合法 不合法 aReasonablyLongVariableName 合法 12MonthTotal marginal-cost b4hand _stk_depth 不合法 不合法 合法 合法
【17】在一个变量赋值之前,可以对它的值做出什么假设? 【解】可以假设它的值是一个随机值。 【19】若k已被定义为int型变量,当程序执行赋值语句 k = 3.14159; 后,k的值是什么?若再执行下面语句,k的值是什么? k = 2.71828; 【解】在执行了k = 3.14159;后,k的值为3。在执行了k=2.71828;后,k的值为2。 【22】以下哪些是合法的字符常量? ‘a’ , “ab” , ‘ab’, ‘\n’, ‘0123’, ‘\0123’, “m” 【解】 ‘a’ “ab” ‘ab’ ‘\n’ ‘0123’ ‘\0123’ “m” 合法 非法 非法 合法 非法 非法 合法 【23】写出完成下列任务的表达式: a. 取出整型变量n的个位数 b. 取出整型变量n的十位以上的数字 c. 将整型变量a和b相除后的商存于变量c,余数存于变量d d. 将字符变量ch中保存的小写字母转换成大写字符 e. 将double型的变量d中保存的数字按四舍五入的规则转换成整数 【解】 a. n % 10 b. n / 10 c. c = a / b, d = a % b d. ch – ‘a’ + ‘A’ e. int(d + 0.5) 【25】若变量k为int类型,x为double类型,执行了k = 3.1415;x = k;后,x和k的 值分别是多少? 【解】k的值是3。x的值为3.0。 【26】已知华氏温度到摄氏温度的转换公式为 某同学编写了一个将华氏温度转换成摄氏温度的程序: int main() { int c, f; cout << “请输入华氏温度:“ ; cin >> f ; c = 5 / 9 * ( f – 32) ; cout << “对应的摄氏温度为:” << c; return 0; } 但无论输入什么值,程序的输出都是0.请你帮他找一找哪里出问题了。 【解】由于该程序中将变量f定义为int型,表达式5 / 9 * ( f – 32)中的所有运算数 都是int类型,C++执行整型运算。5 / 9 为0,0乘任何数都为0,所以c的值永远为0。只 要将5改成5.0,程序就能得到正确的结果。 第二章 程序设计题 【2】设计一个程序完成下述功能:输入两个整型数,输出这两个整型数相除后的商和余数。 )32(95FC
【解】 #include using namespace std; int main() { int num1, num2,quotient, remainder; cout << "请输入两个整型数:"; cin >> num1 >> num2; quotient = num1 / num2; //计算商 remainder = num1 % num2; //计算余数 cout << num1 << " / " << num2 << "的商为:" << quotient << endl; cout << num1 << " % " << num2 << "的余数为:" << remainder << endl; return 0; } 【3】输入9个小于8位的整型数,然后按3行打印,每一列都要对齐。例如输入是:1、2、3、 11、22、33、111、222、333,输出为 1 2 3 11 22 33 111 222 333 【解】 #include using namespace std; int main() { int num1, num2, num3, num4, num5, num6, num7, num8, num9; cout << "请输入9个整型数:"; cin >> num1 >> num2 >> num3 >> num4 >> num5 >> num6 >> num7 >> num8 >> num9; cout << num1 << '\t' << num2 << '\t' << num3 << endl; cout << num4 << '\t' << num5 << '\t' << num6 << endl; cout << num7 << '\t' << num8 << '\t' << num9 << endl; return 0; } 【4】某工种按小时计算工资。每月劳动时间(小时)乘以每小时工资等于总工资。总工资 扣除10%的公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时工资, 输出应发工资。 【解】 #include using namespace std; int main() { int time, yuanPerHour, totalSalary, salary; cout << "请输入每小时工资:"; cin >> yuanPerHour; cout << "请输入本月劳动时间:"; cin >> time;
totalSalary = time * yuanPerHour; // 计算总工资 salary = totalSalary - 0.1 * totalSalary ; // 计算应发工资 cout << "本月应得工资为:" << salary << endl; return 0; } 【5】编写一个程序,用于水果店售货员结账。已知苹果每斤2.50元,鸭梨每斤1.80元,香 蕉每斤2元,橘子每斤1.60元。要求输入各种水果的重量,打印应付金额。再输入顾客付款 数,打印应找零的金额。 【解】 #include using namespace std; int main() { const double priceOfApple = 2.50; const double priceOfPear = 1.80; const double priceOfBanana = 2.00; const double priceOfOrange = 1.60; double apple, pear, banana, orange; double money, income, change; cout << "请输入苹果 梨 香蕉 橘子的重量:"; cin >> apple >> pear >> banana >> orange; money = apple * priceOfApple + pear * priceOfPear + banana * priceOfBanana + orange * priceOfOrange; cout << "你应该付" << money << "元" << endl; cin >> income; change = income - money; cout << "\n找零" << change << "元"; return 0; } 【6】编写一个程序完成下述功能:输入一个字符,输出它的ASCII值。 【解】 #include using namespace std; int main() { char ch; cout << "请输入一个字符:"; cin >> ch; cout << static_cast (ch) << endl; return 0; }
【7】假设校园电费是0.6元/千瓦时,输入这个月使用了多少千瓦时的电,算出你要交的电 费。假如你只有1元、5角和1角的硬币,请问各需要多少1元、5角和1角的硬币。例如这个 月使用的电量是11,那么输出为 电费:6.6 共需6张1元、1张5角的和1张1角的 【解】 #include using namespace std; int main() { const int FEE = 6; // 费用以角为单位 int amount, money; cout << "请输入本月的用电量:"; cin >> amount; money = amount * FEE; // 计算本月应付多少角 cout << "你本月的电费是 " << money / 10 << "元" << money % 10 << "角" << endl; cout << "需要支付" << money / 10 << "个1元的硬币,"; cout << money %10 / 5 << "个5角的硬币,"; cout << money % 5 << "个1角的硬币," << endl; return 0; } 【8】设计并实现一个银行计算利息的程序。输入为存款金额和存款年限,输出为存款的本 利之和。假设年利率为1.2%,计算存款本利之和公式为 本金 + 本金 * 年利率 * 存款年 限。 【解】 #include using namespace std; int main() { const double RATE = 1.2; double principal; int years ; cout << "请输入本金(元)和存期(年):"; cin >> principal >> years; principal = principal + principal * RATE * years / 100; cout << "你的本利和是:" << principal << endl; return 0; } 【9】编写一个程序读入4个整数,输出它们的平均值。程序的执行结果的示例如下: 请输入4个整型数: 5 7 9 6↙ 5 7 9 6的平均值是6.75 【解】。 #include using namespace std;
分享到:
收藏