第3章程序与递归组合抽象与构造练习题答案解析.docx

上传人:b****1 文档编号:22793961 上传时间:2023-04-28 格式:DOCX 页数:22 大小:46.38KB
下载 相关 举报
第3章程序与递归组合抽象与构造练习题答案解析.docx_第1页
第1页 / 共22页
第3章程序与递归组合抽象与构造练习题答案解析.docx_第2页
第2页 / 共22页
第3章程序与递归组合抽象与构造练习题答案解析.docx_第3页
第3页 / 共22页
第3章程序与递归组合抽象与构造练习题答案解析.docx_第4页
第4页 / 共22页
第3章程序与递归组合抽象与构造练习题答案解析.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第3章程序与递归组合抽象与构造练习题答案解析.docx

《第3章程序与递归组合抽象与构造练习题答案解析.docx》由会员分享,可在线阅读,更多相关《第3章程序与递归组合抽象与构造练习题答案解析.docx(22页珍藏版)》请在冰豆网上搜索。

第3章程序与递归组合抽象与构造练习题答案解析.docx

第3章程序与递归组合抽象与构造练习题答案解析

第3章程序与递归:

组合、抽象与构造

1、关于计算系统与程序,下列说法正确的是_____。

(A)只有用计算机语言编写出来的代码才是程序,其他都不能称其为程序;

(B)构造计算系统是不需要程序的,程序对构造计算系统没有什么帮助;

(C)任何系统都需要程序,只是这个程序是由人来执行还是由机器自动执行,可以由机器自动执行程序的系统被称为计算系统;

(D)程序是用户表达的随使用者目的不同而千变万化的复杂动作,不是使用者实现的而是需要计算系统事先完成的。

 

答案:

C

解释:

本题考查程序,计算系统等的概念;

(A)程序=基本动作指令的一个组合或执行序列,用以实现复杂的动作,只用计算机语言编写出来的代码称为程序,这个概念太狭隘了,A错误;(B)计算系统的一部分是由程序组成的,所以B错误;(C)计算系统=基本动作+指令+程序执行机构,任何系统都需要系统,C完全正确;(D)程序=基本动作指令的一个组合或执行序列,用以实现复杂的动作,并不是由用户表达的,随使用者的不同而千变万化的复杂动作。

所以D是错的;

具体内容参考第三章视频之“程序的作用和本质”及第三章课件。

2、关于程序,下列说法不正确的是_____。

(A)“程序”是由人编写的、以告知计算系统实现人所期望的复杂动作;

(B)“程序”可以由系统自动解释执行,也可以由人解释由系统执行;

(C)普通人是很难理解“程序”的,其也和“程序”无关;

(D)“程序”几乎和每个人都有关系,如自动售票系统、自动取款机等。

 

答案:

C

解释:

本题考查程序的概念;

程序=基本动作指令的一个组合或执行序列,用以实现复杂的动作,所以A,B,D都是正确的;C说普通人很难理解程序,这显然是错误的。

所以选C;

具体内容参考第三章视频之“程序的作用和本质”及第三章课件。

3、关于程序,下列说法不正确的是_____。

(A)程序的基本特征是复合、抽象与构造;

(B)复合就是对简单元素的各种组合,即将一个(些)元素代入到另一个(些)元素中;

(C)抽象是对各种元素的组合进行命名,并将该名字用于更复杂的组合构造中;

(D)程序就是通过组合、抽象、再组合等构造出来的;

(E)上述说法有不正确的。

 

答案:

E

解释:

本题考查程序的概念;

(A)程序的特征即是:

组合-抽象-构造,所以A正确;(B)复合即是将简单的基本动作指令组合起来,实现复杂动作。

B正确;(C)抽象:

将经常使用的、可由低层次系统实现的一些复杂动作,进行命名,以作为高层次系统的指令被使用,C正确;(D)通过前面三个选项可知,程序就是通过组合,抽象,再组合这样构造出来的。

综上可知E不正确。

具体内容参考第三章视频之“程序的作用和本质”及第三章课件。

4、一般而言,设计和实现一个计算系统,需要设计和实现_____。

(A)基本动作和程序;

(B)基本动作和控制基本动作的指令;

(C)基本动作、控制基本动作的指令和一个程序执行机构;

(D)基本动作、控制基本动作的指令和程序。

 

答案:

C

解释:

本题考查计算系统的概念;

计算系统=基本动作+指令+程序执行机构,所以ABC都描述不完整,只有C正确;

具体内容参考第三章视频之“程序的作用和本质”及第三章课件。

5、一般而言,一个较高抽象层次的计算系统是可以这样实现的,即_____。

(A)将较低抽象层次的重复性组合,命名为较高抽象层次的指令;

(B)利用较高抽象层次的指令进行复合、抽象与构造,即形成高抽象层次的程序;

(C)高抽象层次的程序通过其程序执行机构解释为高抽象层次的指令及其操作次序;

(D)高抽象层次的指令被替换为低抽象层次的程序,再由低抽象层次的程序执行机构解释并执行。

(E)上述A-D全部。

 

答案:

E

解释:

本题考查计算系统的概念;

(A)抽象:

将经常使用的、可由低层次系统实现的一些复杂动作,进行命名,以作为高层次系统的指令被使用,所以,A正确;(B)程序本身即是复合,抽象,构造的过程,B正确;(C)(D)的描述都完全正确;所以综上所述,应该选E;

具体内容参考第三章视频之“程序的作用和本质”及第三章课件。

6、熟悉下列运算组合式(前缀表达式),其中结果为56的是_____。

(A)(*7(+52));

(B)(*(+53)(+52));

(C)(+20(+66));

(D)(-(*98)(-202))。

 

答案:

B

解释:

本题考查基本运算组合式的构造与计算,尤其是嵌套的运算组合式的计算

对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个“数字串”作相应的运算,以此作为一个新的“数字串”并记录下来。

一直扫描到表达式的最左端时,最后运算的值也就是表达式的值。

所以,(A)的中缀表达式7*(2+5)=49;(B)(3+5)*(2+5)=56;所以选B;(C)20+(6+6)=32;(D)(9*8)-(20-2)=54;所以答案选B;

具体内容参考第三章视频之“程序构造示例(I)”及第三章课件。

7、对于计算式

,其正确的运算组合式(前缀表示法)为_____。

(A)(/(+10/20+84)(+*36*82));

(B)((10+(20/(8+4)))/((3*6)+(8*2)));

(C)(/(+10(/20(+84)))(+(*36)(*82)));

(D)(/(/20(+10(+84)))(*(+36)(+82)))。

 

答案:

C

解释:

本题考查运算组合式的书写与构造

对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个“数字串”作相应的运算,以此作为一个新的“数字串”并记录下来。

一直扫描到表达式的最左端时,最后运算的值也就是表达式的值。

我们可以将答案中的四个选项都转化成中缀表达式,发现C完全符合题意;

具体内容参考第三章视频之“程序构造示例(I)”及第三章课件。

8、请用define运算,定义一个过程实现计算a3,其正确定义的过程为_____。

(A)(definecubea(*aaa));

(B)(define(cubex)(*xxx));

(C)(define(cubea(*aaa)));

(D)(define(cubea)(*xxx)))。

 

答案:

B

解释:

本题考查新运算符(即过程)的定义

(cubex)中,cube是新运算符,x是形式参数,使用时将被实际参数替代。

(*xxx)是过程体,用于表示新运算符的具体计算规则,其为关于形式参数x的一种计算组合。

所以综上所述应选择B,满足条件;

具体内容参考第三章视频之“程序构造示例(II)”及第三章课件。

9、已知一个新运算被定义为(define(newCalcxy)(*(+x1)(*y2))),问newCalc可以完成的计算功能为_____。

-

(A)(x+1)+2y;

(B)(x+1)*2y;

(C)(x+1)+(y+2);

(D)(x+1)*(y+2)。

 

答案:

B

解释:

本题考查新运算符(即过程)的定义

此题是定义了个一个有关x和y的心运算newCale,后面(*(+x1)(*y2))转化成中缀表达式:

即为(x+1)*2y,所以选B;

具体内容参考第三章视频之“程序构造示例(II)”及第三章课件。

10、已知一个新运算被定义为(define(newCalcxy)(*(+x1)(*y2))),问正确使用了newCalc并得到正确结果的为_____。

(A)((newCalc)(45)),其结果为50;

(B)(newCalc4),其结果为40;

(C)(newCalc45),其结果为50;

(D)(newCalc23),其结果为21。

 

答案:

C

解释:

本题考核新运算符(即过程)的定义和使用。

本题定义的新运算是(x+1)*(y*2)。

(A)和(B)使用方法不正确;(C)将x=4,y=5代入新运算得50,所以是正确的;(D)将x=2,y=3代入新运算得18,是错误的。

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

11、已知一个新运算被定义为(define(newCalcxy)(*(+x1)(+y1))),问(newCalc(newCalc(newCalc11)2)3)的计算结果为_____。

(A)6;(B)13;(C)64;(D)24。

 

答案:

C

解释:

本题考核新运算符(即过程)的定义和嵌套使用。

本题定义的新运算是(x+1)*(y+1)。

先计算最里层的(newCalc11)=(1+1)*(1+1)=4;再计算(newCalc(newCalc11)2)=(newCalc42)=(4+1)*(2+1)=15;最后计算(newCalc(newCalc(newCalc11)2)3)=(newCalc153)=(15+1)*(3+1)=64,即最终结果是64,所以(C)是正确的。

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

12、已知一个新运算被定义为(define(newCalcxy)(*(+x1)(+y1))),问(newCalc(newCalc(newCalc11)(newCalc11))(newCalc11))的计算结果为_____。

(A)1;(B)64;(C)130;(D)8。

 

答案:

C

解释:

本题考核新运算符(即过程)的定义和嵌套使用。

本题定义的新运算是(x+1)*(y+1)。

先计算(newCalc11)=(1+1)*(1+1)=4;再计算(newCalc(newCalc11)(newCalc11))=(newCalc44)=(4+1)*(4+1)=25;最后计算(newCalc(newCalc(newCalc11)(newCalc11))(newCalc11))=(newCalc254)=(25+1)*(4+1)=130,即最终结果是130,所以(C)是正确的。

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

13、已知一个运算被定义为(define(firstCalcx)(*xx)),在其基础上进一步定义新运算secondCalc为x2+y2+z2,下列运算组合式书写正确的是_____。

(A)(definesecondCalc(+(firstCalcx)(firstCalcy)(firstCalcz)));

(B)(define(secondCalcxyz)(+firstCalcxyz));

(C)(define(secondCalcxyz)(+(firstCalcx)(firstCalcy)(firstCalcz)));

(D)(definesecondCalcxyz(+(firstCalcx)(firstCalcy)(firstCalcz)))。

(E)(define(secondCalcxyz)(+(firstCalcx)(firstCalcx)(firstCalcx)))。

 

答案:

C

解释:

本题考核新运算符(即过程)的定义,以及形式参数的使用。

本题首先定义的新运算是(firstCalcx)=x2,最终要定义的新运算是x2+y2+z2,只需要将(firstCalcx)、(firstCalcy)和(firstCalcz)这三项加起来即可。

其中(A)选项定义的新运算符secondCalc后没有跟参数,错误;(B)选项调用运算(firstCalcx)时错误;(C)选项正确;(D)选项secondCalcxyz没有加括号;(E)选项后面的运算是x2+x2+x2,错误。

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

14、已知一个运算被定义为(define(firstCalcx)(*xx)),在其基础上进一步定义新运算为(define(secondCalcx)(firstCalc(firstCalc(firstCalcx)))),问secondCalc表达的运算功能为_____。

(A)x*x*x;

(B)x2+x2+x2;

(C)((x2)2)2;

(D)x4。

 

答案:

C

解释:

本题考核新运算符(即过程)的定义和嵌套使用。

本题首先定义的新运算是(firstCalcx)=x2,下面计算进一步定义的新运算secondCalc,从最里层开始计算(firstCalcx)=x2,然后计算(firstCalc(firstCalcx))=(firstCalcx2)=(x2)2,最后计算(firstCalc(firstCalc(firstCalcx)))=(firstCalc(x2)2)=((x2)2)2,所以(C)选项是正确的。

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

15、用条件运算符定义一个过程

正确的定义为_____。

(A)(define(fxy)(cond((x>y)(*xxx))

((x=y)0)

((x

(B)(define(fxy)(cond((>xy)(*xxx))

((=xy)0)

((

(C)(define(fxy)(cond((x>y)(x*x*x))

((x=y)0)

((x

(D)(define(fxy)(cond((

((=xy)0)

((>xy)(*yyy))))。

 

答案:

B

解释:

本题考核条件运算符的使用及分支处理。

(A)选项,条件书写错误,应该用前缀表示法,即运算符在前面;(B)选项正确;(C)选项,条件和表达式都书写错误,应该用前缀表示法,而选项中用的是中缀表示法;(D)选项,条件书写错误,把x>y和x

具体内容请参考第三章课件之“程序构造示例”及第三章课件。

16、用条件运算符定义一个过程

正确的定义为_____。

(A)(define(fn)(cond((n<2)1)

((n>1)(n*f(n-1)))

(B)(define(fn)(cond((

((>n1)(*n(f(-n1))))));

(C)(define(fn)(cond((n<2)1)

((n>1)(n*f(n-1)))));

(D)(define(fn)(cond((

((>n1)(*n(fn-1)))))。

 

答案:

B

解释:

本题考核递归过程的定义。

(A)选项,首先条件书写错误,其次n>1时,表达式书写错误,最后右括号数目不够;(B)选项正确;(C)选项,首先条件书写错误,其次n>1时,表达式书写错误;(D)选项,调用f(n-1)时书写错误。

具体内容请参考第三章视频之“运用递归和迭代”及第三章课件。

17、若要表达从1计算到n的运算组合式,(*…(*(*(*(*11)2)3)4)…n)

定义一个过程。

正确的定义为_____。

(A)(define(fproductcountermax-count)

(f(*counterproduct)(+counter1)max-count));

(B)(define(fproductcountermax-count)

(cond((>countermax-count)product)

((<=countermax-count)(f(counter*product)(counter+1)max-count))));

(C)(define(fproductcountermax-count)

(cond((>countermax-count)product)

((<=countermax-count)(f(*counterproduct)(+counter1)max-count))));

(D)(define(fproductcountermax-count)

(cond((>countermax-count)product)

((<=countermax-count)(fproductcountermax-count))));

 

答案:

C

解释:

本题考核迭代过程的定义。

本题需要计算1*2*3*---*n,选项中product表示每次迭代的结果,counter表示本次迭代要相乘的数,max-count即n,在每次迭代中,要把product*counter赋给product,把counter+1赋给counter。

(A)选项,没有结束条件,会一直迭代下去;(B)选项,(f(counter*product)(counter+1)max-count)没有用前缀表示法;(C)选项正确,计算1*2*3*---*n即(define(f11n));(D)选项,当counter<=max-count时,表达式错误。

具体内容请参考第三章视频之“运用递归和迭代”及第三章课件。

18、关于原始递归函数的理解,下列说法不正确的是_____。

(A)“复合”即是将一组函数g1,g2,…,gn作为参数代入到另一函数f(x1,x2,…,xn)中,即n个函数g1,g2,…,gn被组合到了一起,是按函数f的形式进行的组合。

(B)“原始递归”即是要定义h(0),h

(1),…,h(n),h(n+1),其中h(0)需要直接给出,而h(n+1)需要用h(n)进行定义,即h(n+1)是将h(n)和n复合在一起。

(C)复合是构造新函数的一种手段,原始递归也是构造新函数的一种手段;

(D)递归函数是描述程序组合与构造问题的一种数学形式。

(E)上述说法有不正确的。

 

答案:

E

解释:

本题考核对原始递归函数的理解。

(A)、(B)、(C)和(D)的说法都是正确的,所以(E)选项错误。

具体内容请参考第三章视频之“原始递归”及第三章课件。

19、按原始递归的定义,h是由f和g递归地构造出来的。

假设已知h(n)=n!

,请给出构造h的f和g的函数。

正确的是_____。

(A)f()是常数为1的函数;g(x1,x2)=x1*x2。

(B)f()是常数为1的函数;g(x1,x2)=x1*(x2+1)。

(C)f()是常数为1的函数;g(x1,x2)=(x1+1)*(x2+1)。

(D)f()是常数为1的函数;g(x1)=n*(x1)。

 

答案:

B

解释:

本题考核原始递归的定义,当f()是常数为1的函数,若g(x1,x2)=x1*x2。

则h(n)=1;若g(x1,x2)=x1*(x2+1)。

则h(n)=n!

;若g(x1,x2)=(x1+1)*(x2+1)。

递归从2开始;若g(x1)=n*(x1)。

h(n)为N的N次方;所以B选项正确。

具体内容请参考“递归的概念’及第三章课件。

20、已知f(x)=x,g(x1,x2,x3)=x1+x2+x3,其中x,x1,x2,x3均为自然数,新函数h可递归的构造如下:

h(0,x)=f(x),且h(S(n),x)=g(h(n,x),n,x),请按递归式进行计算下列式子,正确的是_____。

(A)h(1,x)=x;

(B)h(2,x)=2x;

(C)h(3,x)=3x+1;

(D)h(4,x)=5x+6;

(E)上述都不正确。

 

答案:

D

解释:

本题考核递归。

h(0,x)=f(x)=x

h(1,x)=h(S(0),x)=g(h(0,x),0,x)=g(f(x),0,x)=f(x)+0+x=2x

h(2,x)=h(S

(1),x)=g(h(1,x),1,x)=g(g(f(x),0,x),1,x)=g(2x,1,x)=3x+1

h(3,x)=h(S

(2),x)=g(h(2,x),2,x)=g(g(h(1,x),1,x),2,x)=g(g(g(h(0,x),0,x),1,x),2,x)

=…=4x+3

h(4,x)=h(S(3),X)=g(h(3,X),3,x)=......=5x+6;

所以选D;

具体内容请参考“原始递归函数构造’及第三章课件。

21、已知f(x)=5,g(x1,x2,x3)=x1,其中x,x1,x2,x3均为自然数,新函数h可递归的构造如下:

h(0,x)=f(x),且h(S(n),x)=g(h(n,x),n,x),请按递归式进行计算下列式子,正确的是_____。

(A)h(1,x)=5;

(B)h(2,x)=5+x;

(C)h(3,x)=5+2x;

(D)h(4,x)=5+3x;

(E)上述都不正确。

 

答案:

A

解释:

本题考核递归。

h(1,x)=h(S(0),x)=g(h(0,x),0,x)=g(f(x),0,x)=f(x)=5;

h(2,x)=h(S

(1),x)=g(h(1,x),1,x)=g(g(f(x),0,x),1,x)=g(5,1,x)=5;

h(3,x)=h(S

(2),x)=g(h(2,x),2,x)=g(g(h(1,x),1,x),2,x)=g(g(g(h(0,x),0,x),1,x),2,x)

=…=5;

h(4,x)=h(3,x)=...=5;所以选A;

具体内容请参考“原始递归函数构造’及第三章课件。

22、已知f(x)=x,g(x1,x2,x3)=x1*(x2+1),其中x,x1,x2,x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1