和计算机四级网络工程师原题Word文档格式.docx
《和计算机四级网络工程师原题Word文档格式.docx》由会员分享,可在线阅读,更多相关《和计算机四级网络工程师原题Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
(4)文件4:
fun()
printf(“%d,%d,%d\n”,a,a+1,&
a+1);
main()
fun();
该程序的运行结果是:
134518112,134518192,134518912
编译原理部分答案
1.该正规式描述的语言是,所有不含子串001的0和1的串。
2.
(a)SCall|Assign
Callid(id_list)
Assignid(id_list):
=id(id_list)
id_listid_list,id|id
(b)由于过程参数和下标表达式的中间代码是不一样的,在id和id_list,id向id_list归约时,不知按哪种方式处理。
3.
(a)EE1*E2{ifE1.sign=E2.signthenE.sign:
=POSelseE.sign:
=NEG}
E+E1{E.sign:
=E1.sign}
EE1{ifE1.sign=POSthenE.sign:
=NEGelseE.sign:
=POS}
Eunsigned_integer{E.sign:
(b)指令的解释如下:
PUSH 值:
将值压栈
NEG:
将栈顶值取出,计算其相反数,把结果压入栈
MUL:
将栈顶和次栈顶的值取出,将它们相乘,把结果压栈
产生代码的翻译方案如下:
EE1*E2{emit(MUL)}
E+E1{}
EE1{emit(‘NEG’)}
Eunsigned_integer{emit(‘PUSH’unsigned_integer.lexval)}
4.对一个t类型的数组a[i1][i2]…[in]来说,表达式a的类型是:
pointer(array(0..i2–1,…array(0..in–1,t)…))
而表达式&
a的类型是:
pointer(array(0..i1–1,…array(0..in–1,t)…))
1999年
1.(10分)构造一个DFA,它接受0,1上0和1的个数都是偶数的字符串。
2.(5分)现有句型bl和产生式Ab,分别指出LL
(1)方法和LR
(1)方法在扫描到此句型的什么位置决定用此产生式?
3.(15分)在PASCAL语言中,简单类型的变量的声明例举如下:
m,n:
integer
p,q,r:
real
为这样的声明写一个LR
(1)文法(为简单起见,变量标识符都用id表示),并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。
4.(5分)下面的PASCAL程序在VAX机器上运行时,报告存储访问错,为什么?
programstrange(output);
varp:
integer;
begin
p=nil;
if(p<
>
nil)and(p=10)
thenwriteln(10)
elsewriteln(‘nothing’)
end.
5.(10分)PASCAL语言和C语言都是栈式分配的语言。
它们在语言构造上的哪些区别,使得C语言允许一函数的返回值类型是函数类型(实际是函数指针类型),而PASCAL语言不允许。
6.(5分)代码优化中的强度削弱是什么意思,举一例加以说明
2000年
1.(8分)Pascal语言无符号数的正规定义如下:
numdigit+(.digit+)?
(E(+|-)?
digit+)?
其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。
2.(10分)一个非LR
(1)的文法如下:
LMLb|a
M
请给出所有有移进-归约冲突的LR
(1)项目集,以说明该文法确实不是LR
(1)的。
3.(14分)程序的文法如下:
PD
DD;
D|id:
T|procid;
D;
S
(1)写一个语法制导定义,打印该程序一共声明了多少个id。
(2)写一个翻译方案,打印该程序每个变量id的嵌套深度。
4.(5分)C语言程序引用sizeof函数时,该函数的计算是在编译该程序时完成,还是在运行该程序时完成?
说明理由。
5.(5分)一个C语言程序如下:
func(i1,i2,i3)
longi1,i2,i3;
longj1,j2,j3;
printf("
Addressesofi1,i2,i3=%o,%o,%o\n"
&
i1,&
i2,&
i3);
Addressesofj1,j2,j3=%o,%o,%o\n"
j1,&
j2,&
j3);
longi1,i2,i3;
func(i1,i2,i3);
该程序在SUN工作站上的运行结果如下:
Addressesofi1,i2,i3=35777773634,35777773640,35777773644
Addressesofj1,j2,j3=35777773524,35777773520,35777773514
从上面的结果可以看出,func函数的3个形式参数的地址依次升高,而3个局部变量的地址依次降低。
试说明为什么会有这个区别。
6.(8分)一个C语言程序如下:
func();
Returnfromfunc\n"
);
func()
chars[4];
strcpy(s,"
12345678"
%s\n"
s);
该程序在PC机linux操作系统上的运行结果如下:
12345678
Segmentationfault(coredumped)
试分析为什么会出现这样的运行错误。
2001年
1.(7分)用状态转换图表示接收(a|b)aa的确定的有限自动机。
2.(10分)为语言
L={ambn|0m2n}(即a的个数不超过b的个数的两倍)
写一个LR
(1)文法,不准超过6个产生式。
(若超过6个产生式,不给分。
若所写文法不是LR
(1)文法,最多给5分。
)
3.(8分)为下面文法添加语义规则(或叫动作子程序),输出S产生的二进制数的值,如输入是101时,输出5。
SS
SSB|B
B0|1
4.(5分)C语言程序引用sizeof(求字节数运算符)时,该运算是在编译该程序时完成,还是在运行该程序时完成?
5.(15分)一个C语言函数如下:
func(i)
longi;
longj;
j=i-1;
func(j);
该函数在PC机linux操作系统上编译生成的汇编代码如下:
.file"
stack.c"
gcc2_compiled.:
__gnu_compiled_c:
.text
.align2
.globl_func
.type_func,@function
_func:
pushl%ebp
movl%esp,%ebp
subl$4,%esp
movl8(%ebp),%edx
decl%edx
movl%edx,-4(%ebp)
movl-4(%ebp),%eax
pushl%eax
call_func
addl$4,%esp
L1:
leave
ret
Lfe1:
.size_func,Lfe1-_func
试画出该函数的一个活动记录的内容,包括活动记录的每个单元存放什么东西、执行movl8(%ebp),%edx指令时栈顶指针所指的的位置、与活动记录有关的另一个指针所指的位置和地址增长方向。
6.(5分)一个C语言函数如下:
inti,j,k;
i=5;
j=1;
while(j<
100){
k=i+1;
j=j+k;
}
经优化编译后,生成的代码如下:
.file“optimize.c”
___gnu_compiled_c:
.align2
.type_func,@function
pushl%ebp
movl%esp,%ebp
movl$1,%eax
movl$6,%edx
.align2,0x90
L4:
addl%edx,%eax
cmpl$99,%eax
jleL4
leave
ret
.size_func,Lfe1-_func
试说明编译器对这个程序作了哪些种类的优化(只需要说复写传播、删除公共子表达式等,不需要说怎样完成这些优化)。
2002年
1.(10分)一个C语言的文件如下。
longgcd(p,q)
longp,q;
if(p%q==0)
returnq
else
returngcd(q,p%q);
基于LALR
(1)方法的一个编译器的报错情况如下。
如果缺少第二行的逗号,编译器报告parseerrorbefore‘q’(line2)。
如果缺少第四行的右括号,编译器报告parseerrorbefore‘return’(line5)。
这两个示例表明LALR
(1)方法能及时发现错误,且不会把出错点后面的符号移进分析栈(活前缀性质)。
(a)如果第四行的if误写成fi,编译器仍报告parseerrorbefore‘return’(line5)。
此时是否违反了活前缀性质?
请给出你的解释。
(b)若在上面程序文件中加入下面的main函数
printf("
\n%ld\n"
gcdx(4,12));
编译得到的出错如下。
Infunction‘main’:
undefinedreferenceto‘gcdx’
ldreturned1exitstatus.
请问,这个gcdx没有定义,是在编译时发现的,还是在联接装配时发现的?
试说明理由。
2.(10分)一个文法如下:
S(S)
Sa
请给出该文法中对活前缀(((有效的LR
(1)项目。
3.(10分)算符作用于表达式e1,e2,…,ek的前缀形式是p1p2…pk,其中pi是ei的前缀形式。
(a)写出a(b+c)的前缀形式。
(b)给出把中缀表达式翻译成前缀形式的翻译方案,中缀表达式的文法如下。
EE+T|T
TTF|F
Fid|(E)
4.(10分)在下面假想的程序中,第(11)行语句f:
=a调用函数a,a传递函数addm作为返回值。
(a)画出该程序执行的活动树。
(b)假定非局部名字使用静态作用域,为什么该程序在栈式分配情况下不能正确工作?
(c)在堆分配策略下,该程序的输出是什么?
(1)programret(input,output);
(2)varf:
function(integer):
integer;
(3)functiona:
(4)varm:
(5)functionaddm(n:
integer):
(6)beginreturnm+nend;
(7)beginm:
=0;
returnaddmend;
(8)procedureb(g:
integer);
(9)beginwriteln(g
(2))end;
(10)begin
(11)f:
=a;
b(f)
(12)end.
5.(10分)一个C语言的函数如下:
func(c,l)
charc;
longl;
func(c,l);
在X86/Linux机器上编译生成的汇编代码如下:
.file"
parameter.c"
.version"
01.01"
.align4
.globlfunc
.typefunc,@function
func:
pushl%ebp——将老的基地址指针压栈
movl%esp,%ebp——将当前栈顶指针作为基地址指针
subl$4,%esp——分配空间
movl8(%ebp),%eax
movb%al,-1(%ebp)
movl12(%ebp),%eax
pushl%eax
movsbl-1(%ebp),%eax
callfunc
addl$8,%esp
.L1:
leave——和下一条指令一起完成恢复老的基地址指针,将栈顶
ret——指针恢复到调用前参数压栈后的位置,并返回调用者
.Lfe1:
.sizefunc,.Lfe1-func
.ident"
GCC:
(GNU)egcs-2.91.6619990314/Linux(egcs-1.1.2release)"
(a)请指出对应源程序第5行的函数调用func(c,l)的汇编指令是哪几条。
(b)请说明字符型参数和长整型参数在参数传递和存储分配方面有什么区别。
(小于长整型size的整型参数的处理方式和字符型参数的处理方式是一样的。
2006年全国计算机等级考试四级考试大纲3
⑶进程调度。
⑷进程通信。
⑸死锁。
3.作业管理:
⑴作业与作业管理。
⑵作业状态与调度。
4.存储管理:
⑴存储与存储管理。
⑵虚拟存储原理。
⑶页式存储。
⑷段式存储。
⑸段页式存储。
⑹局部性原理与工作集概念。
5.文件管理:
⑴文件与文件管理。
⑵文件的分类。
⑶文件结构与存取方式。
⑷文件目录结构。
⑸文件存储管理。
⑹文件存取控制。
⑺文件的使用。
6.设备管理:
⑴设备与设备分类。
⑵输入输出控制方式。
⑶通道技术。
⑷缓冲技术。
⑸设备分配技术与SPOOLing系统。
⑹磁盘调度。
7.典型操作系统的使用:
⑴UNIX的特点与使用。
⑵Linux的特点与使用。
⑶Windows的特点与使用。
五、软件工程
1.软件工程基本概念:
⑴软件与软件危机。
⑵软件工程定义。
⑶软件生命周期。
⑷软件过程模型。
2.结构化分析与设计:
⑴问题定义与可行性研究。
⑵软件需求分析。
⑶数据流程图与数据字典。
⑷软件体系结构设计。
⑸概要设计与详细设计。
⑹模块结构设计与数据结构设计。
⑺用户界面设计。
3.原型化开发方法:
⑴原型化开发的基本原理。
⑵原型化开发模型。
⑶原型化开发过程。
⑷软件复用。
4.面向对象分析与设计:
⑴面向对象的基本概念。
⑵面向对象分析。
⑶面向对象设计。
⑷统一建模语言(UML)。
5.软件测试:
⑴软件测试的基本概念。
⑵软件测试方法。
⑶测试用例设计。
⑷软件测试过程。
6.软件维护:
⑴软件维护的基本概念。
⑵软件维护活动。
⑶软件可维护性。
⑷软件维护的负作用。
7.软件开发工具与环境:
⑴软件开发工具。
⑵软件工程环境。
8.软件质量保证与软件质量度量:
⑴软件质量概念。
⑵软件质量保证。
⑶软件质量度量与评价。
⑷软件技术的评审。
⑸软件可靠性。
转贴于:
计算机等级考试_考试大【责编:
onmars纠错】[1][2][3][4][5]
5天5夜突破英语听说,100%保证!
!
——点击进入
赛迪教育:
NCRE培训课程
辅导科目主讲老师课时课程原价优惠价格讲座报名
一级MSOFFICE朝乐门20¥125¥80试听
二级VB赵倩40¥165¥120试听
二级VF刘丽40¥165¥120试听
二级C洪娇梅30¥165¥120试听
C++专题讲座郑莉30¥165¥120试听
二级公共基础朝乐门15¥60¥40试听
三级网络刘建国30¥165¥120试听
更多...
【设为主页】【大中小】【加入收藏】【打印本文】【回到顶部】【关闭此页】
相关文章·
2007年9月四级笔试参考答案(网友提供)
·
计算机等级考试四级考试笔试模拟试题一
2005年9月全国计算机等级考试四级笔试试题
计算机等级考试四级:
操作系统整章问题及解
全国计算机等级考试四级笔试试题一(上)
全国计算机等级考试四级笔试试题一(下)
全国计算机等级考试四级笔试试题二(上)
全国计算机等级考试四级笔试试题二(下)
全国计算机等级考试四级考试经典词汇之二推荐文章·
2007年计算机等考三级信息管理模拟试题汇总
关于2007年下半年全国计算机等级考试报名工
2007年9月第26次全国计算机等级考试报名开始
计算机三级网络技术试卷
计算机英语:
Windows简介
Windows3.1操作模式
启动Windows
如何使用Windows
Word教程:
多级符号的实际应用
热门课程培训 计等考试网上辅导
报关员考试辅导
外销员考试网上辅导
报检员考试网上辅导
国际商务师考试辅导
注册会计师课程辅导07年软件水平网上培训
07会计从业考试辅导
职称英语网上远程辅导
公共英语网上远程辅导
建造师考试网上辅导
监理工程师课程辅导热门推荐试题排行经验技巧最近更新
计算机等级考试三级网络笔试练习题二十六
计算机等级考试三级网络笔试练习题二十五
计算机等级考试三级网络笔试练习题二十四
计算机等级考试三级网络笔试练习题二十三
全国计算机等级考试一级B选择题真题
(一)
计算机等级考试三级网络笔试练习题二十二
计算机等级考试三级网络笔试练习题二十一
计算机等级考试三级网络笔试练习题十九
计算机等级考试三级网络笔试练习题二十
计算机等级考试三级网络笔试练习题十八
07年等考三级信管模拟试题汇总
2007年下半年计算机等级考试报名
07年9月全国计等考试报名及考试
模拟试题:
计算机三级网络技术试卷
综合辅导计算机英语:
辅导计算机英语:
辅导Word教程:
综合辅导计算机英语词汇:
数字电路
辅导:
SQLServer连接VFP数据库的实现
IIS、ASP.NET和SQLServer的安全性问题
用ASP调用SQLServer的视图和存储过程
计算机三级--数据库辅导:
SELECT语句
列出SQLServer数据库中所有的存储过程
辅导:
新手入门:
防范SQL注入攻击的新办法
数据库辅导:
SQLServer数据库同步问题
另类方法_虚拟内存设置也能精确计算
如何解决SQLServer占用内存的问题
数据库移动开发:
第一次亲密接触移动数据库
最新推荐 更多
计算机二级考试
计算机一级考试