阅读以下说明和流程图,回答问题,将解答填入对应栏内。
[流程图]
[说明]
把指定区间上的所有整数分解质因数,每一整数表示为质因数按从小到大顺序排列的乘积形式。如果被分解的数本身是素数,则予以注明。例如,90=2×3× 3×5,91=素数。
下面的流程图描述了分解质因数的过程。对每一个被分解的整数j,赋值给b(以保持判别运算过程中j不变),用K (从2开始递增1取值)试商,若不能整除,打印输出“*k”,b除以k的商赋给b(b=b/k)后继续用k试商(注意,可能有多个k因数),直至不能整除,k增1继续。
将流程图中的(1)~(5)处补充完整。
给定程序MODI1.C中函数fun的功能是:用下面的公式:
π/4=1-1/3+1/5-1/7+.....
求x的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
例如,程序运行后,输入0.0001,则程序输出3.1414。
请改正程序中的错误,使它能输出正确的结果。_______
注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!
include 〈 math.h 〉
include 〈 stdio.h 〉
float fun (float num)
{ int s ;
float;n,t,pi ;
t=1;pi=0;n=1;s=1;
/**********found**********/
while(t 〉=num)
{
pi = pi + t ;
n = n +2 ;
s=-s ;
/**********found**********/
t = s % n ;
}
pi=pi*4 ;
return pi ;
}
main()
{ float n1,n2;
printf("Enter a float number:");
scanf("%f", &n1);
n2=fun(n1);
printf("%6.4f\n",n2);
}
已知两个浮点数,阶码为3位二进制数,尾数为5位二进制数,均用补码表示。
[X]补=0.1101×2001,[y]补=1.0111×2011
则两个数的和[x+y]补=(1),并说明规格化数的要求是(2)。
A.0.1001×20011
B.1.1001×2011
C.1.0010×2010
D.1.0011×2010
A.0 10000110 01100100010000000000000
B.0 10000111 01100100010000000000000
C.1 10000100 01100100010000000000000
D.0 10000110 11100100010000000000000
阅读以下说明和流程图,填补流程图中的空缺(1)一(5),将解答填入答题纸的对应栏内。
【说明】
下面的流程图采用公式ex=1+x+x2/2 1+x3/3 1+x4/4 1+…+xn/n!+???计算ex的近似值。设x位于区间(0,1),该流程图的算法要点是逐步累积计算每项xx/n!的值(作为T),再逐步累加T值得到所需的结果s。当T值小于10-5时,结束计算。
【流程图】
有关绘图,下面的说法正确的是()。 Ⅰ:drawArc(int x,int y,int width,int height,ing startAngle,int arcAngle)是用来指定在矩形的边界内从起始角度到结束角度之间画弧。 Ⅱ:drawLine(int x1,int y1,int x2,int y2)用来绘制从点(x1,y1)到(x2,y2)的线段。当计算出线段上点的坐标不是整数时,向该点的右下方取整。 Ⅲ: drawRet(int x,int y, int width, int height)绘制指定矩形的轮廓。 Ⅳ:drawPloygon(Polygon p)绘制由特定的点指定的多边形。
A.Ⅱ、Ⅲ
B.Ⅱ、Ⅲ、Ⅳ
C.Ⅰ、Ⅱ
D.Ⅰ、Ⅲ、Ⅳ
阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。
【说明】
在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组:
int x[3][4]={{1,0,0,0},{0,5,0,0),{0,0,7,2}};
可用以下数组a来表示:
int a[][3]={{3,4,4},{0,0,1},{1,1,5),{2,2,7},{2,3,2}};
其中三元数组a的第1行元素的值分别存储稀疏矩阵×的行数、列数和非零元素的个数。
下面的流程图描述了稀疏矩阵转换的过程。
【流程图】
算法设计:对于给定的偶数m,n≥6,且|m-n|≤2,计算m×n的国际象棋棋盘上马的一条Hamilton周游路线.
数据输入:由文件input.txt给出输入数据.第1行有两个正整数m和n,表示给定的国际象棋棋盘山m行,每行n个格子组成.
结果输出:将计算出的马的,Hamilton周游路线用下面的两种表达方式输出到文件output.txt.
第1种表达方式按照马步的次序给出马的Hamilton周游路线.马的每一步用所在的方格坐标(x,y)来表示.x表示行坐标,编号为0,1,...,m-1;y表示列坐标,编号为0,1...,n-1.起始方格为(0,0).
第2种表达方式在棋盘的方格中标明马到达该方格的步数.(0,0)方格为起跳步,并标明为第1步.
IEEE-754标准规定:单精度浮点数的最高位为符号位,后面跟8位经偏移的阶码(移码),偏移量为+127,尾数用原码表示,且把尾数规格化为1.xxx.…x(x为0或1),并将1去掉,尾数用23位表示。根据该标准,十进制数+178.125的规格化表示形式为(7)。
A.0 1000011001100100010000000000000
B.0 10000111 01100100010000000000000
C.1 1000010001100100010000000000000
D.0 10000110 11100100010000000000000
试题四(共15分)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
用两台处理机A和B处理n个作业。设A和B处理第i个作业的时间分别为ai和bi。由于各个作业的特点和机器性能的关系,对某些作业,在A上处理时间长,而对某些作业在B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得n个作业被这两台处理机处理完毕的时间(所有作业被处理的时间之和)最少。
算法步骤:
(1)确定候选解上界为R短的单台处理机处理所有作业的完成时间m,
(2)用p(x,y,k)=1表示前k个作业可以在A用时不超过x且在B用时不超过y时间 内处理完成,则p(x,y,k)=p(x-ak,y,k-1)||p(x,y-bk,k-1)(表示逻辑或操作)。
(3)得到最短处理时问为min(max(x,y))。
【C代码】
下面是该算法的C语言实现。
(1)常量和变量说明
n: 作业数
m: 候选解上界
a: 数组,长度为n,记录n个作业在A上的处理时间,下标从0开始
b: 数组,长度为n,记录n个作业在B上的处理时间,下标从0开始
k: 循环变量
p: 三维数组,长度为(m+1)*(m+1)*(n+1)
temp: 临时变量
max: 最短处理时间
(2)C代码
include<stdio.h>
int n, m;
int a[60], b[60], p[100][100][60];
void read(){ /*输入n、a、b,求出m,代码略*/}
void schedule(){ /*求解过程*/
int x,y,k;
for(x=0;x<=m;x++){
for(y=0;y<m;y++){
(1)
for(k=1;k<n;k++)
p[x][y][k]=0;
}
}
for(k=1;k<n;k++){
for(x=0;x<=m;x++){
for(y=0;y<=m;y++){
if(x - a[k-1]>=0) (2) ;
if((3) )p[x][y][k]=(p[x][y][k] ||p[x][y-b[k-1]][k-1]);
}
}
}
}
void write(){ /*确定最优解并输出*/
int x,y,temp,max=m;
for(x=0;x<=m;x++){
for(y=0;y<=m;y++){
if((4) ){
temp=(5) ;
if(temp< max)max = temp;
}
}
}
printf("\n%d\n",max),
}
void main(){read();schedule();write();}
【问题1】 (9分)
根据以上说明和C代码,填充C代码中的空(1)~(5)。
【问题2】(2分)
根据以上C代码,算法的时间复杂度为(6)(用O符号表示)。
【问题3】(4分)
考虑6个作业的实例,各个作业在两台处理机上的处理时间如表4-1所示。该实例的最优解为(7),最优解的值(即最短处理时间)为(8)。最优解用(x1,x2,x3,x4,x5,x6)表示,其中若第i个作业在A上赴理,则xi=l,否则xi=2。如(1,1,1,1,2,2)表示作业1,2,3和4在A上处理,作业5和6在B上处理。
(20)
A. ADBF:0:FEEA:00:EA:AC:DEED
B. ADBF:0:FEEA::EA:AC:DEED
C. ADBF:0:FEEA:EA:AC:DEED
D. ADBF::FEEA::EA:AC:DEED