程序设计1-3章习题解答陈家俊著

上传人:20****08 文档编号:68204762 上传时间:2022-04-02 格式:DOC 页数:6 大小:32.50KB
收藏 版权申诉 举报 下载
程序设计1-3章习题解答陈家俊著_第1页
第1页 / 共6页
程序设计1-3章习题解答陈家俊著_第2页
第2页 / 共6页
程序设计1-3章习题解答陈家俊著_第3页
第3页 / 共6页
资源描述:

《程序设计1-3章习题解答陈家俊著》由会员分享,可在线阅读,更多相关《程序设计1-3章习题解答陈家俊著(6页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上 本文由wyykfq贡献 pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 程序设计教程 用 C+语言编程 (第二版 1-3 章习题解答) 目 录 第 1 章 概述 第 2 章 基本数据类型和表达式 第 3 章 程序的流程控制语句 第 1 章 概述 1、简述冯?诺依曼计算机的工作模型。 答:冯?诺依曼计算机的工作模型是:待执行的程序从外存装入到内存中,CPU 从内存中逐条 地取程序中的指令执行;程序执行中所需要的数据从内存或从外设中获得,程序执行中产生的 中间结果保存在内存中,程序的执行结果通过外设输出。 2、简述寄存器、内存以及外

2、存的区别。 答:寄存器主要用于记录下一条指令的内存地址、当前指令的执行状态以及暂时保存指令的计 算结果供下一(几)条指令使用,其作用主要是减少访问内存的次数,提高指令的执行效率。 内存用于存储计算机程序(指令和数据) ,内存由许多存储单元构成,每个存储单元都有一 个地址,对存储单元的访问是通过其地址来进行的,与寄存器相比,内存的容量要大得多,但 指令访问内存单元所花费的时间比访问寄存器要多得多。 外存是大容量的低速存储部件,用于永久性地存储程序、数据以及各种文档等信息,存储 在外存中的信息通常以文件形式进行组织和访问,外存储了在容量和速度上与内存不同,另一 个区别在于内存中存储的是正在运行的程

3、序和正在使用的数据,外存中存储的则是大量的、并 非正在使用的程序和数据。 3、CPU 能执行哪些指令? 答:CPU 所能执行的指令通常有: 算术指令:实现加、减、乘、除等运算。 比较指令:比较两个操作数的大小。 数据传输指令:实现 CPU 的寄存器、内存以及外设之间的数据传输。 执行流程控制指令:用于确定下一条指令的内存地址,包括转移、循环以及子程序调用/返回等 指令。 4、什么是软件?软件是如何分类的? 答:计算机软件是计算机系统中的程序以及有关的文档。程序是对计算任务的处理对象(数据) 与处理规则(算法)的描述;文档是为了便于人理解程序所需的资料说明,供程序开发与维护 使用。 软件通常可以

4、分为系统软件、支撑软件和应用软件。系统软件居于计算机系统中最靠近硬 件的一级,它与具体的应用领域无关,其他软件一般要通过系统软件发挥作用,如操作系统属 于系统软件。支撑软件是指支持软件开发与维护的软件,一般由软件开发人员使用,如软件开 发环境就是典型的支撑软件。应用软件是指用于特定领域的专用软件,如人口普查软件、财务 软件等。 5、什么是虚拟机? 答:在由硬件构成的计算机(称为“裸机” )之上,加上一些软件就得到了一个比它功能更强的 计算机,称为“虚拟机” 。 6、十进制数 0.1 的二进制表示是什么? 答:(0.1)10 = (0.)2,它是无限循环小数。也就是说,十进制数 0.1 无法精确

5、用二进制 表示! 7、简述程序设计范型。 答:基于不同的计算模型来对计算进行描述就形成了不同的程序设计范型。典型的程序设计范 型有:过程式、对象式、函数式以及逻辑式等。 过程式程序设计是一种以功能为中心、基于功能分解和过程抽象的程序设计范型。一个过 程式程序由一些子程序构成,每个子程序对应一个子功能,它实现了功能抽象。 对象式程序设计是一种以数据为中心、基于数据抽象的程序设计范型。一个面向对象程序 由一些对象构成,对象是由一些数据及可施于这些数据上的操作所组成的封装体。 函数式程序设计是围绕函数来进行的,计算过程体现为一系列的函数应用。 逻辑程序设计是把程序组织成一组事实和一组推理规则,在事实

6、基础上运用推理规则来实 施计算。 8、简述程序设计的步骤。 答:程序设计一般遵循以下步骤: 明确问题; 系统设计; 用某种语言进行编程; 测试与调试; 运行与维护 9、低级语言与高级语言的不同之处是什么? 答:低级语言是指与特定计算机体系结构密切相关的程序语言,它是特定计算机能够直接理解 的语言(或与之直接对应的语言) ,包括机器语言和汇编语言。低级语言的优点在于:写出的程 序效率比较高,包括执行速度快和占用空间少。其缺点是:程序难以设计、理解与维护,难以 保证程序的正确性。 高级语言是指人容易理解和有利于人对解题过程进行描述的程序语言。高级语言的优点在 于:程序容易设计、理解与维护,容易保证

7、程序正确性。高级语言的缺点是:用其编写的程序 相对于用低级语言编写的程序效率要低,翻译成的目标代码量较大。 10、简述编译与解释的区别。 答:编译是指把高级语言程序首先翻译成功能上等价的机器语言程序或汇编语言程序,然后执 行目标代码程序,在目标代码程序的执行中不再需要源程序。 解释则是指对源程序中的语句进行逐条翻译并执行,翻译完了程序也就执行完了,这种翻 译方式不产生目标程序。一般来说,编译执行比解释执行效率要高。 11、简述 C程序的编译执行过程。在你的 C+开发环境中运行 1.3.2 节中给出的简单 C+ 程序。 答:首先可以利用某个编辑程序把 C+源程序输入到计算机中,并作为文件保存到外

8、存中,文 件名为“*.cpp”和“*.h” 。然后利用某个 C+编译程序对保存在外存中的 C+源程序进行编译, 编译结果作为目标文件保存到外存,文件名为“*.obj” 。然后再通过一个联接程序把由源文件 产生的目标文件以及程序中用到的一些系统功能所在的目标文件联接起来,作为一个可执行文 件保存到外存,文件名为“*.exe” 。最后通过操作系统提供的应用程序运行机制,把可执行文 件装入内存,运行其中的可执行程序。 在 Visual C+ 6.0 环境中,首先要建立一个 project(项目) ;其次往该 project 中添加、编辑 程序模块(源文件) ;然后选择菜单 Build 中的 Buil

9、d 或 Rebuild All;最后选择菜单 Build 中 的 Execute 运行程序。 12、C+的单词分成哪些种类? 答:构成 C+的单词有:标识符、关键词、字面常量、操作符以及标点符号等。 13、下面哪一些是合法的 C+标识符? extern, _book, Car, car_1, ca1r, 1car, friend, car1_Car, Car_Type, No.1, 123 答:合法的 C+标识符:_book, Car, car_1, ca1r, car1_Car, Car_Type 第 2 章 基本数据类型和表达式 1、 C+提供了哪些基本数据类型?检查你的计算机上各种类型数

10、据所占内存空间的大小(字 节数) 。 答:C+提供了以下 5 种基本数据类型:整数类型、实数类型、字符类型、逻辑类型以及空值 类型。一台计算机上各种数据类型的数据所占用的内存大小(字节数)可以通过“sizeof(类 型名)”来计算。 2、 下面哪一些是合法的 C+字面常量,它们的类型是什么? -5.23, .20, 1e+50, e5, -25, 1e-5, 105, -0.0e5, 20 n -000, red, A, r, 5, f 3.14, false Today is Monday., 答:字面常量是指在程序中直接写出常量值的常量。-5.23, 1e+50,-25, 20 ,.20,

11、 1e-5, -0.0e5, n, -000, A, 5, r, f , Today is Monday., 都是字面常量。其中: 整数类型常量:-25, 20, -000 实数类型常量:-5.23, 1e+50 , .20, 1e-5, -0.0e5 字符常量: n, A, 5, r, f 字符串常量:Today is Monday., 3、 什么是符号常量?符号常量的优点是什么? 答:符号常量是指有名字的常量,在程序中通过常量的名字来使用这些常量。程序中使用符号 常量有以下优点: 1) 增加程序易读性 2) 提高程序对常量使用的一致性 3) 增强程序的易维护性 4、 如何理解变量?变量定义

12、和声明的作用是什么? 答:在程序中,其值可以改变的量称为变量。变量可以用来表示可变的数据。 程序中使用到的每个变量都要有定义。变量定义指出变量的类型和变量名,另外还可以为 变量提供一个初值。 C+中使用变量之前,必须对使用的变量进行声明(变量定义属于一种声明,即:定义性 声明),变量声明指出了一个变量的类型,使得编译程序能对变量的操作进行类型检查并 做相应的类型转换。 整个程序中,某变量的定义只能由一个,但它的声明可以有多个。 5、 什么是表达式?其作用是什么? 答:表达式是由操作符、操作数以及圆括号所组成的运算式。在程序设计语言中,对数据操作 的具体实施是通过表达式来描述的。 6、 操作符的

13、优先级和结合性分别是指的什么? 答:运算符的优先级和结合性决定表达式中各个运算符的运算次序。操作符的优先级规定了相 邻的两个操作符谁先运算: 优先级高的先计算; 如果相邻的两个操作符具有相同的优先级, 则需根据操作符的结合性来决定先计算谁,操作符的结合性通常分为左结合和右结合:左 结合表示从左到右计算,右结合表示从右到左计算。 7、 表达式中的类型转换规则是什么?下面的表达式计算时如何进行操作数类型转换? (1)3/5*12.3 (2)a+10*5.2 (3)12U+3.0F*24L 答:表达式中类型转换规则是:基于单个操作符依次进行转换。 1)3 与 5 同类型,不转换,结果为 0,转换成d

14、ouble型后与 12.3 做乘法。 2)10 转换成double型与 5.2 做乘法,a转换成double型后与前者结果做加法。 3)3.0F与 24L均转换成double型后做乘法,12U转换成double型后与前者结果做加法。 8、 将下列公式表示成 C+的表达式: (1) - b + b 2 - 4ac 2a (可利用 C+标准库中的求平方根的函数:sqrt(x)) (2) s( s - a )( s - b)( s - c ) (3) a b c 1 d 3 b + 2.5 +c 4 3 pr + 3 答:1)(-1*b+sqrt(b*b-4*a*c)/(2*a) 2)sqrt(s*

15、(s-a)*(s-b)*(s-c) 3)(a*b)/(c*d)*(3/(1+(b/(2.5+c)+(4*pi*r*r*r/3) 9、写出下列条件的 C+表达式 (1)i 能被 j 整除。 (2)ch 为字母字符。 (3)m 为偶数。 (4)n 是小于 100 的奇数。 (5)a、b、c 构成三角形的三条边。 答:1)i%j=0 2)(ch=a)&(ch=A)&(ch=Z) 3)m%2=0 4)(n0) & (b0) & (c0) & (a+bc) & (b+ca) & (c+ab) 或 (a+b)c)&(abs(a-b)0)&(b0)&(c0)可以不用判断 10、在你的计算机上运行下面的程序:

16、 #include using namespace std; int main() double a=3.3, b=1.1; int i=a/b; cout i endl; return 0; 结果与你预期的是否相符?如果不符,请解释它的原因。 答:运行结果为 2。由于十进制小数 3.3 和 1.1 无法用double型精确表示。通过查看结果内存内 的内容,最终结果比 3.0 略小,所以强制转换成int型后结果为 2。 11、不引进第三个变量,如何交换两个整型变量的值? 答:方法一: a=ba; b=ab; a=ba; 方法二: a=a+b; b=a-b; a=a-b; 12、举例说明把 in

17、t 类型转成 float 类型可能会丢失精度。 答: 如果 int 型与 float 型都是 4 个字节, 由于在 float 型的数据表示中, 有若干位用来表示指数, 因此,尾数的位数不到 4 个字节(根据 IEEE 标准,只有 23 个二进制位) 。如果一个 int 型的数 大于 23 位(二进制) ,则无法用 float 型精确表示。例如: int x=0x; float y=x; /x 的最后一位1不是被截掉就是被舍入! cout x endl setprecision(30) y endl; 第 3 章 程序的流程控制语句 1、 编写一个程序,将华氏温度转换为摄氏温度。转换公式为:

18、c= 解: #include using namespace std; int main() double c, f; cout Please input an F-temperature : f; c = (f - 32) * 5 / 9; cout The C-temperature is : c endl; return 0; 2、 编写一个程序,将用 24 小时制表示的时间转换为 12 小时制表示的时间。例如,输入 20 和 16(20 点 16 分) ,输出 8:16pm;输入 8 和 16(8 点 16 分) ,输出 8:16am。 解: 5 (f-32),其中,c 为摄氏温度,f

19、 为华氏温度 9 #include using namespace std; int main() int hour, minute; char noon; cout Please input a time in 24-hour format: endl; cout hour; if (hour23) cout The input hour is wrong! 12) hour =hour - 12; noon = p; else noon = a; cout minute; if (minute59) cout The input minute is wrong! endl; return

20、-1; cout endl The time in 12-hour format is : hour : minute; if (noon = p) cout pm endl; else cout am endl; return 0; 3、 编写一个程序,分别按正向和逆向输出小写字母 az。 解: #include using namespace std; int main() char c; for (c=a; c=z; c+) cout c ; cout =a; c-) cout c cout endl; return 0; ; 4、 编写一个程序,从键盘输入一个正整数,判断该正整数为几位

21、数,并输出其位数。 解: #include using namespace std; int main() unsigned int gzint; int count = 0; while (1) cout Please input an integer(greater than zero) : gzint; if (gzint=0) cout Your input is wrong! Please input again endl; else break; while (gzint!=0) gzint = gzint / 10; count+; cout The number of digi

22、ts in the interger is : count endl; return 0; 5、 编写一个程序,对输入的一个算术表达式(以字符#结束) ,检查圆括号配对情况。输出: 配对、多左括号或多右括号。 解: #include using namespace std; int main() int count=0; char ch; cout Please input an expression : ch; ch != #; cin ch) if (ch = () count+; else if (ch = ) count-; if (count = 0) cout 配对! 0) cou

23、t 多左括号! endl; else cout 多右括号! =”进行计数。 解: #include using namespace std; int main() int count=0; char ch1=0,ch2; cout Please input a string(terminated with #): ch2; ch2 != # ; cinch2) if (ch2 = = & ch1 = ) count+; ch1 = ch2; cout =: count endl; return 0; 7、 假定邮寄包裹的计费标准如下(重量在档次之间时往上一挡靠) : 重量(克) 收费(元) 1

24、5 5 30 9 45 12 60 14(每满 1000 公里加收 1 元) 60 以上 15(每满 1000 公里加收 2 元) 编写一个程序,输入包裹重量和邮寄距离,计算并输出收费数额。 解: #include using namespace std; int main() int charge; double weight; cout Please input the weight of the package : weight; if (weight = 0) cout The input weight is wrong! endl; else if (weight = 15) cha

25、rge = 5; else if (weight = 30) charge = 9; else if (weight = 45) charge = 12; else double distance; cout Please input the distance : distance; if (distance = 0) cout The inputed distance is wrong! endl; else distance /= 1000; if (weight = 60) charge = 14 + (int)distance; else charge = 15 + (int)dist

26、ance * 2; cout charge endl; return 0; 8、 编写一个程序,计算圆周率。可利用公式: p 1 1 1 =1 - + - +K 4 3 5 7 直到最后一项的绝对值小于 10-8。 解: #include #include using namespace std; int main() double item=1.0,sum=0.0; int i=1, sign=1; while (fabs(item) = 1e-8) sum += item; sign *= -1; i += 2; item = sign/(double)i; cout setprecisi

27、on(8) sum*4 endl; return 0; 9、 编写一个程序,求所有这样的三位数,它们等于它们的各位数字的立方和。例如: 153 13 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 st

28、d; int main() for (int i=1; i=9; i+) int n=i*100,m=i*i*i; for (int j=0; j=9; j+) int n1=n+j*10,m1=m+j*j*j; for (int k=0; k=9; k+) if (n1+k = m1+k*k*k) cout n1+k endl; return 0; 10、编写一个程序,求 a 和 b 的最大公约数。 解: #include using namespace std; int main() int a, b; cout Please input a, b : a b; int c=(ab)?b:

29、a; while (c 0) if (a%c = 0 & b%c = 0) break; c-; cout c endl; return 0; 或 #include using namespace std; int main() int a, b; cout Please input a, b : a b; int c; do c = a-b*(a/b); a = b; b = c; while (c != 0); cout a endl; return 0; 11、编写一个程序,输出十进制乘法表。 1 1 2 3 : 9 解: #include using namespace std; in

30、t main() for (int i = 0; i 10; i+) if (i != 0) cout i; cout t; for (int j = 1; j 10; j+) if (i * j != 0) cout i * j t; else cout j t; cout endl; return 0; 12、将下面的 for 循环重写为等价的 while 循环。 for (i=0; imax_length;i+) if (input_linei= ?) quest_count+; 2 2 4 6 : 18 3 3 6 9 : 27 9 9 18 27 : 81 1 2 3 : 9 解: i = 0; while (i max_length) if (input_linei = ?) quest_count+; i+; 13、说明下面的三个程序可以用图 3-6 中的三种控制结构来表示。 c1 s c s1 s2 c s2 s1 c2 s s1 c s c s2 s1 c1 s2 s1 c2 s11专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!