A.3
B.5
C.7
D.2
第2题
【说明】
c语言常用整型(int)或长整型(1ong)来说明需要处理的整数,在一般情况下可以满足表示及运算要求,而在某些情况下,需要表示及运算的整数比较大,即使采用更长的整型(例如,long long类型,某些c系统会提供)也无法正确表示,此时可用一维数组来表示一个整数。假设下面要处理的大整数均为正数,将其从低位到高位每4位一组进行分组(最后一组可能不足4位),每组作为1个整数存人数组。例如,大整数2543698845679015847在数组A中的表示如下(特别引入-1表示分组结束):
在上述表示机制下,函数add_large_number(A,B,c)将保存在一维整型数组A和B中的两个大整数进行相加,结果(和数)保存在一维整型数组c中。
【c函数】
Void add_large_number(int A[], int B[], int c[])
{
int i,cf; /*cf存放进位*/
int t,*p; /*t为临时变量,p为临时指针*/
cf= ( 1) ;
for(i=0 ; A[i]>-l&&B[i]>-1;i++){
/*将数组A、B对应分组中的两个整数进行相加*/
t=(2) ;
C[i]=t%i0000;
cf= (3) ;
}
if( (4))P=B;
else P=A;
for(;P[i]>-1;i++){/*将分组多的其余各组整数带进位复制入数组C*/
C[i]=(p[i]+cf)%i0000; cf=(p[i]+cf)/10000;
}
if(cf>0) C[i++]=cf;(5)=-1; /*标志”和数”的分组结束*/
第3题
【说明】
计算一个整数数组a的最长递增子序列长度的方法描述如下:
假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长
递增子序列的长度,则数组a的最长递增子序列的长度为器;其中b[i]满足最优子结构,可递归定义为:
【c代码】
下面是算法的c语言实现。
(1)常量和变量说明
a:长度为n的整数数组,待求其最长递增子序列
b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,
其中0≤i<n
len:最长递增子序列的长度
i.j:循环变量
temp,临时变量
(2)C程序
include <stdio . h>
int maxL (int *b. int n) {
int i. temp =0;
For(i = 0; i < n; i++){
if (b[i] > temp )
Temp= b[i];
}
Return temp;
【问题l】(8分)
根据说明和C代码,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。
【问题3】(3分)
已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。
第4题
[说明]
这是一个求解Josephus问题的函数。用整数序列1,2,3…,n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。Josephus问题描述,设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,…如此反复直到所有的人全部出局为止。
[C函数]
void Josephus(int A[],int n,s,m)
(int i,j,k,temp;
if(m==O){
printf("m=0是无效的参数!\n");
return;
}
for(i=0;i<n;i++) A[i]=i+1; /*初始化,执行n次*/
i= (1) /*报名起始位置*/
for(k=n;k>1;k-){
if((2)) i=0;
i=(3) /*寻找出局位置*/
if(i!=k-1){
tmp=A[i];
for(j=i;J<k-1;j++) (4);
(5);
}
}
for(k=0;k<n/2;k++){
tmp=A[k];A[k]=A[n-k+1];A[n-k+1]=tmp;
}
}
第5题
【说明】
在某嵌入式处理器上,编写以下两段秸序(编译选项中,存储采用4字节对齐方式)。
程序段1:
struct studentl {
char name [10] ;
long sno;
char sex;
float score [4] ;
*pl, al, bl;
程序段2:
union student2 {
char name [10] ;
long sno;
char sex,
float score [4] ;
*p2, a2, b2;
汉诺塔问题说明:有n个盘子在A处,盘子从小到大,最上面的盘予最小,程序要
把这n个盘子从A处搬到C处,可以在E处暂存,但任何时候都不能出现大的盘子压
在小的盘子上面的情况。
下列是一段求解汉诺塔问题的C语言程序。
include <stdio . h>
void move (int n, char a, char c)
{
static int Step=l;
printf ("Step %2d: Disk %d %c..--> %c\n", Step, n, a, c) ;
Step++;
}
void Hanoi (int n, char a, char b, cnar c)
{
if (n>l)
{
Hanoi (n-l, a, c, b) ;
move (n, a. c) ;
Hanoi (n-l, b, a, c) ;
}
else move (n,a,c);
}
void main()
{
Hanoi(3, ’A’, 、B’, 、C ’);
}
【问题1】(3分)
C语言函数的一般格式为:
<函数类型> <函数名> (<参数列表>)
{
<函数体>;
}
简答下述问题,将答案填写在答题纸中对应栏目。
(l)<函数类型>的含义是什么?
(2)<参数列表>的含义是什么?
(3)C语言函数之间的参数如何传递?
【问题2] (6分)
回答问题,将答案填写在答题纸中对应栏目。
(1)sizeof(struct studentl)结果是多少
(2) sizeof(union student2)结果是多少
(3)变量a2在程序段2中定义,写出执亍以下语句后的输出结果。
strcpy (a2. name,¨zhangwei¨);
a2.sex=’f’;
printf ("%s¨, a2 .name);
【问题3](6分)
仔细阅读求解汉诺塔问题的C语言程序,完成其中(1)~(4)空白填空,将答案
填入答题纸的对应栏内。
运行结果为:
Step1:Disk l A---->C
Step 2: (l)
Step 3: Disk I C---->B
Step4: (2)
Step 5: (3)
Step 6: Disk 2 B---->C
Step 7: (4)
第6题
A、1
B、3
C、4
D、7
第7题
(1) A.并行执行的多种处理安排在一条指令内
B.一个任务分配给多个处理机并行执行
C.采用多个处理部件,多条流水线并行执行
D.增加流水线级数,提高并行度
(2)~ (3) A.功能部件冲突
B.内存与CPU速度不匹配
C.中断系统
D.访内指令
(4) A.操作系统
B.指令系统
C.编译系统
D.高级语言
(5) A.猜测法
B.延迟转移
C.指令预取
D.刷新流水线重填
第8题
A.通用软件
B.系统软件
C.应用软件
D.软件包
第9题
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!