开发工具:
文件大小: 1mb
下载次数: 0
上传时间: 2019-02-23
详细说明:北航程序设计语言原理题目与参考答案,自己整理与写的,供参考。词法作用域
输出结果:17
动态作用域
输出结果:21
程序代
A
动交
24,y=2
谁恢C
C=22x=8
堆找雄
C=2
顶
二、请按照词法作用域和动态作用域两种方式给出下面程序执行后的输出打印结果,画出程
序在执行13行对r调用后和14行对p调用后的栈式存储管理状况图.(20分)
(1 int x;
(2)void p(void
(3) doubler=2
printf("%gn”,r);
(5) printf("%dn”,x);
(6)}
(7) void r( void
(9)p()
(10)}
(11) void q( void I
(12)i double x =3
(13)
(14)p();
(15)}
(16)main()
(17){p();
(18)q();
(19)
return
(20)}
词法作用域输出结果:202121
动态作用域输出结果:202121
程代码
X=9
×23
3数(程高
X=0
住下=2
三参数机制
请论述过程调用的传值、传名和引用三种参数机制的不同点,并说明分别基于三和参数
机制调用下述语句的不同执行输出结果以及内存单元状况变化图
testin,A1J11↑next);其中过程test定义如下
PROCEDURE test(2, A2: Integer: P2: list)
BEGIN
J2:=J2+1
Writer(J2, A2, P2 f, value)
J2:=J2+1
A2:=]2+P2↑ value;
P2:=P2↑next
Writeln(2A2P2↑alue)
D
变量J,A1和P1的当前状态如下
243645
→·m·+m·}m
过程调用中的传值、传名和引用三种参数机制的不同点
传值:把实参值复制到形参上,一般实参运行后不会改变。只能返回单个的函数结
果值。
传名:如果在过程中修改了形参的值,就按结合的变元的名字(地址)找出变元值
进行修改。在传明过程中虚实结合时将程序体中所有形参出现的地方均以实参变元
名置换。
引用:引用传递的是存储对象,实参必须是变量名或能得出地址的表达式。
执行结果
传值:224201|32330
传名:2362032330
引用:2242032330
二、假设下述程序中函数p调用可按传值调用、传名调用、引用调用和值返回调用四种参
数传递机制进行,请分别按上述四种参数机制说明下述程序的执行输岀结果以及描述在函数
p调用期间的内存单元状况图。(24分)
inl a[3;
void p(int x, int y
i++
y++:}
main()
{a[0]=0
a[1]=1;
a[2]=1;
i=0
p(alil, alj
printf("%od\n", a[0D)
printf(“%dhn”,a[1]);
pint("%dhn”,a[2]);
return 0: H
传值:011
传名:121
引用:121
值返回引用
四面向对象
请针对下百的一段ava代码片断中,1、列出说明存在各种面向类型和面向复合对
象的操作,2、说明下述代码构造了哪些新类型,3、程序代码中是否存在错误,为什么;
若程序修改正确后,主程序输出的结果是什么?
Import java.10
public class PassTesti
float pt valt
public static void main(String args)
Pass Test pt=new PassTestO)
char my Chars=ia,b,c"I
String s2 = new Stringim Chars
52.length
short b=val
String stringArrayl
String string Array=new String[3]
stringArraylo]new String( The")
stringArray[ 1= new String("value"
stringArra 12]= new String("is"
System. out. println(string Array +val)
changeinto(val)
System. out. println(string Array +val)
pt.Et Value=b+l
System. out println(string Array+ptpt value)
pt. changeObjvalue(pth
System.out. println(string Array+pt pt value);
public vcid chaIgelnl(int valuer
value
public vcid chargeObjValue(PassTest ref)
ref.ptvalue=gS
1.哪些操作
面向类型的操作:赋值、拼接、类型转换
面向复合对象的操作:构造、赋值、数组索引
2.
3.构造了哪些新类型
PassTestfloat: ptvaluel
Stringl
4.代码存在哪些错误
short b =(shortval
string Array new String 3]
System. out. printIn (string Arraylo]+ string Array [ 1+ string array [2]+ val)
5.程序输出的结果是什么
The value is 3
The value is 3
The value is 4
The vlaue is 99
五并发编程
、进程同步的一个典型例子是资源分配问题。若一个系统有三台打印机,那么最多只能有
个进程同时使用打印机,请波照第14章14.1,2小节的监控器机制编写相应的打印机资源
分配的监控器模块,并简单说明客户进程如何使用监控器机制实现上述打印机资源的分配与
同步的。(20分)
monitor pr|NTER∷
var num=o
var printer_ availab|e:cond;//¥num>0时, printer available为真
proc get printer( is
while num =0 do wait(printer available end
if num >o then num =num -1 endif.
end
proc finish_ print( is
num = num+ l
if num 1 then signal (printer available endif;
d
end:
End printer
三、试论述信号灯、条件临界区和监控器三种并发机制的基本原理以及三者异同。(20分)
信号灯、信号量原理、优缺
为了处理忙等待的低级、设计上的低效
信号昰是一个非负整值变量s。在其上定义了两个操作Pv取自荷兰语宁头,即wait(等待)和 signal(示信)。V
操作发信号指示一个事件可以岀现P操作延迟所在进程直至某个事件已经岀现
优缺:
信号灯理论则为进程交互的同步与互斥的研究打下了基础
信号灯是语句级,直接作为程序设计语言层次偏低
条件临界区原理、优缺
条件临界区( Condition Critical Region简称CCR将共享变量显式地置于叫做资源的区域内。每个进程在自己的进程
体内指明要访问的条件临界区,而同一临界区可出现在不同进程之中谁进谁用)
优缺:
条件临界区最主要的优点是概念清晰
无需辅助标志和变量即可描述共享变是的任何进程交互
程序编译时即可保证互斥
一个进程创建一个条件不需顾及其它条件是否与此条件有关
易于程序正确性证明
体现了共享数据传递的方便
它的致命缺点是低效(和信号灯相比。此外:
·进程和共享变量耦合太紧
临界区利写不利读,一多了就太散,因而也难修改
监控器原理、优缺
把分散在整个程序中的 region语句进一步集中成为一个模块叫做监控器 monitor)
请采用Java语言編写基于贪睡理发师模型的客户服务排队程序(35分)
import java. util. concurrent. Semaphore:
public class Sleep barber i
public static void main(Stringl] args)
Semaphore signa|= new Semaphore(10);/始座位数为10
Semaphore sleep= new Semaphore(O)/初始为睡觉状态
Thread barber new thread(new barber signal, sleep))
barber, start
try
Thread. sleep(1000)
while(true)
Thread customer= new Thread(new Customer(signal, sleep)
customer. start
Thread. sleep(100);
1 catch(Exception et
e printStackTrace(
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.