c语言课后习题解答

2024-10-04

c语言课后习题解答(共5篇)

c语言课后习题解答 篇1

/*练习5-3*/ #include int prime(int m){

int i;

for(i=2;i<=m-1;i++)

if(m%i==0)

break;

if(i==m)

return 1;

else

return 2;} main(){

int i,m,n,sum=0,a=0;

printf(“enter m and n:(1<=m<=n<=500)n”);

scanf(“%d”,&m);

scanf(“%d”,&n);

for(i=m;i<=n;i++)

{

if(prime(i)==1)

sum=sum+i;

a=a+1;

}

printf(“之间的素数和为:%dn”,sum);

printf(“之间的素数个数为:%dn”,a);}

/*习题5.1*/ #include int fn(int a,int n){

int i,sum=0,m=1,c;

for(i=1;i<=n;i++)

{

sum=sum+m;

m=m*10;

}

c=sum*a;

return c;} main(){

int a,n,i,x,y=0;

printf(“enter a and n:n”);

scanf(“%d”,&a);

scanf(“%d”,&n);

for(i=1;i<=n;i++)

{

x=fn(a,i);y=y+x;

}

printf(“y=%dn”,y);}

/*习题5.2*/ #include int countdigit(int number,int digit){

int sum=0;

while(number>0)

{

if(number%10==digit)

sum=sum+1;

number=number/10;

}

return sum;} main(){

int number,y;

printf(“enter a number:n”);

scanf(“%d”,&number);

y=countdigit(number,2);

printf(“y=%dn”,y);}

c语言课后习题解答 篇2

思考与练习题解答

1.采购部门的职能是什么?在企业中的实施程序是什么? 答:

采购部门的职能体现在企业采购的实施过程中,结合采购实施程序来描述。

(1)采购部门汇总生产部门提供的用料计划,参照库存部门盘点得到的原料库存信息 和销售部门的预测信息,确定企业的采购需求;

(2)采购部门寻找相应的供货商,调查其产品在数量、质量、价格、信誉等方面是否 满足购买要求;

(3)采购部门确定采购计划,即详细的购买计划和需求信息,提供采购计划给财务部 门;

(4)财务部门进行财务预算,预算结果报管理层审批;

(5)管理层审批预算报告,预算符合要求就开始执行采购计划,预算超支要把采购计 划退回采购部门,重新修正采购计划;

(6)执行采购计划后,供应商按采购计划供货;(7)采购到货后,质量部门进行检验;

(8)验收合格的货物进入仓库,库存部门更新库存台账;(9)验收不合格,要进行退换货处理,更新供应商信息;

(10)验收完毕,财务部门处理原材料明细账,并开具采购发票,然后支付供应商货 款。

2.销售部门的职能是什么? 答:

销售部门的职能如下:

(1)进行市场一线信息收集、市场调研工作;

(2)制定销售计划,进行目标分解,并执行实施;(3)营销网络的开拓与合理布局;

(4)建立各级客户资料档案,保持与客户之间的双向沟通;(5)合理进行销售部预算控制;

(6)制定业务人员行动计划,并予以检查控制;(7)按企业回款制度,催收或结算货款。

3.企业预测的作用是什么? 答:

预测能生成销售订单的预测,这些预测是作为计划和进度的输入,它为所有的BOM 层次计算物料需求,它与资源需求计划,主生产计划,物料需求计划,分销需求计划有关。(1)资源需求计划使用预测作为估计产品制造所需要的时间和资源。

(2)对主生产计划来说,来自预测的数据是它的输入,这些数据用来在生产计划执行 之前帮助决定产品的需求。

(3)物料需求计划是一个订单和计划系统,它把预测数据作为其下层部件的输入,而 这些下层部件均为具有独立需求的部件。

1(4)分销需求计划是计划和控制最终产品分销的系统,它输入了预测数据之后,就能 对分销所需提供的需求作业进行准确的计划。

4.客户订单处理的流程是什么? 答:

(1)根据产品目录及报价,企业与客户初步建立了购买订单。

(2)企业要根据已建立的客户档案资料,对客户的信用状况进行审核,核定其信用额 度。当该客户的应收账款加上本次交易金额之和大于其信用额度时,一般不予进行交易。(3)如果客户的信用审核被通过,接下来需要进行产品库存的查询,以便决定库存的 分配发货的选择,以及发货给客户的策略。

(4)当报价,信用,库存各方面信息均已得到之后,就可以与客户进行交易,签定正 式订单。

(5)有了订单之后,也可以根据需要对订单进行修改和撤消以及跟踪。(6)产品完工之后,可以开出发票和发货单,并进行货物的发运。

5.销售分析的目的及其流程是什么? 答:

销售分析的目的可以分为几个方面:

(1)通过监督销售员在销售过程中所获得的利润效率效果。

(2)提高产品销售的透明度,便于分析完成或没有完成的销售目标的原因。

(3)了解销售业绩,各种资源的利用状况,找出与现实最大利润目标之间的差距,从 而进一步通过提高企业管理水平来提高经济效率。

销售分析可以按以下流程进行:

(1)建立销售分析计划,为了要确定分析的内容,范围,目的和要求,时间进度等,便于分析工作的顺利进行,必须先建立一份销售计划,其内容就是由以上各项所组成。

(2)收集分析数据,数据是分析工作的重要依据。计划数据,核算数据,历史数据,同类企业数据等均是销售分析所需要的。

(3)整理分析数据,在正式作销售分析之前,还需要对分析数据进行正确与否的检查 及核实,然后结合具体的分析方法对数据进行整理。

(4)选取销售分析方法,销售分析方法有很多种,一般可以分为使用比较法,比率分 析法,差额分析法和平衡分析法,他们均属于数量分析方法。

在比较法中,可以用本期实际指标与上年或上月的实际指标对比,也可以用本期实际指 标与计划或定额指标相比。

在比率分析法中,可以用不同时期的某向指标或各项指标之间的相对数进行分析。在进 行销售分析时,可以根据需要,从以上各种方法中选取某种方法。

(5)做出分析结论,在选取了分析方法之后,可以根据已有的数据进行分析,并对分 析的结果做出结论,然后再建立一份销售分析报告。

6.库存管理的作用和地位?在企业中的实施程序是什么? 答:

库存管理的作用:使企业保有—个最佳库存水平:既能很好的满足物资需求,保障供应,又可以降低库存总成本。

库存管理在企业中的实施程序一般包括以下几个环节:

(1)采购入库和产品入库。企业生产部门制造或装配的产成品完工后,如果不立刻销

售,需要先存放在成品仓库,等待销售订单。采购计划确定的原材料到货后需要验收入原材 料仓库。对于这些物品的入库都需要办理入库手续。

(2)物资账务管理。采购物品和产成品入库后,需要进行相应的台账处理和各库房分 类账的管理,同时财务部门也要更新原材料明细账。

(3)仓库管理。对于库存物资要定期进行盘存清点,更新库存信息。

(4)办理物资出库手续,包括生产领料和销售出货,同时更新库存台账,原材料明细 账,和各库房分类账等信息。

(5)废旧物资处理。库存管理部门定期盘点库存,当有废旧物资需要处理时,核定物 资,形成处理方案,报主管部门审批,审批同意后,进行废旧物资的处理,处理完成后形成 处理报告存档。

(6)仓储费用核算。由财务部门和库存管理部门根据各种库存账目如库存台账、各库 房分类账、原材料明细账等及相应的保管和管理费用进行核算。

7.为什么企业采购、库存管理需要使用ERP? 答:

传统的企业采购存在大量问题,直接影响着采购环节在现代企业管理中的作用,主 要问题包括:

(1)大部分采购是典型的非对称信息博弈过程(2)响应用户需求能力迟钝

(3)供需关系大都是临时或短期的合作关系,竞争多于合作(4)采购与预测和物料需求计划结合不紧密

ERP 中的采购管理有效处理了传统采购管理中的问题,采购部门制定的采购计划能紧密 地结合销售预测信息和生产的物料需求信息,对供应商执行实时和动态的管理。

库存管理存在的最大的问题就是如何降低库存,同时又能保证生产。任何企业都不希望 存在任何形式的库存积压,无论是原材料、在制品还是产品的库存。库存管理存在的问题主 要表现如下:

(1)低效率的信息传递

(2)忽视不确定性对库存的影响(3)库存控制策略简单化

(4)产品设计过程没有考虑库存的影响

ERP 中的库存管理很好地集成企业的需求预测、库存状态、生产计划等企业管理的重要 数据,实现高效的信息传递。根据对不确定因素的跟踪,制定相应的库存管理控制策略。从 而实现对库存适实的管理,除此之外,对产品设计过程也提供各种库存信息,如库存成本计 算等,使产品规划更具有可行性。

8.怎样理解库存控制在企业中的作用? 答:

库存控制随时可以提供完整的库存信息,包括明细和汇总的信息,以便管理者计划和 控制产成品、在制品和原材料的库存,同时也提供周期盘点的处理。

(1)库存更新,使用者可以自行定义库存,并根据入库、出库等变动情况随时进行库 存的更新,以便使库存量保持最新的状态。

(2)库存事务过账,库存事务能通过过账功能自动地过到总账中去,在过账时可以显 示库存变动数量的总额、单位和成本等。

(3)建立物料文档,可以为物料建立库存文档,在文档中具有该物料的编号、品名、3 规格、批号、批量、提前期等各种类型的数据。

(4)库存查询,库存文档中所存在的各种数据都可以通过查询功能而找到,如各种库 存物料数据、库存更新的历史、明细与汇总的库存状况、物料的耗用量、库存周转率等。

(5)库存盘点,为了管理库存,保证库存数据的准确度,库存的周期盘点是必要的,通过盘点可以发现盈与亏,找出盈亏问题所在,对库存系统的绩效进行评估。

9.ERP 中采购管理的流程是什么? 答:

(1)根据采购计划填制采购申请单,当采购申请单得到批准后,可以开始做采购的 准备,这个准备包括:得到供应商的报价,了解供应商的信用情况、产品质量、交货进度.(2)与供应商签订采购合同,即一份采购订单。

(3)根据采购订单的内容,对供应商发送来的货物,进行数量上的点收和质量上的验 收。

(4)当验收合格之后,采购物品可以正式人库,如果验收不合格,则应该进行退货处 理。

10.ERP 中仓库管理的流程是什么? 答:

ERP 中库存管理业务流程,描述如下:

(1)物料进出库管理和各个仓库的交易作业处理。包括:

 采购管理中的采购到货后,对货物的验收入库,验收不合格可能产生退货处理。涉及到的单据有收料单,收料退回单,收料检验单,验收单,验退单等等。 生产部门生产完工后,验收产品入库。涉及到的单据有入库单等。 生产部门安排生产,领用原料。涉及到的单据有领料单,退料单等。 销售部门销售货物,库存安排出货给客户。涉及到的单据有出库单等。 各个仓库间的物料调拨管理。涉及到的单据有调拨单,借用/归还单等。(2)各仓库存货作业处理。包括:

 库存物资的定期盘存,涉及到的单据有盘点调整单等。 库存废旧物资的处理。涉及到的单据有报废单、销毁单等。 库存成本核算。涉及到各种库存物料的成本信息表。

11.案例

现象1:一个产品由成百上千种物料组成,最终又可以分解为各种原辅材料,每种材料 的批量和采购提前期都不相同,为了降低成本而又不影响生产,每种材料究竟应该在仓库里 保存多少?这一直是企业非常关心的问题。有许多企业就是因为库存的物料不配套,由于工 艺调整便造成库存物料的大量浪费。

现象2:在有些制药、食品、化工企业,大量的物料批次账已经混乱不堪,没有进行先 进先出的发料管理,有些物料已经过期、变质,还作为企业的存货存在账上。谁也不知道每 批物料的去向,出现了质量问题以后,没有办法去追溯。

现象3:仓库保管员辛辛苦苦编制库存报表被领导一把扔在那里没有起到相应的作用。现象4:每个月的月底,财务都会跑来和仓库保管员对账,对来对去却总是对不上,而 财务部门对于仓库保管员送来的一摞料单也是头疼不已。

比如对于现象1,因为编制采购计划的关键是准确的物料清单(BOM)、采购批量和时

段库存量,在手工处理条件下,这些数据都非常难获得,而管理软件中的采购系统在编制采

购计划时,有三个方面的需求来源,分别是生产的建议采购计划、库存量不足的补库采购计 划和其他采购需求,这些需求都是通过联网的系统直接从相关的部门获得的,换言之,也就 是真实和准确的。在确定了这三方面的需求后,通过合并下达功能,系统将一段时期内的需 求汇总,并按照系统中定义的物料与采购员的关系,生成责任到人的采购计划。这样就可以 从根本上解决采购计划的盲目性问题和采购计划编制的复杂性问题,并且还可以解决采购资 金的计划问题、采购审批的问题、采购计划完成情况的跟踪问题等。

通过企业管理信息系统,上述的各种问题都可以得到不同程度的解决,相应的功能可以 参考询价、报价、自动更新货源清单、自动跟踪采购订单、自动形成各种统计报表等功能的 产品介绍。

题目:试分析现象2、3、4 的原因以及在集成的信息系统中如何实现? 答:

现象2 的原因:人工处理方式不能有效地记录各种帐表信息,导致库存账目混乱。现象3 的原因:库存报表属于最基层的决策参考信息,不能和企业的决策层需求直接的 结合在一起,对决策起辅助参考作用。

现象4 的原因:财务部门和库存部门的信息不能及时沟通,各自独立进行日常业务处理,月底的时候才进行对帐,月底面对大量的数据,库存部门和财务部门核对起来难度很大。

c语言课后习题解答 篇3

1.(1)机器语言是计算机直接理解执行的语言,由一系列(二进制)指令组成,其助符构成了汇编语言;接近人的自然语言习惯的程序设计语言为高级语言。

(2)结构化程序设计方法主要内容有:自顶向下,逐步求精;面向对象方法将现实世界中的客观事物描述成具有属性和行为的对象,抽象出共同属性和行为,形成类。

(3)C++程序开发通常要经过5个阶段,包括:编辑,编译,连接,运行,调试。首先是编辑阶段,任务是编辑源程序,C++源程序文件通常带有.cpp扩展名。接着,使用编译器对源程序进行编译,将源程序翻译为机器语言代码(目标代码),过程分为词法分析、语法分析、代码生成3个步骤。

在此之前,预编译器会自动执行源程序中的预处理指令,完成将其他源程序文件包括到要编译的文件中,以及执行各种文字替换等。

连接器的功能就是将目标代码同缺失函数的代码连接起来,将这个“漏洞”补上,生成可执行文件。程序运行时,可执行文件由操作系统装入内存,然后CPU从内存中取出程序执行。若程序运行进程中出现了错误,还在需要对程序进行调试。

(4)对象与对象之间通过消息进行相互通信。

(5)类是具有相同属性和行为的一组对象的抽象;任何一个对象都是某个类的一个实例。

(6)多态性是指在一般类中定义 的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。(7)面向对象的软件开发过程主要包括面向对象的方法分析、面向对象的设计、面向对象的编程、面向对象的测试和面向对象的维护。

(8)泛型程序设计是指在程序设计时,将数据类型参数化,编写具有通用性和可重用的程序。(9)# include 是一条预处理指令(语句),在编译(或预处理)时由编译器(或预编译器)执行,其功能是将iostream文件包含(复制)到指令处。

(10)C++中使用cin作为标准输入流对象,通常代表键盘,与提取操作符>>连用;使用cout作为标准输出流对象,通常代表显示设备,与<<连用。

2.(1)叙述机器语言、汇编语言、高级语言的特点。

机器语言是计算机直接执行的语言,由二进制的0和1构成的一系列指令组成;

汇编语言是机器语言的助记符;

高级语言是接近人的自然语言习惯的编程语言,通过编译变成机器语言。(2)结构化的语言与面向对象的语言是截然分开的吗?

不是截然分开的,面向对象的程序设计中也包含过程,含有结构化的思想。(3)C编写的程序不加修改就可以在C++编译器中编译。

(5)C++程序通过编译变成带扩展名.obj的目标文件;再通过连接变成带扩展名.exe的可执行文件。(6)如果要求不使用include包含头文件,有什么办法使程序正常编译运行?

在相应的文件夹(子目录)中,找到需要包含的头文件,将头文件复制到包含处。

3.(2)C++语言程序能够在不同操作系统下编译、运行,说明C++具有良好的移植性。(可以说C++语言完全兼容C语言,但是在这不能说C++语言程序能兼容不同的操作系统;对于计算机硬件,一般使用“兼容”一词,对于程序使用“移植”)。(3)#include语句在程序运行前就执行了。(4)C++程序运行时总是起始于main();(5)用C++写程序时一个语句可分几行写。(6)面向对象编程方法有:对象、继承、类等。

1.2习题2解答 1.(1)C++的基本数据类型可分为5大类:逻辑型(或布尔型)、字符型、整形、实型、空值型。分别用关键字bool,char,int,float/double,void 定义。长度分别为1,1,4,4/8,不定字节。整型、字符型的默认符号修饰为signed。(2)十进制数值、八进制数值、十六进制数值的前缀分别为1~9, 0, 0x(或0X)。(3)一个整数值的数据类型为int,一个带小数点的数据类型为double。

(4)C++预定义的常用转义序中,在输出流中用于换行、空格的转义序列分别为n,t。(5)布尔型数值只有两个;true, false。在C++的算术运算式中,分别当作1,0。

(6)字符由单引号’’括起来,字符串由双引号“”括起来。字符只能有1个字符字符串可以有多个字符。空串的表示方法为“”(或“ ”)。(7)标识符以英文字母,下划线开头。

(8)定义变量的同时赋初值的方法有赋值运算符=,括号。定义常变量初值的方法有赋值运算符=,括号。

(9)关系运算符操作数的类型可以是任何基本数据类型,对其中的实数类型不能进行直接比较(if(a

(-10)&&与||表达式按从左到右的顺序进行计算,以&&连接的表达式,如果左边的计算结果为false(或0),右边的计算不需要进行,就能得到整个逻辑表达式的结果:false;以||连接的表达式,如果左边的计算结果为true(或非0),就能得到整个逻辑表达式的结果:true。

(11)>>运算符将一个数右移n位,相当于将该数除以2,<<运算符将一个数左移n位,相当于将该数乘以2。(12)所有含赋值运算的运算符左边要求是左值。

(13)前置++、――的优先级高于后置++、――。

(14)按操作数数目分,运算符的优先级从高到低排列为单目、双目、三目,按运算符的性分,优先级从高到低排列为算术、移位、关系、按位、逻辑。

(15)在表达式中会产生副作用的运算符有++、--、各类赋值。2.1.3

习题3解答

1.(1)if语句中的表达式可以是任意表达式(关系表达式、逻辑表达式、算术表达式、常量)。1.4习题4解答

1.(1)一个C++程序就是由一个个函数组成的即使是最简单的程序也有一个main()函数。

(2)函数执行过程中通过return语句将函数值返回,当一个函数不需要返回值,此时需要使用void作为类型名。(3)在C++中,如果函数定义在后,调用在先,需要进行函数原型声明,告诉编译器函数的(返回)类型,函数名,形式参数。其格式和定义函数时的函数头的形式基本相同,它必须以分号 ;结尾。(4)函数调过程的3个步骤为:函数调用(或参数传递),函数体执行,返回。(5)函数参数传递过程的实质是将实参值通过堆栈一一传送给实参。(实参传给实叁?)(6)递归程序分两个阶段执行调用,回代。

(7)带inline关键字定义的函数为内联函数,在编译时将函数体展开到所有调用处。内联函数的好处是节省执行时间开销。

(8)函数名相同,但对应形参表不同的一组函数称为重载函数,参数表不同是指参数个数、类型不同。

(9)确定对重载函数中函数进行绑定的优先次序为精确匹配,对实参的类型向高类型转换后的匹配,实参类型向低类型及相容类型转换后的匹配。

(10)当既存在重载函数、又有函数模板,函数调用优先绑定重载函数,只有不能精确匹配重载函数时,才实例化类模板。

n

N(11)内联函数的展开、重载函数的绑定、类模板的实例化与绑定均在编译阶段进行。(12)在C++中,函数不允许嵌套定义,允许嵌套调用。

2.(1)void fun(void)的定义是正确的,double fun(int x;int y)和int fun();和double fun(int x,y)这都是不正确的(定义是不能以;结尾的)。(2)函数int fun(int x, int y)的声明形式可以是int fun(int, int)和int fun(int y,int x);和int fun(int i,int j);(int fun(int x, int y)是不正确的因为函数的声明必须以;结尾)。(3)C++语言中规定函数的返回值的类型是由定义该函数时所指定的数据类型所决定。(5)在C++中默认的形参值应该先从右边的形参开始向左边依次设置。(6)重载函数参数个数相同时,参数类型必须不同。

(7)系统在调用重载函数时,依据的是函数名称、实参个数、实参类型。(8)

(9)为了取代C中带参数的宏,在C++ 中使用内联函数。(10)函数模板定义的头部template(11)若fun(8,3.1)调用的可以是fun(double, double)――(当没有精确匹配时,优先进行向高类型转换后的匹配)(12)若fun(8,3.1)调用的可以是template fun(T1,T2)1.5 习题5解答

1.(-1)enum weekday {sun,mon,tue,wed=d,thu,fri,sat};

weekday workday =mon;

cout<

输出:5(怎么加的?)

(2)在C++中,引用数组元素时,其数组下标的数据类型允许是整形常量、整形表达式等非浮点型表达式。(整型表达式实际上包含了整型常量)

(3)设有数组定义:char array[]=”China”;则数组array所占的空间为6个字节(’’)。(4)若:int a[][3] = {1,2,3,4,5,6,7};

则a 数组高维的大小为:3。(-6)若二维数组a有m 列,则在a[i][j]前的元素个数为(i*m+j);

1.6习题六解答(1)从变量的定义位置分,可分为全局变量与局部变量。其中,局部变量定义在函数或复合语句中,供函数或复合语句中使用。

(2)变量的存储类型分为auto,extern,register,static。当声明一个静态(static)变量,它既具有局部变量的性质,又具有全局变量的性质。

(3)C++程序的内存分为4个区:全局数据区,代码区,栈区,堆区。全局变量,静态变量,字符串常量存放在全局数据区,所有在函数和代码存放在代码区,为运行函数而分配的函数参数,局部变量,返回地址存放在栈区。动态分配的内存在堆区。

(4)全局变量,静态变量具有静态生存期;局部变量生存期为动态。

(5)函数原型中形参标识符的作用域为为函数原型,函数的形参与函数体作用域为块作用域;函数,全局变量与常量有文件作用域。(6)C++源程序中以#开头,以换行符结尾的行称为预处理命令。预处理命令编译前由预处理器执行。

(7)可以通过3种方法使用名字空间,个别使用声明方式,全局声明方式,全局声明个别成员。

2.(1)在C++中,函数默认的存储类别为:auto。

(2)函数的形式参数是局部变量,在一个函数体内定义的变量只在本函数范围内有效,在函数的复合语句中定义的变量在此复合语句中有效。

(3)# define PI 3.14 预处理命令必须以#开头,凡是以#开头的都是预处理命令行,在程序执行前执行预处理命令。

(4)动态分配的内存要用delete释放,局部auto变量分配的内存在函数调用结束时释放,全局变量的内存在程序结束时释放。

1.7

习题7解答

1.(1)类的私有成员只能被该类的成员函数或友元函数访问。

(2)类的数据成员不能在定义的时候初始化,而应该通过构造函数初始化。(3)类成员默认的访问方式是private.(4)类的公有成员函数的集合是该类给外界提供的接口。

(5)类的公有成员可以被类作用域内的任何对象访问。

(6)为了能够访问到某个类的私有成员,必须在该类中声明该类的友元。(7)类的静态成员为该类的所有对象所共享。

(8)每个对象都有一个指向自身的指针,称为this指针,通过使用它来确定其自身的地址。(9)运算符new自动建立一个大小合适的对象并返回一个具有正确类型的指针。(-10)C++禁止非const成员函数访问const对象。

(-11)定义类的动态对象数组时,系统只能够自调用该类的构造函数对其进行初始化。(――12)C++中语句const char* const p=”hello”;所定义的指针p和它所指的内容都不能被以改变。

(――13)假定AB为一个类,则语句 AB(AB& x);为该类拷贝构造函数原型说明。

(14)在C++中访问一个对象的成员所用的运算符是.,访问一个指针所指向的对象的成员所用的运算符是->。(15)析构函数在对象的生存期结束时被自动调用,全局对象和静态对象的析构函数在程序运行结束时调用。

(16)设p是指向一个类的动态对象的指针变量,则执行 delete P;语句时,将自动调用该类的析构函数。

2.(1)数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是类。

(2)类的实例化就是创建类的对象。

(-3)已知p是一个指向类Sample数据成员m的指针,s是类Sample的一个对象。如果要给m赋值为5:s.*p=5;(4)类与对象的关系和数据类型与变量的关系是相似的,一个对象只能属于一个具体的类。(5)封装要求对象就具有明确的功能,它使得一个对象可以像一个部件一样用在各种程序中。

(6)内联函数是在编译时(而不是运行时)将该函数的目标代码插入到每一个调用该函数的地方。

(7)类中的函数成员可以在类体中定义,也可以在类体之外定义。(8)C++中的对象并不是C语言中的结构体变量,它是一个状态和操作(或方法)的封装体,对象之间的信息传递是通过消息进行的。

(9)在建立类的对象时只为每个对象分配用于保存数据成员的内存 3.(1)类和数据类型有何关联?

类相当于一种包含函数的自定义数据类型,它不占内存空间,是一个抽象的“虚”体,使用已定义的类建立对象就像用数据类型定义变量一样。对象建立后,对象占据内存,变成了一个“实”体。类与对象的关系就像数据类型与变量的的关系一样。其实,一个变量就是一个简单的不含成员函数的数据对象。(2)类和对象的内存分配关系?

为节省内存,编译器在创建对象时,只为各对象分配用于保存各对象数据成员初始化的值,并不为各对象的成员函数分配单独的内存空间,而是共享类的成员函数定义,即类中成员函数的定义为该类的所有对象所共享,这是C++编译器创建对象的一种方法,实际应用中,我们仍将对象理解为由数据成员和函数成员两部分组成。

(3)什么是浅拷贝?什么是深拷贝?二者有何异同?

构造函数用于建立对象时给对象赋初值以初始化新建立的对象。如果有一个现存的对象,在建立新对象时希望利用现存对象作为新对象的初值,即用一个已存在的对象去初始化一个新建立的对象。C++提供的拷贝构造函数用于在建立新对象时将已存在的对象的数据成员值复制给新,以初始化新对象。拷贝构造函数在用类的一个对象去初始化该类的另一个对象时调用,以下3种情况相当于用一个已存在的对象去初始化新建立的对象,因此,调用拷贝构造函数:

① 当用类的一个对象去初始化该类的另一个对象时。② 如果函数的形参是类的对象,调用函数时,将对象作为函数实参传递给函数的形参时。③ 如果函数的返回值是类的对象,函数执行完成,将返回值返回时。

原因在于默认的拷贝构造函数实现的只能是浅拷贝,即直接将原对象的数据成员值依次复制给新对象中对应的数据成员,并没有为新对象另外分配内存资源。这样,如果对象的数据成员是指针,两个指针对象实际上指向的是同一块内存空间。

当类的数据成员中有指针类型时,我们就必须定义一个特定的拷贝构造函数,该拷贝构造函数不仅可以实现原对象和新对象之间的数据成员的复制,而且可以为新的对象分配单独的内存资源,这就是深拷贝构造函数。

(4)什么是this指针? 它的作用是什么?

一个类的成员函数中,有时希望引用调用它的对象,对此,C++采用隐含的this指针来实现。this指针是一个系统预定义的特殊指针,指向当前对象,表示当前对象的地址。系统利用this指针明确指出成员函数当前操作的数据成员所属的对象。实际上,当一个对象调用其成员函数时,编译器先将该对象的地址赋给this指针,然后调用成员函数,这样成员函数对对象的数据成员进行操作时,就隐含使用了this指针。

一般而言,通常不直接使用this指针来引用对象的成员,但在某些少数情况下,可以使用this指针,如重载某些运算符以实现对象的连续赋值等。

This指针不是调用对象的名称,而是指向调用对象的指针的名称。This的值不能改变,它总是指向当前调用对象。

(5)C++中静态成员有何作用?它有何特点?

C++提供了静态成员,用以解决同一个类的不同对象之间数据成员和函数的共享问题。

静态成员的特点是:不管这个类创建了多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象所共享。

面向对象方法中还有类属性(class attribute)的概念,类属性是描述类的所有对象的共同特征的一个数据项,对于任何对象实像实例,它的属性值是相同的,C++通过静态数据成员来实现类属性。

(6)友元关联有何性质?

①友元关联是不能传递的,不能被继承。如B类是A类的友元,C类是B类的友元,C类和A类之间如果没有声明,就没有任何友元关系,不能进行数据共享。

②友元关系是单向的,不具有交换性,如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。(7)在C++程序设计中,友元关系的优点和缺点是什么?

友元概念的引入,提高了数据的共享性,加强了函数与函数之间、类与类之间的相互联系,大大提高了程序的效率,这是友元的优点,但友元也破坏了数据隐蔽和数据封装,导致程序的可维护性变差,给程序的重用和扩充埋下了深深的隐患,这是友元的缺点。(8)如何实现不同对象的内存空间的分配和释放?

当类被实例化成对象后,不同类别的对象占据不同类型的内存,其规律与普通变量相同: ① 类的全局对象占有数据段的内存。② 类的局部对象内存分配在栈中。

③ 函数调用时为实参建立的临时对象内存分配在栈中。④ 使用动态内存分配语句new建立的动态对象,内存在堆中分配。

虽然类(对象)是由数据成员与成员函数组成。但是,程序运行时,系统只为各对象的数据成员分配单独内存空间,而该类的所有对象则共享类的成员函数定义以及为成员函数分配的空间。对象的内存空间分配有下列规则:

① 对象的数据成员与成员函数占据不同的内存空间,数据成员的内存空间与对象的② ③ 存储类别相关,成员函数的内存空间在代码段中。

一个类所有对象的数据成员拥有各自的内存空间。

一个类所有对象的成员函数为该类的所有对象共享,在内存中,只有一个副本随着对象的生命周期的结束,对象所占的空间就会释放,各类对象内存空间释放时间与方法如下:

a. 全局对象的数据成员占有的内存空间在程序结束时释放。

b. 局部对象与实参对象数据成员的内存空间在函数调用结束时释放。c. 动态对象数据成员的内存空间要使用delete语句释放。

d. 对象的成员函数的内存空间在该类的所有对象生命周期结束时自动释放。

1.8

习题8解答1.(1)C++程序设计的关键之一是利用继承实现软件重用,有效地缩短程序的开发时间。

(2)基类的对象可以作为派生类的对象使用,这称为类型兼容(或赋值兼容)。

(3)在C++中,三种派生方式的说明符号为public, private, protected, 如果不加说明,则默认的派生方式为private。

(4)当私有派生时,基类的的公有成员成为派生类的私有成员;保护成员成为派生类的私有成员;私有成员成为派生类的不可访问成员。

(5)相互关联的各个类之间的关系主要分为组成关联和继承关联。

(6)在派生类中不能直接访问基类的私有成员否则破坏了基类的封装性。(-7)保护成员具有双重角色,对派生类的成员函数而言,它是公有成员,但对所在类之外定义的其它函数而言则是私有成员。

(-8)多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现二义性。在派生类中采用成员名限定或重定义具有二义性的成员来消除该问题。

(9)C++提供的多继承机制允许一个派生类继承多个基类。

2.(1)一个派生类可以作为另外一个派生类的基类;派生类至少有一个基类;派生类的成员除了它自己的成员外,还包含了它的基类的成员。

(2)在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则是完全相同的。(3)友元关系是不能继承的。

(4)派生类一般都是公有派生;对基类成员的访问必须是无二义性的;赋值兼容规则也是适用于多重继承的场合。(5)基类的保护成员在公有派生中仍然是保护的;基类的保护成员在私有派生中却是私有的;对基类成员的访问必须是无二义性的。

(6)在公有派生的情况下,派生类中定义的成员函数只能访问原基类中的公有成员和保护成员。

(7)每个派生类的构造函数都要为虚基类构造函数提供实参;多继承时有可能出现对基类成员访问的二义性问题;建立派生类对象时,虚基类数的构造函数会首先被调用。

(8)在一个派生类对象结束其生命周期时先调用基类的析构函数后调用派生类的析构函数。

(9)当保护继承时,基类的公有成员和保护成员在派生类中成为保护成员,不能通过派生类的对象来直接访问。(10)若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的私有成员。(11)设置虚基类的目的是消除二义性。

(12)继承具有传递性,即当基类本身也是某个类的派生类时,底层的派生类也会自动继承间接基类的成员。(13)在派生类构造函数的初始化列表中不能包含派生类中一般数据成员的初始化。

(14)在公有派生情况下,派生类的对象可以赋给基类的对象;派生类的对象可以初始化基类的引用;派生类的对象的地址可以赋给指向基类的指针。

3.(1)派生类如何实现对基类私有成员的访问?

无论使用哪一种继承方式,基类的私有成员都不允许外部函数直接访问,也不允许派生的成员函数直接访问,但是可以通过基类的公有成员函数间接访问该类的私有成员。(2)什么是赋值兼容?它会带来什么问题?

类型兼容是指在公有派生的情况下,一个派生类对象可以作为基类的对象来使用。类型兼容又称为类型赋值值兼容或类型适应。

在C++中,类型兼容主要指以下3种情况:

① 派生类对象可以赋值给基类对象; ② 派生类对象可以初始化基类的引用;

③ 派生类对象的地址可以赋给指向基类的指针;

由于派生类对象中包含基类子对象,所以这种引用方式是安全的,但是这种方法只能引用从基类继承的成员。如果试图通过基类指针引用那些只有在派生类中才有的成员,编译器将会报告语法错误。

(3)多重继承时,构造函数和析构函数的执行顺序是如何实现的?

多得继承时,构造函数的执行顺序是:先执行基类的构造函数,再执行对象成员的构造函数,最后执行派生类的构造函数。

在多个基类之间则严格按照派生类声明时从左到右的顺序来执行各基类的构造函数,而析构函数的执行顺序则正好与构造函数的执行顺序相反。

(4)继承与组合之间的区别和联系是什么?

继承描述的是一般类与特殊类的关系,类与类之间体现的是”is a kind of”,即如果在逻辑上A是B的一种,允许A继承B的功能和属性。例如汽车(automobile)是交通工具(vehicle)的一种,小汽车(car)是汽车的一种。那么类automobile可以从类vehicle派生,类car 可以从类automobile派生。

组合描述的是整体与部分的关系,类与类之间体现的是”is a part of ”,如果在逻辑上A是B的一部分,则允许A和其他数据成员组合为B。例如:发动机、车轮、电池、车门、方向盘、底盘都是小汽车的一部分,它们组合成汽车,而不能说汽车是发动机的一种。

在C++中,类的继承与类的组合很相似,继承和组合既有区别,也有联系,主要表现在描述的关系不同。某些比较复杂的类,既需要使用继承,也需要使用组合,二者一起使用。

在某些情况下,继承与组合的实现还可以互换。在多继承时,一个派生类有多个直接基类,派生类实际上是所有基类属性和行为的组合。派生类是对基类的扩充,派生类的成员一部分是从基类中来,因此派生类组合了基类。既然这样,派生类也可以通过组合类实现。什么时候用继承,什么时候使用组合,要根据问题中类与类之间的具体关系,顺其自然,权衡考虑。

(5)什么是虚基类?它有什么作用?

在多继承中,当派生类的部分或全部直接基类又是从另一个共同基类派生而来时,这些直接基类中从上一级共同基类继承来的成员就拥有相同的名称。在派生类的对象中,同名数据成员在内存中同时拥有多个副本,同一个成员函数会有多个映射,出现二义性,因此,C++将共同基类设置为虚基类。虚基类使得从不同的路径继承过来的同名数据成员在内存中只有一个副本,同一个函数也只有一个映射。这样不公解决了二义性的问题,也节省了内存,避免了数据不一致的问题。1.9习题9解答

1.(1)将一个函数调用链接上相应函数体的代码,这一过程称为联编(绑定)。(2)C++支持两种多态性:静态多态性和动态多态性。

(3)在编译时就确定的函数调用称为静态联编,它通过使用重载函数实现。(4)在运行时才确定的函数调用称为动态联编,它通过继承和虚函数来实现。(5)虚函数的声明方法是在函数原型前加上关键字virtual。(6)C++的静态多态性是通过重载函数实现的。

(7)C++的动态多态性是通过虚函数实现的。

(8)当通过基类指针使用虚函数时,C++会在与对象关联的派生类中正确地选择重定义的函数。

(9)如果一个类包含一个或多个纯虚函数,则该称为抽象类。

(10)若以非成员函数形式,为类Bounce重载!运算符,其操作结果为bool型数据,则该运算符重载函数的原型是:friend bool operate!(Bounce);2.(1)在C++中::运算符不能被重载。

(2)运算符重载不能改变运算数的个数、优先级、结合性和语法结构。

(3)如果表达式++i*k中的++和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为operator*(operator++(i),k).。

(4)5.0+2.0和2+5两个表达式中的+的意义不相同。(5)有的运算符只能作为成员函数重载。

(6)已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const。

这是运算符-的重载运算符函数;这是一个成员函数;这个函数不改变类的任何数据成员的值。(7)在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

Operator+有一个参数,operator*有两个参数;

(8)在C++中,对象之间的相互通信通过调用成员函数来实现。

(9)Franction operator +(Franction,Franction);Franction &operator =(Franction&,Franction);Franction &operator +=(Franction&, Franction)以上是重载为非成员函数的运算符函数原型。(10)当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中都是虚函数。

(11)纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在任何派生类都必须定义自己的版本。(12)Virtual void vf()=0;这个基类中的成员函数表示纯虚函数。(13)如果一个类至少有一个纯虚函数,那么就称该类为抽象类。

(14)纯虚函数是一种特殊的虚函数,它没有具体的定义;抽象类是指具有纯虚函数的类;抽象类只能作为基类来使用,其纯虚函数的定义同派生类给出。

(15)抽象类的特性――不能定义其对象。

(16)抽象类至少应该含有一个纯虚函数。

(17)类B是类A的公有派生类,类A和类B中都定义了虚函数 fun(), p是一个指向类A对象的指针,则p->A:::func()将调用类A中的函数func()。

(18)在C++中,用于实现运行时多态性的是虚函数。(19)Class A{ Public: Virtual void func1(){} void func2(){} };Class B: public A{ Public: Void func1(){cout<<”class B func1”<

(20)抽象类中的成员函数都是虚函数。

(21)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类。1.10

习题10解答

1.(1)模板是面向对象技术提高软件开发效率的重要手段,是C++语言的重要特征。

(2)类模板是能根据不同参数建立不同类型成员的类。

(3)STL中体现了泛型化程序设计的相思,它提倡使用现有的模板程序代码开发应用程序,是一种代码重用技术。(4)STL(Standard Template Library)是C++提供的标准模板库,它可以实现高效的泛型程序设计。

(5)STL容器包括顺序容器和关联容器利用容器适配器可以将顺序容器转换为新的容器。

(6)顺序容器(sequence container)以逻辑线性排列方式存储一个元素序列,在容器类型中的对象在逻辑上跑旱船认为是在连续的存储空间中存储的。

(7)关联容器(associate container)中的数据元素不存储在顺序的线性数据结构中,它们提供了一个关键字(key)到值的关联映射。

(8)容器适配器就是将某个底层顺序容器转换为另一种容器。即以顺序容器作为数据存储结构,交将其转换为一种某种特定操作特性的新容器。

(9)在STL中,迭代器如同一个特殊的指针(用以指向容器中某个位置的数据元素)。

(10)在STL中函数对象在STL中被广泛用作算法中子操作的参数,使算法变得更加通用。2.(1)类模板的使用实际上是将类模板实例化成一个类。

(2)类模板的模板参数能作为数据成员的类型;可作为成员函数的返回类型;可作为成员函数的参数类型。(3)类模板的实例化在编译时进行。(4)类模板的参数可以有多个。(5)类模板实例化时的实参值可以是0个。当类模板的模板参数均给出了初值时,类模板实例化时可以没有实例。(6)类模板的定义:template (7)类模板:

Template Class Tclass{…}

正确的实例化方式为:Tclass C!;(11)在调用模板函数时模板实参的使用:对于常规参数所对应的模板实参,任何情况下都不能省略。

1.1习题11解答

1.(1)标准输入流对象为cin,与>>(提取操作符)连用,用于输入;cout为标准输出流对象,与<<(插入操作符)连用,用于输出。

(2)用标准输入流对象cin与提取操作>>连用进行输入时,将空格与换行当作分隔符,使用getline()成员函数进行输入时可以指定输入分隔符。

(3)头文件iostream中定义了4个标准流对象cin, cout, cerr, clog。

(4)每一个输入/输出流对象都维护一个格式状态字,用它表示汉对象当前的格式状态并控制流的格式。C++提供了使用操纵符与格式状态字,来控制流的格式的方法。

(5)格式控制的成员函数通过流对象调用;操纵符直接用在流中,但使用函数形式的操纵符要包含iomanip头文件。(6)在ios类中,除了提供控制数据流格式标志、操纵符、成员函数,还提供了流的错误侦测函数与错误状态位,用于标识流的状态,常用的错误侦测函数有good(), eof(), fail(), bad()对应的错误状态位为goodbit, eof, bit, failbit, badbit。(7)文件输入是指从文件向内读入数据;文件输出则指从内存向文件输出数据。文件的输入输出首先要建立输入文件流,与打开的文件连接;然后从文件流中读入数据到内存;最后关闭文件流。在打开文件、对文件读写时要使用是否成功的判断来保证文件操作的正确。

(8)文本文件是存储ASSCII码字符的文件,文本文件的输入可用>>(提取操作符)从输入文件流中提取字符实现。文本文件的输出可用<<(插入操作符)将字符插入到输出文件流来实现。

(9)二进制文件是指含ASCII码字符外的数据的文件。二进制文件的输入输出分别采用read()、write()成员函数,这两个成员函数第一个参数的类型分别为char *, const char *, 如果实参类型不符,分别采用reinterpret_cast, reinterpret_cast进行转换。(10)设定、返回文件读指针位置的函数分别为seekg(), tellg();设定、返回文件写指针位置的函数分别为seekp(), tellp()。2.(1)要进行文件的输出,除了包含头文件iostream外,还要包含fstream头文件。(3)char *str;cin>>str;cout<

1.12习题12解答

1.(1)s0是一个string类串,定义串s1的方法有:string s1(s0,0,3);、string s1(“ABC”,0,3);、string s1=”ABC”;、string s1(3,’A’);(2)若char *s0=”12345”, 则有:string s1=s0;string s1(s0);string s1(s0,0,3);(3)求string类串S长度的表达式为:S.length();(4)S为string类对象,则S.size();sizeod(S);S.length();的编译不会出错。

(5)S、T为string类对象,则S=T;S[1]=T[1];S+=T;的编译不会出错。

(6)string s=(“ABCDEF”);char *q =”123456”;string::iterator p=s.begin();则有:p=q;*(p+1)=*(q+1);q[1]=p[1];

1.13

习题13解答 1.(1)运行错属于异常;硬件故障也可当异常抛出;只要是编程者认为是异常的都可以当异常抛出;

(2)throw语句必须在try语句块中直接运行或通过调用函数运行;一个程序中可以有try 语句而没有throw语句;throw语句抛出的异常可以不被捕获。

(3)函数声明 float fun(int a, int b)throw(),表明函数不抛出任何类型异常。(4)catch(….)语句可捕获所有类型的异常;一个try语句可以有多个catch()语句;程序中try语句与catch语句是一个整体,缺一不可。

c语言课后习题解答 篇4

3.1.选择题

(1).D(2).C(3).D(4).C(5).B(6).C(7).C(8).C(9).B(10).B(11).D(12).B(13).D(14).C(15).C(16).C(17).D(18).C(19).C(20).B 3.2.填空题

(1)FILO, FIFO(2)-1, 3 4 X * + 2 Y * 3 /-(3)stack.top, stack.s[stack.top]=x(4)p>llink->rlink=p->rlink, p->rlink->llink=p->rlink(5)(R-F+M)%M(6)top1+1==top2(7)F==R(8)front==rear(9)front==(rear+1)%n(10)N-1 3.3 答:一般线性表使用数组来表示的

线性表一般有插入、删除、读取等对于任意元素的操作 而栈只是一种特殊的线性表

栈只能在线性表的一端插入(称为入栈,push)或者读取栈顶元素或者称为“弹出、出栈”(pop)。

3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。

不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top)删除,一端(rear)插入。3.5 答:可能序列有14种:ABCD;ACBD;ACDB;ABDC;ADCB;BACD;BADC;BCAD;BCDA;BDCA;CBAD;CBDA;CDBA;DCBA。

3.6 答:不能得到4,3,5,6,1,2,最先出栈的是4,则按321的方式出,不可能得到1在2前的序列,可以得到1,3,5,4,2,6,按如下方式进行push(1), pop(), push(2), push(3), pop(), push(4), push(5), pop(), pop(), pop(), push(6), pop()。3.7 答:stack 3.8 非递归: int vonvert(int no,int a[])//将十进制数转换为2进制存放在a[],并返回位数 {

int r;

SeStack s,*p;

P=&s;

Init_stack(p);

while(no)

{

push(p,no%2);

no/=10;

}

r=0;

while(!empty_stack(p))

{

pop(p,a+r);

r++;

}

return r;} 递归算法: void convert(int no){

if(no/2>0)

{

Convert(no/2);

Printf(“%d”,no%2);

}

else

printf(“%d”,no);

} 3.9 参考程序:

void view(SeStack s){

SeStack *p;//假设栈元素为字符型

char c;

p=&s;

while(!empty_stack(p))

{

c=pop(p);

printf(“%c”,c);

}

printf(”n”);} 3.10 答:char 3.11 参考程序:

void out(linkqueue q){ int e;while(q.rear!=q.front){ dequeue(q,e);

print(e);//打印

}

}

数字信号处理习题解答 篇5

第1-2章:

1.判断下列信号是否为周期信号,若是,确定其周期。若不是,说明理由(1)f1(t)= sin2t + cos3t

(2)f2(t)= cos2t + sinπt

2、判断下列序列是否为周期信号,若是,确定其周期。若不是,说明理由

(1)f1(k)= sin(3πk/4)+ cos(0.5πk)

(2)f2(k)= sin(2k)(3)若正弦序列x(n)=cos(3πn /13)是周期的, 则周期是N=

3、判断下列信号是否为周期信号,若是,确定其周期;若不是,说明理由

(1)f(k)= sin(πk/4)+ cos(0.5πk)

(2)f2(k)= sin(3πk/4)+ cos(0.5πk)解

1、解 β1 = π/4 rad,β2 = 0.5π rad 由于2π/ β1 = 8 N1 =8,N2 = 4,故f(k)为周期序列,其周期为N1和N2的最小公倍数8。

(2)β1 = 3π/4 rad,β2 = 0.5π rad 由于2π/ β1 = 8/3 N1 =8,N2 = 4,故f1(k)为周期序列,其周期为N1和N2的最小公倍数8。

4、画出下列函数的波形(1).(2).解 f1(t)tu(t1)

f2(t)u(t)2u(t1)u(t2)

5、画出下列函数的波形

x(n)=3δ(n+3)+δ(n+1)-3δ(n-1)+2δ(n-2)

6.离散线性时不变系统单位阶跃响应g(n)8

nu(n),则单位响应h(n)=?

h(n)g(n)g(n1)8nu(n)8n1u(n1)

7、已知信号为fs(200)Hz。

f(t)5cos(200t),则奈奎斯特取样频率

38、在已知信号的最高频率为100Hz(即谱分析范围)时,为了避免频率混叠现象,采样频率 最少要200 Hz:

9.若信号f(t)的最高频率为20KHz,则对该信号取样,为使频谱不混叠,最低取样频率是40KHz

10、连续信号:xa(t)5sin(2*20*t3)用采样频率fs100Hz 采样,写出所得到的信号序列x(n)表达式,求出该序列x(n)的最小周期

解:T10.01,x(n)xa(nT)5sin(0.4n)

3fs2 N025 0.4

11、连续信号:xa(t)Acos(80t3)用采样频率fs100Hz 采样,写出所得到的信号序列x(n)表达式,求出该序列x(n)的最小周期长度。解:T10.01,x(n)xa(nT)Acos(0.8n)

3fs25;N5 0.82 2012、设系统的单位取样响应

h(n)u(n),输入序列为

x(n)(n1),求系统输出序列y(n)

y(n)x(n)*h(n)u(n)*(n1)u(n1)

n解:

13、设系统的单位取样响应h(n)au(n),0a1,输入序列为 x(n)(n)2(n2)

完成下列各题:

y(n);(2)分别求出x(n)、h(n)和y(n)的Z变换。

(1)求出系统输出序列

解:y(n)h(n)*x(n)anu(n)*[(n)2(n2)]=anu(n)+2an2u(n2)X(z)n[(n)2(n2)]zn12z H(z)2nau(n)znnanznn01 11az12zY(z)H(z)X(z)1az1

14、设系统的单位取样响应

h(n)u(n),输入序列为

x(n)(n2),求系统输出序列y(n)

y(n)x(n)*h(n)u(n)*(n2)u(n2)

解:

15、离散时间单位延迟器的单位响应为(k1)

16、线性时不变系统,输入为 x(n)时,输出为y(n); 则输入为9x(n-23)时,输出是9y(n-23)

17、求x(n)cn的z变换(1nnc

1)解 X(z)nx(n)znnnnczcz

n0 X1(z)cnznn011cz1cz1czzc

z1

c X2(z)nc1nznc1,sk|h(k)||a|k0k则存在公共的收敛区域X(z)1cz1

,cz11cz1czc的线性时不变系统 18、分析单位脉冲响应为h(k)aku(k),的因果性和稳定性。

解:1)因为 k0时,h(k)=0,因此系统是因果的

2)如果 |a|<1, 则 s1 故系统是稳定的1|a|

如果 |a|≥1 , 则s → ∞,级数发散。故系统仅在|a|<1时才是稳定的

19、分析单位脉冲响应为h(k)0.5ku(k),的线性时不变系统 的因果性和稳定性。

解:1)因为 k0时,h(k)=0,因此系统是因果的 2)skh(k)0.5k0k12,10.故系统是稳定的nx(n)au(n),0a1 的DTFT求序列解

X(e)aejn0njn(aen0jn1)1aej)=|H(e)|e

jθ(ω)

21、如果信号的自变量和函数值都取 __ ____值,则称为数字信号。离散 22.数字滤波器的频率响应函数可表示为H(e

。式中,|H(ejω)|称为 函数,θ(ω)称为 函数。幅频特性,相频特性

23、因果稳定(可实现)系统的系统函数H(z)收敛域一定包含∞点,即∞点不是极点,极点分布在某个圆(),收敛域在某个圆()。

24、已知线性因果网络用下面差分方程描述:

y(n)0.9y(n1)x(n)0.9x(n1)

(1)求系统函数H(z);(2)写出H(ej)

解:(1)y(n)0.9y(n1)x(n)0.9x(n1)

对方程两边进行z变换,得Y(z)0.9Y(z)z1X(z)0.9X(z)z1

H(z)

第3--5章: Y(z)10.9z(2)X(z)10.9z1110.9ejH(e)H(z)|zej

10.9ejj1.求序列 x(n)(n),0nN1的DFT

nkX(k)DFT[x(n)]x(n)WNN1n0解

nk(n)WN1,1kN1n0N1

2.求序列x(n)an(0nN1)的DFT

N1n0nkX(k)DFT[x(n)]x(n)WN解nkanWNn0N1kN1(aWN)1aN1,1kN1kk1aWN1aWN

3.求有限长序列x(n)=cos(nπ解:由DFT的定义

/6)(0n11)的N点DFT

nkj2e12nnjnnk111j6X(k)cosW12ee66n0n02111e2n0112jn(k1)12en0112jn(k1)12

利用复正弦序列的正交特性, 再考虑到k的取值区间,6k1,11可得X(k)

0 elsek,k[0,11].按基-2 FFT算法 , N=16的时间抽取法的 FFT运算 流图中,从x(n)到X(k)需(4)级蝶形运算过程。5.按基-2 FFT算法 , N=64的时间抽取法的 FFT运算 流图中,从x(n)到X(k)需(6)级蝶形运算过程。

6.序列x1(n)的长度为8,序列x2(n)的长度为16,则它们线性卷积的长度是(23),要使圆周卷积等于线性卷积而不产生混叠的必要条件为圆周卷积的长度(≥ 23)7.设有限长(N=4)序列为:x(n)=2δ(n)-δ(n-1)+3δ(n-2)+δ(n-3),X(k)=DFT[x(n)]N, 试计算(1)X(k)k-0(2)X(N22)(3)X(k)(4)|X(k)|。

k0N1N1k0解:(1)X(0)x(n)WN0x(n)5

n0n0N1N1N1N1NnN/2(2)X()x(n)WNx(n)(1)n5

2n0n0

N11N11N10(3)x(0)X(k)WNX(k),故X(k)Nx(0)8

Nk0Nk0k0

(4)由离散帕塞瓦尔定理,得 X(k)2Nx(n)260

k0n0N1N

18、数字滤波器从实现的网络结构或者从单位脉冲响应长度分类,可以分成(无限长单位脉冲响应(IIR))滤波器和(有限长单位脉冲响应(FIR))滤波器。

9.无限长单位脉冲响应(IIR)数字滤波器的两种常用设计方法是冲激响应不变法和双线性 变换法.冲激响应不变法的优点是频率变换关系是线性的,即ω=ΩT;冲激响应不变法的最大缺点会产生不同程度的 频率混叠失真。

10.采用按时间抽取的基-2 FFT算法计算N=1024点DFT,需要计算()次复数加法,需要()次复数乘法。1024*10,512*10 11.设模拟滤波器的系统函数为

H(s)211s26s8s2sT=2s

试利用双线性变换法,设计IIR数字滤波器H(z)。

解:利用双线性变换法

C=2/T=1

1z1H(z)H(c)11z111z11z1 2411z1z11z11z113z53z112、有一频谱分析仪用的FFT处理器,其抽样点数必须是2的整数幂。假定没有采用任何特殊的数据处理措施,已给条件为:(1)频率分辨力≤10Hz(2)信号的最高频率≤4kHz试确定以下参量:(1)最小记录长度Tp;(2)抽样点的最大时间间隔T;(3)在一个记录中的最少点数N。

解:(1)由分辨力的要求确定最小记录长度Tp.Tp=1/F=1/10=0.1(s)故最小记录长度为0.1秒。

(2)从信号的最高频率确定最大的抽样时间间隔T.fs≥2fh, T=1/fs ≤1/2fh=0.125*10-3(s)(3)最小记录点数N,它应满足N≥2fh /F=800

13、对实信号进行谱分析,要求谱分辨率F ≤10 Hz,信号最高频率fc=2.5 kHz,试确定:

(1)最小记录时间Tpmin;(2)最大的采样间隔Tmax;(3)最少的采样点数Nmin。

14、频率分辨率与信号实际长度成 比,信号越长,其分辨率越。反,高。

15.由RC组成的模拟滤波器系统函数为Ha(s)1 s1(1)采样间隔T=2s,试用双线性不变法将该模拟滤波器Ha(s)转换成数字滤波器H(z);

(2)求出H(z)对应的序列h(n);

(3)判断系统H(z)的稳定性与类型(IIR、FIR)

解:(1)H(z)Ha(s)sc1z11z1110.50.5z

1s1sc1z11z(2)h(0)=0.5, h(1)=0.5

(3)FIR,稳定

上一篇:学校信息技术工作规划下一篇:计算机教学论文:PBL教学法在数据库原理教学中的应用