题目
43.(13分)已知f(n)=Σ2i=2n+1-1=11L 1B,计算f(n)的C语言函数f如下∶
1 int f1( unsigned n)
2{ int sum=1, power=1;
3 for(unsigned i=0;i<= n-1;i ++)
4 { power *=2;
5 Sum += power;
6 }
7 return sum;
8 }
将f中的int都改为float,可得到计算f(n)的另一个函数f2。假设unsigned和int型数据都占32 位,float采用IEEE 754单精度标准。
请回答下列问题。
((1)当n=0时,f1会出现死循环,为什么?若将f1中的变量i和n都定义为int型,则f1是否还会出现死循环?为什么?
(2)f1(23)和f2(23)的返回值是否相等?机器数各是什么(用十六进制表示)?(3)f1(24)和f(24)的返回值分别为33554 431和33554432.0,为什么不相等?
(4)f(31)=232-1,而f1(31)的返回值却为-1,为什么?若使f1(n)的返回值与f(n)相等,则最大的n 是多少?
(5)f2(127)的机器数为7F80 0000H,对应的值是什么?若使f2(n)的结果不溢出,则最大的n是多少?若使f2(n)的结果精确(无舍入),则最大的n是多少?
(1)由于i和n是 unsigned 型,故"i<=n-1"是无符号数比较,n=0时,n-1的机器数为全1,值是 232-1,为 unsigned型可表示的最大数,条件"i<=n-1"永真,因此出现死循环。(2 分)
若i和n 改为 int类型,则不会出现死循环。(1分)
因为"i<=n-1"是带符号整数比较,n=0时,n-1的值是-1,当i=0时条件"i<=n-1"不成立,此时退出for循环。(1分)
(2)f1(23)与f2(23)的返回值相等。(1分)f(23)=223+1-1=224-1,它的二进制形式是24个1。int 占32位,没有溢出。float有1个符号位,8个指数位,23个底数位,23个底数位可以表示24位的底数。所以两者返回值相等。
f1(23)的机器数是 00FF FFFFH。(1分)
f2(23)的机器数是 4B7F FFFFH。(1分)
显而易见前者是 24个1,即 0000 00001111 1111111111111111 1111(2),后者符号位是0,指数位为 23+127(10)=10010110(2),底数位是 111111111111111 1111 1111(2)。
(3)当n=24时,f(24)=1111111111111.111111111111B,而float型数只有24位有效位,舍入后数值增大,所以f2(24)比f1(24)大1。(1分)
(4)显然f(31)已超出了int 型数据的表示范围,用f1(31)实现时得到的机器数为32个1,作为 int 型数解释时其值为-1,即 f1(31)的返回值为-1。(1分)
因为 int 型最大可表示数是0后面加 31个1,故使f1(n)的返回值与f(n)相等的最大 n 值是30。(1分)
(5)IEE754标准用"阶码全1、尾数全0"表示无穷大。f2返回值为float型,机器数7F80 0000H对应的值是+∞。(1分)
当 n=126时,f(126)=2127-1=1.1…1×2126,对应阶码为 127+126=253,尾数部分舍入后阶码加 1,最终阶码为 254,是 IEEE 754 单精度格式表示的最大阶码。故使 f2结果不溢出的最大n值为126。(1分)
当n=23时,f(23)为 24位1,float 型数有24位有效位,所以不需舍入,结果精确。故使f2 获得精确结果的最大n值为23。(1分)

多做几道

41.(10 分)带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点到目标顶点之间存在路径,现有一种解决该问题的方法∶
①设最短路径初始时仅包含初始顶点,令当前顶点u为初始顶点;
② 选择离u最近且尚未在最短路径中的一个顶点v,加入最短路径中,修改当前顶点u=v;
③ 重复步骤②,直到u是目标顶点时为止。
请问上述方法能否求得最短路径?若该方法可行,请证明之;否则,请举例说明。
42. (5分)已知一个带有表头结点的单链表,结点结构为
Data/link
假设该链表只给出了头指针 list。在不改变链表的前提下,请设计一个尽可能高效的算法;查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的 data 域的值,并返回1∶否则,只返回0。要求∶
1)描述算法的基本设计思想。
2)描述算法的详细实现步骤。
3)根据设计思想和实现步骤,采用程序设计语言描述算法(使用C、C++或 Java 语言实现),关键之处请给出简要注释。
43.(8分)某计算机的CPU主频为 500Mz,CPI为5(即执行每条指令平均需5个时钟周期)。假定某外设的数据传输率为 0.5MB/s,采用中断方式与主机进行数据传送,以 32 位为传输单位,对应的中断服务程序包含 18条指令,中断服务的其他开销相当于2条指令的执行时间。请回答下列问题,要求给出计算过程。
1)在中断方式下,CPU用于该外设I/O的时间占整个CPU时间的百分比是多少?
2)当该外设的数据传输率达到5MB/s 时,改用DMA 方式传送数据。假定每次 DMA传送块大小为 5000B,且DMA预处理和后处理的总开销为 500个时钟周期,则 CPU用于该外设 I/O 的时间占整个 CPU时间的百分比是多少(假设 DMA与CPU 之间没有访存冲突)?
44.(13 分)某计算机字长为16位,采用16位定长指令字结构,部分数据通路结构如下图所示,图中所有控制信号为1时表示有效、为 0时表示无效。例如,控制信号MDRinE 为1表示允许数据从 DB打入 MDR,MDRin为1表示允许数据从内总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法指令"ADD(R1),RO"的功能为(RO)+(R1))→(R1),即将R0中的数据与 R1的内容所指主存单元的数据相加,并将结果送入 R1的内容所指主存单元中保存。
下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号。请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
时钟:功能/有效控制信号
C1:MAR←(PC)/PCout, MARin
C2:MDR←M(MDR) PC←(PC)+1/MemR, MDRinE, PC+1
C3:IR←(MDR)/MDRout, IRin
C4:指令译码/无
45.(7分)三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。
P1每次用 produce()生成一个正整数并用 putO)送入缓冲区某一空单元中;P2每次用 getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用 geteven()从该缓冲区中取出一个偶数并用 counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义信号量的含义(要求用伪代码描述)。

该科目易错题

该题目相似题