05级Word文档格式.docx

上传人:b****6 文档编号:17256055 上传时间:2022-11-29 格式:DOCX 页数:12 大小:20.13KB
下载 相关 举报
05级Word文档格式.docx_第1页
第1页 / 共12页
05级Word文档格式.docx_第2页
第2页 / 共12页
05级Word文档格式.docx_第3页
第3页 / 共12页
05级Word文档格式.docx_第4页
第4页 / 共12页
05级Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

05级Word文档格式.docx

《05级Word文档格式.docx》由会员分享,可在线阅读,更多相关《05级Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

05级Word文档格式.docx

并且数组a在内存中的起始地址为0x10000,那么a[5]的地址是()

q)0x10005

r)0x10014

s)0x10016

t)0x10020

6.在地址和整数都为32位宽的计算机里,编译器要为下面的代码片段分配多少字节的内存?

inta;

int*b=&

a;

u)4

v)8

w)16

x)32

7.在基于IA32的计算机硬件体系中,如果规定结构成员对齐为4Bytes,那么,对于结构体

structS1{

inti;

charc;

intj;

};

其在内存中分配的字节数为:

y)3Bytes

zz)5Bytes

aa)9Bytes

bb)12Bytes

8.按照下列声明的顺序,最后一行可以改写为:

ptr=a+5;

*ptr++=x;

cc)a[6]=x;

dd)ptr=x;

*ptr++;

ee)ptr=ptr+1;

*ptr=x;

ff)a[5]=x;

ptr=ptr+1;

9.对于char*pa[10];

的描述,()是正确的

gg)pa是一个指向数组的指针,所指向的数组是10个char型元素

hh)pa是一个指向某数组中第10个元素的指针,该指针是char型变量

ii)pa[5]表示某个数组的第5个元素的值

jj)pa是一个具有10个元素的指针数组,每一个元素是一个char型指针

10.下面的程序会()

main(){

intx=10,y=5,z=5;

if(z=x-2*y)printf(“****”);

elseprintf(“####”);

}

kk)有语法错误不能通过编译

ll)可以通过编译,但不能通过连接,因而不能运行

mm)输出****

nn)输出####

11.考虑下面的代码:

chara[100];

a[99]=*((char*)(((int)&

a[0])+4))

如果整数为32位宽,下面哪个值等于a[99]?

oo)a[0]+4

pp)a[3]

qq)a[4]

rr)theintegerstoredinthebytesa[4],a[5],a[6]anda[7]

12.考虑一下代码片段:

#include<

stdio.h>

intcallee(void){

intcount=5;

printf("

%d"

(int)&

count);

returncount;

}

intmain(intargc,char*argv[]){

intcount=4;

count=callee();

return0;

}

下面哪项正确地描述了程序输出结果?

ss)两个不同的整数被打印,并且从所给信息无法得知其中的任何一个值

tt)同一个整数被打印两次,并且它的值无法从所给信息中得知

uu)5在同一行被打印两次

vv)5和4按顺序在同一行被打印

13.阅读下列代码,判断下面几句话中哪句关于输出的描述是正确的?

()

int*jp=&

i;

intmain(inti,char*argv[]){

%d%d\n"

i,(int)jp);

ww)两个不同的整型数

xx)两个完全相同的整型数

yy)无结果,因为代码含糊无法编译

zzz)两个值,其中一个是4,另一个比4小

14.考虑下面的代码片断:

intfactorial(int*arg){

intn=*arg;

if(n==1)returnn;

returnn*factorial(n-1);

在上面的代码片段执行过程中,变量n被分配到()

aaa)许多地址,并且编译器不知道其中的任何一个地址

bbb)编译器选定的许多地址

ccc)仅一个地址,并且该地址由编译器选定

ddd)仅一个地址,并且编译器不知道该地址

15以下程序的输出结果是()

func1(inta,intb)

{

return(a+b);

func2(inta,intb)

return(a-b);

func3(int(*t)(),intx,inty)

return(*t)(x,y);

main()

intx,(*p)(int,int);

p=func1;

x=func3(p,9,3);

x+=func3(func2,8,3);

printf(“%d\n”,x);

eee)3

fff)9

ggg)17

hhh)27

16.下面哪一个负责数据从CPU寄存器到缓存的传输?

iii)硬件

jjj)操作系统

kkk)寄存器

lll)编译器

17.假设你的计算机是32位,具有128个32字节的直接映射缓存线。

在下面的代码中,编译器在地址0x800000处分配数组a,在地址0x801000处分配数组b。

在该代码执行前,假设a和b从未被使用,因此它们不会在缓存中。

请问,在执行这段代码时,a和b数组能够从内存读入缓存的最小字节分别是多少?

intb[1024];

inta[1024];

for(i=0;

i<

17;

sum+=a[i]+b[i],i++);

mmm)17

nnn)68

ooo)96

ppp)1088

18.通过调用以下的函数,关于缓存的哪些事实能够判定?

intdata[1<

<

20];

voidcallee(intx){

inti,result;

for(i=0;

(1<

20);

i+=x){

result+=data[i];

I.缓存线大小

II.缓存大小

III.缓存速度

qqq)只有I

rrr)I和II

sss)I和III

ttt)I、II和III

19下面哪个对存储层次结构(memoryhierarchy)的描述正确?

()

uuu)存储层次结构使得代码执行变慢,但是允许它们规模增加

vvv)存储层次结构既利用了SRAM的速度,又考虑了磁盘的空间

www)存储层次结构是一种决定内存分配策略的方法

xxx)存储层次结构限制了程序的大小,但是允许它们执行得更快

20阅读下面C代码片段:

charq[]="

donotoverflow"

charr[]="

memory"

chars[24];

strcpy(s,q);

strcat(s,r);

intlen=strlen(s);

问:

当该代码片段执行完毕时,变量len的值是()

yyy)21

zzzz)22

aaaa)23

bbbb)24

 

二、改错题。

请指出下面代码的错误之处,给出正确代码,并说明错误的原因。

(1-6题每题2分,7-10题每题3分,共24分)

示例:

y=x*300.0f-2000.0(缺少结束符“;

”)正确代码:

y=x*300.0f-2000.0;

1、程序员意图:

由用户输入变量i和d的值,然后由系统输出。

(2分)

doubled;

scanf("

%d%g"

i,d);

printf("

2、程序员意图:

数组动态分配,并给某一数组成员赋值。

#defineARRAY_SIZE100

int*a=(int*)malloc(ARRAY_SIZE);

a[99]=0;

3、程序员意图:

如果指针a指向的值大于0,则使该值减去1。

voiddec_positive(int*a)

{

*a--;

//decrementtheinteger

if(*a<

0)*a=0;

//makesureaispositive

4、程序员意图:

动态分配一个A[m][n]的数组,并充分考虑代码在不同硬件上的通用性。

int**makeArray1(intn,intm)

inti;

int**A=(int**)Malloc(n*sizeof(int));

for(i=0;

i<

n;

i++)

A[i]=(int*)Malloc(m*sizeof(int));

returnA;

5、程序员意图:

动态分配及释放内存。

voidmy_write(x)

...usex...

free(x);

int*x=(int*)malloc(sizeof(int*)*N);

...

my_read(x);

...

my_write(x);

free(x);

6、程序员意图:

7、程序员意图:

初始化一个堆,存放错误信息。

(3分)

voidmy_function(char*msg)

//allocatespaceforastring

char*full_msg=(char*)malloc(strlen(msg)+100);

strcpy(full_msg,"

Thefollowingerrorwasencountered:

"

);

strcat(full_msg,msg);

if(!

display(full_msg))return;

...

free(full_msg);

8、程序员意图:

声明一个结构体,给它及其成员分配内存空间,程序执行完毕后释放资源。

typedefstruct{

char*name;

intage;

char*address;

intphone;

}Person;

voidmy_function()

Person*p=(Person*)malloc(sizeof(Person));

p->

name=(char*)malloc(M);

address=(char*)malloc(N);

free(p);

9、程序员意图:

搜索一个符合条件的指针。

int*search(int*p,intval)

while(*p&

*p!

=val)

p+=sizeof(int);

returnp;

10、程序员意图:

将array数组初始化为从0到9的10个数。

#defineARRAY_SIZE10

voidnatural_numbers(void){

intarray[ARRAY_SIZE];

i=1;

while(i<

=ARRAY_SIZE){

array[i]=i-1;

i=i+1;

三、简答与计算题(36分)

1.解释静态分配与动态分配的概念及它们的不同点,并说明它们的用途。

(6分)

静态分配在全局中声明变量,或在函数体中用static,在声明时若没被赋初值则赋为0,放置于栈的最低层中,生命周期是整个程序的生命周期。

在编译阶段决定。

动态分配通过在函数调用中声明局部变量实现,生命周期是此函数的生命周期,动态分配有堆分配与栈分配2种方式。

2.简述使用堆栈进行函数调用的过程。

第一步:

压参,由右至左入栈

第二步:

压入函数返回地址。

第三步:

压入FramePointer。

第四步:

压入声明的变量

第五步:

执行函数的代码

第六步:

将返回值压入寄存器中。

第七步:

将SP设定至为FramePointer

第八步:

弹出栈顶元素(FramePointer)

第九步:

弹出栈顶元素(ReturnAddress)并返回函数

简要解释80/20原理和Amdahl定律。

说明对代码进行性能定量量测可以采用哪些方法,这些方法各自具有哪些优点,又具有哪些缺点。

直意为80%时间是由20%的代码耗费的,也就是每个程序都存在性能提升的瓶颈,只要克服了这个瓶颈,性能就会大大提升。

Amdahl定律为(公式),揭示了被优化的代码在被优化后与优化前的时间对比。

3.请画出计算机中内存层次结构的金字塔结构,并说明内存缓存(cache)的优点。

4.3M决定在白纸上印黄方格,做成小贴纸。

这个过程中,他们需要设置方格中每个点的CMYK(蓝色,红色,黄色,黑色)值。

3M雇佣你判定下面算法在一个2048字节、直接映射、块大小为32字节的数据高速缓存上的有效性。

有如下定义:

structpoint_color{

intc;

intm;

inty;

intk;

structpoint_colorsquare[16][16];

inti,j;

有如下假设:

●sizeof(int)==4;

●square起始于存储器地址0;

●高速缓存起始为空;

●惟一的存储器是对于square数组中的元素。

变量i和j被存放在寄存器中。

a.确定下列代码的高速缓存性能:

16;

i++){

for(j=0;

j<

j++){

square[i][j].y=1;

square[i][j].c=0;

square[i][j].m=0;

square[i][j].k=0;

写总数是多少?

在高速缓存中命中的写总数是多少?

命中率是多少?

b.要提高a小题中代码的缓存命中率,可以采取什么方法?

(即怎样改写代码?

)写出改写后的代码,并计算出你改写后的代码的命中率,以证明代码确实已改良。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1