程序设计理论各年试题参考答案.docx

上传人:b****8 文档编号:23967912 上传时间:2023-05-23 格式:DOCX 页数:18 大小:78.14KB
下载 相关 举报
程序设计理论各年试题参考答案.docx_第1页
第1页 / 共18页
程序设计理论各年试题参考答案.docx_第2页
第2页 / 共18页
程序设计理论各年试题参考答案.docx_第3页
第3页 / 共18页
程序设计理论各年试题参考答案.docx_第4页
第4页 / 共18页
程序设计理论各年试题参考答案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

程序设计理论各年试题参考答案.docx

《程序设计理论各年试题参考答案.docx》由会员分享,可在线阅读,更多相关《程序设计理论各年试题参考答案.docx(18页珍藏版)》请在冰豆网上搜索。

程序设计理论各年试题参考答案.docx

程序设计理论各年试题参考答案

程序设计理论各年试题参考答案

Madeby林祺颖

试题预测(这些为本人意见,仅供参考):

题目前有#为考试必考内容,即类似的题目一定会出,一定要灵活掌握。

题目前没有符号的为可能考内容,一定要知道怎样做。

题目前有*符号的为基本不考内容,浏览一下即可。

答案参考(如有任何补充或者感觉不对的地方,一定要向我提出来噢):

黑色的为个人感觉没有问题的部分,如果发现有错误,那一定要跟我说。

红色的为个人感觉可以修改或者不确定,甚至不太会做的部分,大家一起讨论。

绿色的为提示或者需要注意的部分。

联系方式:

在群上找林祺颖,或者加QQ:

1238260,我基本都在。

下面有些符号为了录入方便,都作了一些替代,标准符号可要看书。

如ω用w代替。

程序设计理论试题2004年01月06日

该卷答案基本是一个师兄做的,红色为我补充的部分

1.Showthat(P(Nat),

)isnotaWell-foundedSet,but({S|SisafinitesubsetofNat},

)isawell-foundedset

解释:

P(Nat)为自然数集合的集合。

即Nat的PowerSet。

取第1个集合为Nat,第2个集合为Nat-{1},。

第n个集合为Nat-{1,2,..n-1},则可以产生一个infinitedescendingsequence(无穷递降序列),所以(P(Nat),

)不是Well-foundedSet.

设T={S|SisafinitesubsetofNat},若(T,

)不是Well-foundedSet,则必然存在一个infinitedescendingsequence,设为a1,a2,…,an…,则a1

a2

an

…,从而|a1|>|a2|>…>|an|….,

因为ai属于T(i>=1),即ai是一个有限集,所以|ai|是一个有限的自然数,|ai|不能形成一个无限下降的序列,矛盾,所以(T,

)是Well-foundedSet.

2.Showthatforallformulasw1andw2,theformulaw1w2and

w1∨w2andlogically

equivalent.

证明w1w2与

w1∨w2逻辑等价,即是要证明|=w1w2

w1∨w2.对于任意的InterpretationI,I(w1w2

w1∨w2)(σ)等价于I(w1)(σ)I(w2)(σ)

I(w1)(σ)∨I(w2)(σ),因为w1,w2:

∑Bool,所以I(w1)(σ)=true或者I(w1)(σ)=false,I(w2)(σ)=true或者I(w2)(σ)=false。

若I(w1)(σ)=true,I(w2)(σ)=true,则I(w1w2

w1∨w2)(σ)=(truetrue

true∨true)=true;其余三种情况类似地也有I(w1w2

w1∨w2)(σ)=true.

所以|=w1w2

w1∨w2,从而w1w2与

w1∨w2逻辑等价。

*3.Considerevaluationofthelogicexpressionswithonlyoperators&&,|and||inCprogramminglanguage.ConstructanabstractmachineforevaluationoftheexpressionsandtrytodefinethemeaningfunctionM(e):

foranygivenexpressione.

这题不会写。

师兄也没给出答案。

^_^

题目意思是,对于一个只有&&,|,||操作的C语言逻辑表达式,建立起抽象机,并且给出对于给定的表达式e,给出对应的meaningfunctionM(e):

的定义

#4.Presentthepartialorder(

)graphically.Howmanyelementsdoesithave?

Howmanyelementsaremaximal?

这是一个定义在由Boolω映射到Boolω的函数的偏序集。

并且是具有<=关系,所以某些映射是不能成立的,如{(ω,ture),(true,ω)..}

Boolω

Boolω共有11个元素,用ai(1<=i<=11)表示如下:

a1:

{(ω,ω),(true,ω),(false,ω)}a2:

{(ω,ω),(true,ω),(false,true)}

a3:

{(ω,ω),(true,ω),(false,false)}a4:

{(ω,ω),(true,true),(false,ω)}

a5:

{(ω,ω),(true,true),(false,true)}a6:

{(ω,ω),(true,true),(false,false)}

a7:

{(ω,ω),(true,false),(false,ω)}a8:

{(ω,ω),(true,false),(false,true)}

a9:

{(ω,ω),(true,false),(false,false)}

a10:

{(ω,true),(true,true),(false,true)}

a11:

{(ω,false),(true,false),(false,false)}

a5

a2a6

a3a8

a1

a4a10

a7a11

a9

共有4个极大元。

#5.Designalogicprogramwithanequivalentmeaningasthefollowingfunctionalprogram:

F(x)

if(x=0)then1elsex*F(x-1)fi.

WriteoutthecomputationsequenceofthefunctionalprogramforcomputingF

(2).Constructaderivation(refutation)forthesamecomputationforthelogicprogram.

(a)函数程序计算序列:

F

(2)=>(if2=0then1else2*F(2-1)fi)

=>(iffalsethen1else2*F

(1)fi)(2=0,false),(2-1,1)

=>2*F

(1)(iffalsethen1else2*F

(1)fi,2*F

(1))

=>2*(if1=0then1else1*F(1-1)fi)

=>2*(iffalsethen1else1*F(0)fi)(1=0,false),(1-1,0)

=>2*(1*F(0))(iffalsethen1else1*F(0)fi,1*F(0))

=>2*(1*1)(F(0),1)

=>2(2*(1*1),2)

(b)对应逻辑程序如下:

F(0,1).

F(x,n)F(x-1,m),n=x*m

目标是F(2,x)

这里要注意,最后会出现不为空的情况(即不是Refutation),有一种理解是具有默认的式子:

true:

-.另一种是需要加式子m:

-

(c)逻辑程序的derivation:

GPθ

F(2,x)F(x1,n1)F(x1-1,m1),n1=x1*m1{x1/2,n1/x}

=>F(1,m1),x=2*m1F(x2,n2)F(x2-1,m2),n2=x2*m2{x2/1,n2/m1}

=>F(0,m2),m1=1*m2,x=2*m1F(0,1){m2/1}

=>m1=1*m2,x=2*m1

=>m1=2,x=4

=>再根据true:

-和替换(m1/2,x/4),可以归到□。

 

6.GiveanexampleofafunctionalprogramforwhichthesemanticfunctionalΦistheidentityfunction.Explainwhy?

假设在UsualInterpretationI=(Nat,I0)下,定义函数程序为:

F(x)<=F(x)

则指称语义函数Φ:

[NatωNatω][NatωNatω],定义为

Φ(F)=[λF.[λx.F(x)]]

下面证明Φ是恒等函数,即对于任意的f,都有Φ(f)=f.

在InterpretationI下,对于任意的f∈[NatωNatω],和任意的n∈Natω,都有

Φ(f)(n)=I([λF.[λx.F(x)]])(γ[F/f][x/n]),即

Φ(f)(n)=ω,n=ω;

=f(n)n≠ω;

所以对于任意的n∈Natω,如果n=ω,则Φ(f)(n)=ω=f(n),如果n≠ω,也同样有Φ(f)(n)=f(n),所以Φ(f)=f,即Φ是恒等函数

 

#7.Givetheformaldefinitionofprogrampartialcorrectnessintermsofformulawlp(α,p),whereαisapathinthegivenprogram.

这题首先必须要加入这个:

Partialcorrectness就是指对于输入q,ifM(S)isdefinedandI(p)(M(S)(σ))=truethenI(wlp(α,p))(r)=true

然后下面的内容是wlp和vc的定义,不是该题的重点,是否写上看情况吧。

令B是谓词逻辑的basis,p,q是WFFB的两个公式,S∈

是一个flowchart程序,a=(l0,l1,…lk)是程序S中的一条路径,

(i)根据k的取值递归地定义wlp(a,p)如下:

如果k=0,则定义wlp(a,p)=p;

当k>0时,设β=(l1,l2,…lk),r=wlp(β,p),根据l0处的语句类型,分成两种情况来定义wlp(a,p).

如果是平行的赋值语句,设形式如下所示:

l0:

(x1,x2,…xn):

=(t1,t2,…tn);gotol1;

则定义wlp(a,p)=

;

如果是条件转移语句,设形式如下所示:

l0:

ifethengotolelsegotol’fi;

则定义wlp(a,q)如下:

e

r如果l1=l且l1≠l’

e

r如果l1≠l且l1=l’

(ii)定义partialcorrectness的验证条件vc(p,a,q)为p

wlp(a,q).

令B为谓词逻辑的basis,p,q为WFFB的两个公式,S∈

是一个flowchart程序,对于任意的InterpretationI,程序S在InterpretationI中,对于p和q是partialcorrect的,当且仅当如果对于S中的任意一条路径a,都有验证条件vc(p,a,q)在I中为valid。

#8.ShowthatthefollowingisacorrectinferenceruleinHoarelogicusingconstructionsequencein“InductiveDefinitionofSets”.WhatareBandKinthiscontext?

Andwhatistheinductivelydefinedsetinthecontext?

forallp,q,r∈WFFB,e∈QFFB,andS∈L2B.

设WFFB为well-formedformula的集合

B={{

}x:

=t{p}|p∈WFFB,x∈V,t∈TB}

K={((pr,{r∧e}S{r},(r∧

e)q),{p}whileedoSod{q})|

p,q,r∈WFFB,e∈QFFB,S∈

}

推导出来的集合是Hoarecalculus里面logicallyvalid的公式集的一个子集。

推导过程:

P->r

{r^e}S1{r}

r^

e->q

{r}whileedoS1od{r^

e}

{p}whilerdoS1od{q}

 

程序设计理论试题2000.1.22(即老师的样题)

1.

试指出链S在Natw->Natw上的最小上界。

有些人说论域就是CPO。

对于该题,由于<=为平坦半序,所以每条链都有lub,最小元是w。

所以可以构成CPO。

S的最小上界为:

#2.利用归一算法。

首先找到D1={f(a),x},取θ1={x/f(a)},得Sθ1={p(f(a),g(f(a)),p(f(a),y))

然后找到D2={g(f(a)),y},取θ2={y/g(f(a))},得Sθ1θ2={p(f(a),g(f(a)))

即S可以归一。

且θ=(x/f(a),y/(g(f(a)))

在某份答案中说这是不能归一,这显然是错误的。

这里的答案是正确的。

在老师讲义上说不能归一,课堂上他明确表示第二条式x是a的时候才是不能归一。

现在是可以归一的。

3.二进制数句法:

对于二进制数集合B,有

a.0和1属于B

b.如果a属于B并且a不等于0,则a0,a1属于B。

很多份答案(可能包括老师答案)都没有表示a不等于0,个人感觉是错误的,因为如01,001,这类数不是二进制数。

这些要排除。

对于B,我们给定一个解释I,其中+,*,为自然数中的加法和乘法:

a.φ(0)=0nat,φ(0)=1nat

b.如果a属于B并且a不等于0,则φ(a0)=φ(a)*2nat,φ(a1)=φ(a)*2+1。

c.φ(*)(a,b)=a*b,φ(+)(a,b)=a+b

指称函数:

[λxn…x1x0.xn*2^n+xn-1*2^(n-1)+…+x1*2+x0]

某些答案只写了一个递归的“指称函数”,感觉不对。

#4.S的语义范函为:

ФI(S):

D*D*,具体为:

ФI(S)=I([F.[x.ifx=0then1elsex*F(x-1)fi]])()对任意的赋值I

ФI(S)(f)(n)=I(ifx=0then1elsex*F(x-1)fi)([F/f][x/n])

程序的Meaningfunction

对任意的赋值I,MI(S)=ФI(S)=I([F.[x.ifx=0then1elsex*F(x-1)fi]])()={ФIi(S)()|iNat}

其中

MI(S)(n)=({ФIi(S)()|iNat})(n)=

 

5.设B为谓词逻辑的基,I为基的一个解释,为相应的状态集,S为L1B或L2B的程序,MI(S)为程序的语义函数,谓词:

Bool和:

Bool分别为前置条件和后置条件。

则:

1)程序S和谓词的最弱前置条件是指:

谓词:

Bool,满足()=true当且仅当MI(S)()有定义且(MI(S)())=true。

2)程序S和谓词的最强后置条件是指:

谓词:

Bool,满足()=true当且仅当存在一个状态’使得(’))=true且MI(S)(’)=。

 

#6.对于基B(F,P),解释I为通常的解释。

则Φ(0)(σ)=0,Φ

(1)(σ)=1,…,

+为Nat2->Nat,且Φ(+)(a,b)(σ)=a+b,

*为Nat2->Nat,且Φ(*)(a,b)(σ)=a*b,

<=为Nat2->Bool,且Φ(<=)(a,b)(σ)=a<=b

该公式的语义为Φ(Vx.(0<=x))=trueiff所有的x属于Nat,Φ(<=)(0,x)(σ)=true,即0小于等于x(不建议写成x大于等于0)。

7.(P(3,1))=(y:

=1;ify=1thenx:

=1elsex:

=2fi)(3,1)

=(ify=1thenx:

=1elsex:

=2fi)(3,1)

=(iftruethenx:

=1elsex:

=2fi)(3,1)

=(x:

=1)(3,1)

=(1,1)

#8.对于格局(S1,σ),并对格局(S1,σ)转移到(S2,σ’),有:

当S1为whileedoSod;S’时,S’<>ε,有σ=σ’,且

S2为a.S;S1当Φ(e)(σ)=true

b.S’当Φ(e)(σ)=false

当S1为WhileedoSod时,有σ=σ’,且

S2为a.S当Φ(e)(σ)=true

b.ε当Φ(e)(σ)=false

#9.当使用通常解释I时,有

F

(2)=if2=0then1else2*F(2-1)fi

=iffalsethen1else2*F

(1)fi

=2*(if1=0then1else1*F(1-1)fi)

=2*(iffalsethen1else1*(F(0)fi)

=2*1*(F(0))

=2*(if0=0then1else0*F(0-1)fi)

=2*1=2

F(-2)由于不可终止,所以F(-2)未定义

#10.Vc(q,(test,loop,upd,test),q)

q->wlp((test,loop,upd,test),q)

wlp(test,q)=q

wlp((upd,test),q)=q(y3+y2/y3)

wlp((loop,upd,test),q)=q(y3+y2/y3)(y1+1,y2+2/y1,y2)

wlp((test,loop,upd,test),q)=(y3<=x->(x=a^(y1+1)^2<=c^y3+y2+2=(y1+1+1)^2^y2+2=2*(y1+1)+1))

vc(…)=

(x=a^y1^2<=x^y3=(y1+1)^2^y2=2*y1+1^y3<=x1)->(x=a^(y1+1)^2<=x^y3+y2+2=(y1+1+1)^2^y2+2=2*(y1+1)+1)

(可看书本P135)

#11.p->r

{r^e}S1{r}

r^-e->q

{r}whileedoS1od{r^-e}

{p}whileedoS1od{q}

(可看书P153)

程序设计理论期末练习题

1.可参考老师样题的第6题。

*2.这题很难写。

先给个思路:

第一要建立一个well-foundedset(自然数集),并且需要最小值为0。

然后证明对于x<0,程序无定义。

最后证明对于x>0,每次的计算都是递减。

然后下结论。

#3.参考书本P50。

#4.F(x)<-ifx=0then1elsex*F(x)fi

M(S)(3):

F(3)=…=6.可参考老师样题第9题。

*5.P是程序,G是目标。

当我们称是P∪G的AS,是指对G的变量的一个替换。

而CAS,是指一个AS,并且是对P的所有的变量的替换。

AS是程序的中间过程,而CAS是程序运行的结果。

6.对于(Eω,)而言,ω为最小元,(Eω,)上有两条链均有限(见图),故(Eω,)构成一个论域。

对(Dω→Eω,)而言,由定理,若(Eω,)构成一个论域,Dω是一个集合,则(Dω→Eω,)亦构成一个论域,其最小元:

Dω→Eω,(0)=,

(1)=,()=。

7.有问题的题目。

不过估计是x*F(x),老师样题4。

#8.又是一个很长的证明过程。

给思路:

首先需要指出有3种关键路径,(begin,test),(test,loop,upd,test),(test,end),然后对每种路径都要证明该式成立。

最后即可得出结论。

#9.这里不写证明了。

可参考老师样题中的10。

#10.书本P152。

#11.有问题的题目。

把它改成Φ([λF.F(3,x)](*))(γ),且γ(x)=4

定义[λF.F(3,x)]为一个(Nat2->Nat)->Nat的函数,并设为Gγ。

则Gγ(op)=Φ[F(3,x)](γ[F/op])=op(3,4)

则Φ([λF.F(3,x)](*))(γ)=3*4=12。

可看书P95。

程序设计理论期末考试(99)

这年考试题目侧重于概念,与之后几年的题目有很大的区别

*1.问得真直接。

不好做。

指称语义:

定义了基类,然后由基类影射到相应的函数,然后由函数来定义其语义。

操作语义:

定义了抽象机,然后及其相关操作。

由抽象机的运行和状态来反映其语义。

异:

指称语义表示的语言要比操作语义要多。

指称语义重点在指称上,即所对应的函数上。

而操作语义的重点在于抽象机的运行及其状态。

*2.使用CPO的目的是最终能够归到基类,并且能够归到F和V这两个最基本的类型。

最小元表示函数影射的开始,也就是寻找对应的语义中的最小语义单位。

Chain就是其影射过程,也即对应的语义解释过程。

*3.ImperativeLanguage:

即命令方式语言。

Algol-Like语言。

该类语言通过各种相对独立的语句,语句自身是不会直接或间接调用自己,可以通过独立地对每条语句的解释来进行语义分析。

DeclarativeLanguage即声明方式语言。

Lisp-Like语言。

该类语言使用声明性语句,语句自身会直接或者间接调用自己,通过对多个变量的映射关系,来最终确认其对应的语义。

*4.个人感觉是正确的。

因为如果程序的语义脱离了形式系统,那么程序的语义就不能解释或者不可理解了。

而程序的正确性也不可验证了。

5.参考老师样题。

6.参考老师样题。

7.参考课本P50。

数据不同,最后结果为(ε,(5,2,5,9))

*8.书本P25。

简单来说就是一个解释φ,φ(w)(σ)=true,则φ为W的Model。

9.Complete。

因为定义了一个∞,即每个chain都存在lub。

这里要提出一个,R+∪{∞}也是CPO。

有人提出链:

1.1,1.11,1.111…,没有Lub。

其实是有的,

10.M(S)=xmod2.

11.部分正确性是基于程序对输入有定义下的正确性,即程序对合法的输入是正确的。

而完全正确性是需要证明其程序对输入有定义的,即程序对于输入是正确的,并且可以终止的。

基于谓词的正确性是证明给定的谓词是正确的。

基于公式的正确性是证明公式的守恒。

12.PartialCorrect:

i:

说明程序是无论有没定义都部分正确。

Ii:

说明程序是处处都没有定义。

Terminate:

程序处处有定义。

13.程序输入是x=y,输出是x=y!

,所以最后的结果一定是让x为y!

,y在程序中可变(改变以后可以归回原来的值),但最后的结果必定要让x=y!

并且y要等于原值才是计算阶乘的程序。

14.为了保证每条路径都遍历,即程序的运行情况都可保证。

15.

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

当前位置:首页 > 人文社科 > 法律资料

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

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