考虑下面的程序: for (i=0;i20;i++)                for(j=0;j10;j++)               a[i]:=a[i]×j 试举例说明该程序的空间局部性和时间局部性。

题目

考虑下面的程序: for (i=0;i<20;i++)                for(j=0;j<10;j++)               a[i]:=a[i]×j 试举例说明该程序的空间局部性和时间局部性。

参考答案和解析
正确答案:当数组元素a[0],a[1],…,a[19]存放在一个页面中时,其空间局部性和时间局部性较好,也就是说,在很短时间内执行都挂行循环乘法程序,而且数组元素分布在紧邻连续的存储单元中。当数组元素存放在不同页面中时,其时间局部性虽相同,但空间局部性较差,因为处理的数组元素分布在不连续的存储单元中。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

以下程序运行后的输出结果是【13】。

include<stdio.h>

main()

{ int n[2],i,j;

for(i=0;i<2;i++)n[i]=0;

for(i=0;i<2;i++)

for(j=0;j<2;j++)n[j]=n[i]+1;

printf("%d\n",n[1]);

}


正确答案:
3 解析:该题先是初始化数组n[2]中的元素全部赋值为0,然后执行两层for循环,当i=0,j=0,a[0]为1、a[1]为0,当j=1时,a[0]为1、a[1]为2;当i=1,j=0,a[0]为3、a[1]为2,当i=1,j=1时,a[0]为3、a[1]为3。

第2题:

下面的程序段运行后,输出结果是

int i,j,x=0;

static int a[8][8];

for(i=0;i<3;i++)

for(j=0;j<3;j++)

a[i][j]=2*i+j;

for(i=0;i<8;i++)

x+=a[i][j];

printf("%d",x);

A.9

B.不确定值

C.0

D.18


正确答案:C
解析:本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:
0  1  2
2  3  4
4  5  6
由于数组的下标是从0开始的,所以二维数组元素a[i][j]表示的是二维数组a的第i+1行、第j+1列对应位置的元素。

第3题:

以下程序运行后的输出结构是。main(){ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i;j<3;j++)a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",a[i][j]); printf("\n"); }}


正确答案:0 2 3 0 0 6 0 0 0
将a[0][0],a[1][0],a[2][0],a[1][1],a[2][1],a[2][2]赋值为0,所a[][3]={0,2,3,0,0,6,0,0,0}

第4题:

以下程序的执行结果是______。 main() { int i,j,m=O,n=0; for (i=0;i<2;i++) {for (j=0;j<2;j++) if(j>=i) m=1;n++; printf("%d\n",n); } }

A.4

B.2

C.1

D.0


正确答案:C

第5题:

以下程序的输出结果是()。includevoid main(){int a(5),b(6),i(0),j(0);switch(a) {

以下程序的输出结果是( )。 #include<iostream.h> void main() { int a(5),b(6),i(0),j(0); switch(a) { case 5:switch(b) { case 5:i++;break; case 6:j++;break; default:i++;j++; } case 6:i++; j++; break; default:i++;j++; } cout<<i<<","<<j<<endl; }

A.1,2

B.1,3

C.2,2

D.2,3


正确答案:A

第6题:

以下程序的输出结果是 ( ) main( ) { int n[3] [3],i,j; for (i=0;i<3;i+ +) for(j=0;i<3;++) n[i][j]=i+j; for(i=0;i<2;i++) for(j=0,j<2;j++) n[i+1][j+1]+=[i][j]; printf("%d\n",n[1][j]); }

A.14

B.0

C.6

D.值不确定


正确答案:C

第7题:

现在有如下程序

#include "stdio.h"

main()

{char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!=′\0′;i++)

if(s[i]!=′H′______)

s[j]=′\0′;

puts(s);}

这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是

A.s[j++]=s[i];j++;

B.s[j]=s[i++];j++;

C.s[j++]=s[i];

D.s[j]=s[i];


正确答案:C

第8题:

阅读下面程序: include void main() { int i,j,row=0,column=0,m; static int a[3]

阅读下面程序:

include <iostream.h>

void main()

{

int i,j,row=0,column=0,m;

static int a[3][3]={ 100,28,72,-30,2,-100};

m=a[0][0];

for (i=0;i<3;i++)

for (j=0;j<3;j++)

if (a[i][j]<m)

{

m=a[i][j];

row=i;

column=j;

}

cout<<m<<","<<row<<","<<column<<endl;

}

该程序的功能是【 】,其执行结果为上丝【 】。


正确答案:找到数组a中的最小元素并输出其数值及行列值 -10012
找到数组a中的最小元素并输出其数值及行列值 -100,1,2

第9题:

有如下程序: main() { int a[3][3]={{i,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); } 该程序的输出结果是______。

A.18

B.19

C.20

D.21


正确答案:A
解析:题中的外循环只执行了2次:第1次:a[1][0]=3,a[1][1]=4,所以s=7;第2次:a[2][0]=5,a[2][1]=6,a[2][2]=0,所以s=7+5+6+0=18。

第10题:

下面程序段的时间复杂度为 ( ) for(i=0;i<m;i++) for(j=0;j<n;j++) A[i][j]=i*j;

A.O(m2)

B.O(n2)

C.O(m*n)

D.O(m+n)


正确答案:C
解析:此程序的时间复杂度即为程序中循环次数的时间耗费。由程序为嵌套循环,外层循环的时间复杂度T(n1)=m,内层循环的时间复杂度T(n2)=n,则此程序的时间复杂度T(n)=m*n,即为0(m*n)。

更多相关问题