从问题到程序--裘宗燕--课后习题部分答案(第八章)
- 格式:doc
- 大小:45.00 KB
- 文档页数:2
c程序设计第二版课后习题答案由于我无法提供特定的书籍或教材的课后习题答案,但我可以提供一些通用的指导和建议,帮助学生解决C程序设计中可能遇到的常见问题。
以下是一些可能的习题类型和解决策略:1. 基础语法问题:- 这类问题通常要求学生理解C语言的基本语法,例如变量声明、数据类型、运算符等。
- 解决策略:确保理解C语言的基本语法规则,例如变量的声明方式(`int a;`),数据类型(如`int`、`float`、`double`、`char`等),以及基本的运算符(如`+`、`-`、`*`、`/`等)。
2. 控制结构问题:- 这包括`if`、`switch`、`while`、`for`等控制语句的使用。
- 解决策略:熟悉各种控制结构的语法和逻辑,理解条件判断和循环控制的工作原理。
3. 函数问题:- 这类问题要求学生能够定义和调用函数,理解参数传递和返回值。
- 解决策略:掌握函数的定义(`return_typefunction_name(parameters)`),参数的传递方式,以及如何从函数返回值。
4. 数组和字符串问题:- 涉及数组的声明、初始化、遍历和字符串的操作。
- 解决策略:理解数组的索引方式,如何使用循环遍历数组,以及字符串的常见操作,如拼接、复制、比较等。
5. 指针问题:- 指针是C语言中的一个重要概念,涉及到内存的直接操作。
- 解决策略:理解指针的声明(`int *p;`),指针的解引用(`*p`),以及指针与数组的关系。
6. 结构体和联合问题:- 结构体和联合用于创建复杂的数据类型。
- 解决策略:掌握结构体和联合的声明和使用,理解如何访问其成员。
7. 文件操作问题:- 这类问题要求学生能够读写文件。
- 解决策略:熟悉文件打开(`fopen`)、读写(`fread`、`fwrite`)、关闭(`fclose`)等函数的使用。
8. 错误处理问题:- 程序中可能会遇到各种错误,需要妥善处理。
第一章习题参考答案一、单项选择题1. C2. B3. B4.C5. D6. A7. C8. A二、填空题1. 判断条件2. 面向过程编程3. 结构化4. 程序5. 面向对象语言6. 基本功能操作控制结构7. 有穷性8. 直到型循环结构9. 算法10. 可读性11. 模块化12. 对问题的分解和模块的划分第二章习题参考答案一、单项选择题1. B2. D3. C4. B5. A6. A7. B8. C二、填空题1. 主2. C编译系统3. 函数一个主函数和若干函数4. 输入输出5. 以.h为扩展名的头文件6. .obj7. 库函数8. 文本第三章习题参考答案一、单项选择题1. D2. B3. A4. C5. C6. D7. B8. D9. B 10. C11. A 12. D 13. C 14. C 15. C16. C 17. B 18. C 19. C 20. D21. A 22. D 23. D 24. D A 25. D26. A二、填空1. 补码2. 取绝对值为10-308~1030815~16位3. 0或14. 赋值右向左5. 函数调用6. 65,89三、应用题1. 10 92. 111213. 区别是:求负:单目,右结合-a+b减法:双目,左结合a-b取地址:单目,右结合&a按位与:双目,左结合a&b第四章习题参考答案一、单项选择题1. D2. C3. D4. A5. D6. B7. A8. C9. B 10. B二、填空题1.一条;2. 5.1690003.(1)-200 2500(2)i=-200,j=2500(3)i=-200j=25004. a=98, b=765.000000, c=4321.0000005. 三种可能的输入是:(1)100<回车> 25.81<回车> 1.89234<回车>(2)100<空格> 25.81<空格> 1.89234<回车>(3)100<TAB > 25.81<TAB > 1.89234<回车>6. 0,0,37. 38. 输入语句是:scanf("%lf%lf%lf",&a,&b,&c);9. 13 13.000000 13.00000010. 3种方法:(1) 增加一个临时变量t。
1. 创建符号表达式()sin f x x x =+。
参考答案:>> f = sym('sin(x)+x');2. 计算习题 1 中表达式在/6x π=处的值,并将结果设置为以下 5 种精度:小数点之后 1 位、2 位、5 位、10位和20位有效数字。
参考答案:>> digits(1)>> vpa(subs(f,x,pi/6))ans =1.>> digits(2)>> vpa(subs(f,x,pi/6))ans =1.0>> digits(5)>> vpa(subs(f,x,pi/6))ans =1.0236>> digits(10)>> vpa(subs(f,x,pi/6))ans =1.0235987763.设x 为符号变量,()421f x x x =++,()32458g x x x x =+++,试进行如下运算:(1)()()f x g x +(2)()()f x g x ⨯(3)求()g x 的反函数(4)求g 以()f x 为自变量的复合函数参考答案:>> f = sym('x^4 + x^2 + 1');>> g = sym('x^3 + 4*x^2 + 5*x + 8');(1)>> f+gans =x^4+5*x^2+9+x^3+5*x(2)>> f*gans =(x^4+x^2+1)*(x^3+4*x^2+5*x+8)(3)>> finverse(g)Warning: finverse(x^3 + 4*x^2 + 5*x + 8) is not unique.>> In sym.finverse at 43ans =1/6*(-656+108*x+12*(2988-984*x+81*x^2)^(1/2))^(1/3)+2/3/(-656+108*x+12*(2988-984*x+81*x^2)^(1/2))^(1/3)-4/3(4)>> syms x>> compose(g,f,x)ans =(x^4+x^2+1)^3+4*(x^4+x^2+1)^2+5*x^4+5*x^2+134.合并同类项(1)22x x x x-++--325325(3)222x xy y xy x xy y-+--+-+(对x和y)2322521参考答案:(1)>> f = sym('3*x - 2*x^2 + 5 + 3*x^2 - 2*x -5');>> collect(f)ans =x+x^2(2)>> f = sym('2*x^2 - 3*x*y + y^2 - 2*x*y - 2*x^2 + 5*x*y - 2*y + 1');>> collect(f)ans =y^2-2*y+15.因式分解(1)将7798666 进行因数分解,分解为素数乘积的形式(2)8-2m+512(3)23223a(x-y)-4b(y-x)参考答案:(1)>> factor(sym('779866'))ans =(2)*(149)*(2617)(2)>> factor(sym('-2*m^8 + 512'))ans =-2*(m-2)*(m+2)*(m^2+4)*(m^4+16)(3)>> factor(sym('3*a^2*(x-y)^3 - 4*b^2*(y-x)^2')) ans =(x-y)^2*(3*a^2*x-4*b^2-3*a^2*y)6.绘制下列函数的图像(1)()2sin f x x x =+,[]0,2π (2)()3221f x x x =++,[]2,2- 参考答案:(1)>> f = sym('sin(x) + x^2');>> ezplot(f,[0,2*pi]);(2)>> f = sym('x^3 + 2*x^2 + 1');>> ezplot(f,[-2 2]);7.计算下列各式(1)0tan sin lim 1cos 2x x xx→-- (2)322sin y x x x =-+,求y '(3)()ln y xy x y =+,求/f x ∂∂,/f y ∂∂,2/f x y ∂∂∂(4)ln(1)y t dx =+⎰,270ln(1)y t dx =+⎰参考答案:(1)>> limit(sym('(tan(x) - sin(x))/(1-cos(2*x))')) ans =(2)>> y = sym('x^3 - 2*x^2 + sin(x)');>> diff(y)ans =3*x^2-4*x+cos(x)(3)>> f = x*y*log(x+y);>> fx = diff(f,x)fx =y*log(x+y)+x*y/(x+y)>> fy = diff(f,y)fy =x*log(x+y)+x*y/(x+y)>> f2xy = diff(fx,y)f2xy =log(x+y)+y/(x+y)+x/(x+y)-x*y/(x+y)^2 (4)>> syms t>> y = log(1+t);>> int(y)ans =log(1+t)*(1+t)-t-1>> int(y,0,27)ans =56*log(2)+28*log(7)-278.计算下列各式(1)13nn n∞=⎛⎫ ⎪⎝⎭∑(2)12sin3nnn π∞=∑(3)sin x在0 附近的Taylor 展开参考答案:(1)>> symsum(sym('(3/n)^n'),1,inf)ans =sum((3/n)^n,n = 1 .. Inf)(2)>> symsum(sym('2^n*sin(pi/(3^n))'),1,inf) ans =3^(1/2)(3)>> taylor(sym('sin(x)'))ans =x-1/6*x^3+1/120*x^59.求解线性方程组231321x y x y +=⎧⎨+=-⎩参考答案:>> [x,y] = solve(sym('2*x+3*y=1'),sym('3*x+2*y=-1')) x =-1y =110.对符号表达式22x y z xe --=,进行如下变换(1)关于x 的傅立叶变换(2)关于y 的拉普拉斯变换(3)分别关于x 和y 的 Z 变换参考答案:(1)>> syms x y>> z = x*exp(-(x^2+y^2));>> syms u v>> fourier(z,x,u)ans =-1/2*i*pi^(1/2)*u*exp(-y^2-1/4*u^2)(2)>> laplace(z,y,v)ans =1/2*x*exp(-x^2)*pi^(1/2)*exp(1/4*v^2)*erfc(1/2*v)(3)>> ztrans(z,x,u)ans =-u*diff(ztrans(exp(-x^2-y^2),x,u),u)>> ztrans(z,y,v)ans =x*ztrans(exp(-x^2-y^2),y,v)11.绘制函数()()()221exp 2f x x y π=-+在33x -<<,33y -<<上的表面图参考答案:>> syms x y>> z = 1/(2*pi)*exp(-(x^2+y^2)); >> ezsurf(x,y,z,[-3,3,-3,3]);。
1.1:存储程序式计算机的主要特点是:集中顺序过程控制(1)过程性:模拟人们手工操作(2)集中控制:由CPU集中管理(3)顺序性:程序计数器1.2:a:批处理系统的特点:早期批处理有个监督程序,作业自动过渡直到全部处理完,而脱机批处理的特点:主机与卫星机并行操作。
b:分时系统的特点:(1):并行性。
共享一台计算机的众多联机用户可以在各自的终端上同时处理自己的程序。
(2):独占性。
分时操作系统采用时间片轮转的方法使一台计算机同时为许多终端上同时为许多终端用户服务,每个用户的感觉是自己独占计算机。
操作系统通过分时技术将一台计算机改造为多台虚拟计算机。
(3):交互性。
用户与计算机之间可以进行“交互会话”,用户从终端输入命令,系统通过屏幕(或打印机)将信息反馈给用户,用户与系统这样一问一答,直到全部工作完成。
c:分时系统的响应比较快的原因:因为批量操作系统的作业周转时间较长,而分时操作系统一般采用时间片轮转的方法,一台计算机与许多终端设备连接,使一台计算机同时为多个终端用户服务,该系统对每个用户都能保证足够快的响应时间,并提供交互会话功能。
1.3:实时信息处理系统和分时系统的本质区别:实时操作系统要追求的目标是:对外部请求在严格时间范围内做出反应,有高可靠性和完整性。
其主要特点是资源的分配和调度首先要考虑实时性然后才是效率。
此外,实时操作系统应有较强的容错能力,分时操作系统的工作方式是:一台主机连接了若干个终端,每个终端有一个用户在使用。
用户交互式地向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式处理服务请求,并通过交互方式在终端上向用户显示结果。
用户根据上步结果发出下道命。
分时操作系统将CPU 的时间划分成若干个片段,称为时间片。
操作系统以时间片为单位,轮流为每个终端用户服务。
每个用户轮流使用一个时间片而使每个用户并不感到有别的用户存在。
分时系统具有多路性、交互性、“独占”性和及时性的特征。
第1 章引论第1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
c语言程序设计教程第二版课后习题答案1. 基本概念和语法1.1 变量和数据类型题目:请将下列C语言的变量定义语句补充完整,并给出每个变量的数据类型和初始化值。
代码:```c#include <stdio.h>int main() {int a;float b;char c;double d;int x = 5;float y = 3.14;char z = 'A';printf("a的数据类型:%s,a的初始值:%d\n", typeof(a), a);printf("b的数据类型:%s,b的初始值:%f\n", typeof(b), b); printf("c的数据类型:%s,c的初始值:%c\n", typeof(c), c); printf("d的数据类型:%s,d的初始值:%lf\n", typeof(d), d); printf("x的数据类型:%s,x的初始值:%d\n", typeof(x), x); printf("y的数据类型:%s,y的初始值:%f\n", typeof(y), y); printf("z的数据类型:%s,z的初始值:%c\n", typeof(z), z); return 0;}```答案:a的数据类型:int,a的初始值:随机值b的数据类型:float,b的初始值:随机值c的数据类型:char,c的初始值:'\0'd的数据类型:double,d的初始值:随机值x的数据类型:int,x的初始值:5y的数据类型:float,y的初始值:3.140000z的数据类型:char,z的初始值:A1.2 运算符和表达式题目:请在下列C语言程序中补充运算符,使程序达到题目要求。
```c#include <stdio.h>int main() {int a = 5;int b = 3;int c;// 1. 将a和b的和赋值给c,并将c的值输出// 补充代码// 2. 将a和b的差赋值给c,并将c的值输出// 补充代码// 3. 将a和b的积赋值给c,并将c的值输出// 补充代码// 4. 将a除以b的商赋值给c,并将c的值输出// 补充代码// 5. 将a除以b的余数赋值给c,并将c的值输出// 补充代码return 0;}```要求:1. 补充代码,使程序能够正确输出运算结果;2. 使用合适的运算符。
c程序设计第二版谭浩强课后答案C程序设计第二版是谭浩强教授编写的一本广泛使用的计算机程序设计教材,它以C语言为基础,深入浅出地介绍了程序设计的基本概念、语法规则和编程技巧。
这本书的课后习题对于加深理解C语言的知识点非常有帮助。
以下是部分课后习题的答案,供参考:第一章程序设计和C语言概述1. 问题一:简述程序设计的基本步骤。
- 答案:程序设计的基本步骤包括需求分析、设计、编码、测试和维护。
2. 问题二:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、灵活的数据类型和内存管理能力。
第二章 C语言程序的结构1. 问题一:C语言程序的基本结构是什么?- 答案:C语言程序的基本结构包括预处理指令、函数定义和主函数。
2. 问题二:什么是函数?C语言中函数的定义规则是什么?- 答案:函数是一段具有特定功能的代码块,可以被重复调用。
C 语言中函数的定义规则包括返回类型、函数名和参数列表。
第三章数据类型、运算符和表达式1. 问题一:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。
2. 问题二:算术运算符有哪些?它们的优先级是怎样的?- 答案:算术运算符包括加(+)、减(-)、乘(*)、除(/)和模(%)。
它们的优先级从高到低依次是乘除、模、加减。
第四章控制语句1. 问题一:C语言中的条件语句有哪些?- 答案:C语言中的条件语句包括if语句、if...else语句和switch语句。
2. 问题二:循环语句有哪些?它们的基本结构是什么?- 答案:C语言中的循环语句包括while循环、do...while循环和for循环。
它们的基本结构是初始化、条件判断和迭代。
第五章数组1. 问题一:什么是数组?数组的声明方式有哪些?- 答案:数组是相同数据类型元素的集合。
数组的声明方式包括在函数内部声明和全局声明。
第三章练习1. 下面的字符序列中哪些不是合法的变量名:-abc __aa for pp.288IBM/PC tihsWhile r24_s25 __a__b a"bc _345答:-abc for pp.288 to be IBM/PC ms-c #micro m%ust While a"bc2. 假设整型变量a 的值是1,b 的值是2,c 的值是3,在这种情况下分别执行下面各个语句,写出执行对应语句后整型变量u 的值。
1)u = a ? b : c;2)u = (a = 2) ? b + a : c + a;答:1)u=2 2)u=43. 假设整型变量a 的值是1,b 的值是2,c 的值是0,写出下面各个表达式的值。
1)a && !((b || c) && !a)2)!(a && b) || c ? a || b : a && b && c3)!(a + b < c) && b <= c * a – b答:1)1 2)0 3)04. 下面程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?int f (int n, float m) {return (m + n) / 4;}int main () {float y = 3;printf("%d\n", f(y, y + 1));return 0;}答:{}int main () {float y=3;return 0;}5. 在计算机上试验本章正文中的一些程序。
对它们做一些修改,观察程序加工和运行的情况,并对程序的行为做出解释。
答案:略6. 定义求圆球的体积、求圆球的表面积、求圆柱体的体积、求圆柱体的表面积的函数。
答:#include<stdio.h>double f1(double r){double v;v=4.0/3.0*r*r*r*3.1415926;return v;}double f2(double r){double s;s=4*r*r*3.1415926;return s;}double f3(double r,double h){double v;v=r*r*3.1415926*h;return v;}double f4(double r,double h){double s;s=2*3.1415926*r*h+2*3.1415926*r*r;return s;}int main(){printf("圆球的体积为%f\n",f1(0.15));printf("圆球的面积为%f\n",f2(0.15));printf("圆柱体的体积为%lf\n",f3(0.15,0.5));printf("圆柱体的面积为%lf\n",f4(0.15,0.5));system("pause");return 0;}7. 1)不用函数,直接写一个主程序计算并输出直径为100 毫米和150 毫米的金、银、铜、铁、锡球的重量(以kg 为单位输出)。
第六章 数据对象的顺序组合:数组程序的工作都与数据有关,如输入数据、输出数据、存储数据、对数据进行各种计算和修改等。
客观世界中需要处理的数据千姿百态,为能处理所关注事物的有关特征和性质,就需要在程序里表示它们。
为此,程序语言需要提供一套手段,使人能在写程序时方便地处理与数据表示有关的各种问题,这就是语言的数据机制。
需要由程序处理的数据可能很简单,也可能很复杂,数据之间可能有丰富多采的各种关系。
为了反映这些情况,语言的数据机制必须足够丰富。
这里也有简洁性与方便性的问题,有关数据机制不能无限制地庞大,使语言过分臃肿,难以使用;也不应过于低级,以至要描述一点东西都非常烦琐。
后一情况正是机器语言和汇编语言的一个弱点。
经过几十年的研究和实践,高级语言领域在这方面已经形成了一套公认的有效方式,数据机制基本框架通常包括下面几个互相联系的方面:1. 把语言要处理的数据对象划分为一些类型,每个类型是一个数据值的集合。
例如C语言里的int类型就是该类型能表示的所有整数值的集合。
2. 提供一组基本数据类型,确定其书写方式(文字量),提供一组基本操作(运算),支持基本数据对象的表示和使用。
例如C语言的int、double等。
3. 提供一组由简单数据类型或数据对象构造更复杂数据类型或数据对象的手段。
反复使用这些手段可以构造出任意复杂的数据结构,以满足复杂数据处理的需要。
这里提到的数据结构是计算机科学中的一个重要概念,也是一门后续计算机课程的名称。
C语言采用了通行的数据机制。
它提供了一组基本数据类型,其数据构造机制是下面几章的基本内容,包括本章将要介绍的数组,后面章节要介绍的指针、结构、联合等。
利用它们可以把多个(基本或非基本的)数据对象组合起来,作为整体在程序里使用。
这样组合而成的数据对象称作复合数据对象,由所有“同类”复合对象形成的类型称为复合数据类型。
一个复合数据对象的组成部分称为它的成分、成员或元素。
程序中可以建立存放复合类型数据的变量,这使复合数据对象也能命名。
第8章习题参考答案
1. 编写程序,该程序在同一窗口中绘制函数在 []0,2π之间的正弦曲线和余弦曲线,步长为 /10π,线宽为 4 个象素,正弦曲线设置为蓝色实线,余弦曲线颜色设置为红色虚线,两条曲线交点处,用红色星号标记。
参考答案:
>> x=0:pi/10:2*pi;
>> sinx = sin(x);
>> cosx = cos(x);
>> figure,plot(x,sinx,'LineWidth',4)
>> hold on,plot(x,cosx,'r:','LineWidth',4)
>> hold on,plot(x(find(cosx==sinx)),cosx(find(cosx==sinx)),'r*','LineWidth',4)
2. 绘制下列图像
(1)sin y x x =,010x π<<
(2)三维曲线:22
6621z x xy y x y =++++-,1010x -<<,1010y -<< (3)双曲抛物面:22
164
x y z =-,1616x -<<,44y -<< 参考答案:
(1)
>> x = 0:pi/10:10*pi;
>> plot(x,sin(x))
(2)
>> [X,Y] = meshgrid(-10::10);
>> Z = X.^2 + 6*X*Y + Y.^2 + 6*X + 2*Y -1;
>> plot3(X,Y,Z)
(3)
>> [X,Y] = meshgrid(-16::16,-4::4);
>> Z = X.^2/16 - Y.^2/4;
>> plot3(X,Y,Z)
3. 绘制下列图像
(1)绘制电脑磁盘使用情况的饼状图
(2)生成 100 个从 0 到 10 之间的随机整数,绘制其直方图
(3)生成 10个从 0 到 10 之间的随机整数,绘制其阶跃图
参考答案:
(1) 利用 pie 函数
(2)
>> hist(round(rand(100,1)*10))
(3)
>> X = round(rand(10,1)*10);
>> stairs(X)
4. 分别通过界面交互方式和函数方式在第1 题生成的图形中添加注释,至少应包括:标题,文本注释,图例。
界面交互方式略。
函数方式的参考答案如下:
>> title('正弦曲线和余弦曲线');
>> gtext('sin(x)')
>> gtext('cos(x)')
>> legend('sin(x)','cos(x)')
5.对第2 题中绘制的双曲抛物面尝试进行视点控制和颜色控制。
参考答案:使用view 函数和colormap 函数。