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

题目

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


相似考题
更多“考虑下面的程序: for (i=0;i20;i++)                for(j=0;j10;j++)               a[i]:=a[i]×j 试举例说明该程序的空间局部性和时间局部性。”相关问题
  • 第1题:

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

    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列对应位置的元素。

  • 第2题:

    以下程序的输出结果是()。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

  • 第3题:

    以下程序的执行结果是______。 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

  • 第4题:

    下列程序的输出结果是 include void main( ) {int a[3],i,j,k=2; for(i=

    下列程序的输出结果是 #include<iostream.h> void main( ) { int a[3],i,j,k=2; for(i=0;i<3;i++)a[i]=i; for(i=0;i<k;i++) for(j=0;j<k;j++) a[j]=a[i]; cout<<a[2];}

    A.2

    B.3

    C.1

    D.0


    正确答案:A
    解析:本题里有三个for循环,但要分清楚,第一个是单独的给三个元素赋值,赋完值后三个a[0]=0,a[1]=1,a[2]=2;后面的两个for是嵌套循环,对数组元素的赋值,但由于k=2,初值已定for里的条件是小于k,所以不管怎么处理都影响不到a[2],故答案为2。

  • 第5题:

    有以下程序main(){ int n[3],i,j; for(i=0;i<3;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]);}程序运行后的输出结果是A.2 B.1C.0 D.3


    正确答案:D
    初始时定义一个大小为3个一维整型数组,第一个for语句是对数组赋初值,每个值都为0。后面是一个for语句的嵌套调用,外层的循环变量i的取值为[0,2],内层循环变量的取值范围为[0,2]。最初外层的循环变量i=0,内层的循环变量j取值从0到2,计算n[j]=n[0]+1,得到n[0]=1,n[1]=1,n[2]=1。外层for语句的循环变量为1时,内层的循环变量j取值从0到2,计算n[j]=n[1]+1,得到n[0]=2,n[1]=2,n[2]=2。外层for语句的循环变量为2时,内层的循环变量j取值从0到2,计算n[j]=n[2]+1,得到n[0]=3,n[1]=3,n[2]=3。最后的输出结果为3。

  • 第6题:

    分析下列程序,其最终执行结果是______。 main() { int n[3],i,j,k; for(i=0;i<3;i++)n[i]=O; k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]-1; printf("%d\n",n[0]); }

    A.-2

    B.-1

    C.0

    D.-3


    正确答案:D
    解析:当i为0,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[0]-1, n[0]值变为-1:在j为1时,执行n[j]=n[i]-1;,即n[1]=n[0]-1,将-2赋给n[1]。当i为1时,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[1]-1,n[0]值变为-3;在j为1时,执行n[j]=n[i]-1;,即n[1]=n[1]-1,将-3赋给n[1];最后n[0]和n[1]的值均为-3。

  • 第7题:

    下列程序的输出结果是【】。 include void main() { inta(5),b(6),i(0)1j(0); switch(a

    下列程序的输出结果是【 】。

    include<iostream.h>

    void main()

    {

    inta(5),b(6),i(0)1j(0);

    switch(a)

    {

    case 5:switch(b)

    {

    case 5:i++;break;

    case 6:j++;break;

    defaun:i++;j++;

    }

    case 6:i++;

    j++;

    break;

    default:i++;j++;

    }

    cout<<i<<","<<j<<endl;

    }


    正确答案:12
    1,2

  • 第8题:

    有以下程序: main { int i,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<=3;j++) {if(j=0;j<=3;j++) x++; } x++; } printf("x=%d\n",x); } 程序执行后的输出结果是( )。

    A. x=4

    B.x=8

    C.x=6

    D.x=12


    正确答案:B
    当i=0时,i<2成立,执行第一个for循环x自加为1,接着执行第二个for循环;j=0时j<=3成立,此时if不成立,执行x++后,x为2;接着j=1时,i<=3成立,继续循环,此时if成立,continue是跳出本次循环,继续下一次循环,不再执行x++了;接着j=2时,j<=3成立,此时if不成立,执行其后的语句;当j=4时,退出第二个循环,接着执行循环外部的x++,x为4;当i=1时,i<2成立,执行第一个循环,x=5,此时接着执行循环外部的语句,即第二个循环;j=0时j<3成立,此时if不成立,x++后,x为6,接着j为1时,j<=3成立,继续循环,此时if成立,不再执行x++了;接着J=2时,j<=3成立,此时if不成立,执行其后的x++,x为7;i=3时,j<=3成立,此时if成立,不再执行其后的语句了;当j=4时,退出第二个循环,执行循环外部的语句,最终x为8,故选B选项。

  • 第9题:

    试题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]);

    }


    正确答案:
    试题13分析
    for(i=0; i<2;i++)    n[i]=0;使得每个项的值赋为0。
    i=0,j=0,n[0]=n[0]+1=1;i=0,j=1,n[1]=n[0]+1=2;
    i=1,j=0,n[0]=n[1]+1=3;i=1,j=1,n[1]=n[1]+1=3;
    试题13答案
      3

  • 第10题:

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


    正确答案:O(n2

  • 第11题:

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

    正确答案: 当数组元素a[0],a[1],…,a[19]存放在一个页面中时,其空间局部性和时间局部性较好,也就是说,在很短时间内执行都挂行循环乘法程序,而且数组元素分布在紧邻连续的存储单元中。当数组元素存放在不同页面中时,其时间局部性虽相同,但空间局部性较差,因为处理的数组元素分布在不连续的存储单元中。
    解析: 暂无解析

  • 第12题:

    单选题
    有以下程序: #include  main() {  char a[4][4]={' '};  int i,j;  for(i=0;i<4;i++)  {   a[i][0]=a[i][3]='#';   for(j=1;j<3;j++)   {    a[0][j]=a[3][j]='#';    if((i!=0)&&(i!=3))a[i][j]='o';   }  }  for(i=1;i<3;i++)  {   for(j=0;j<4;j++)    printf("%2c",a[i][j]);   printf("");  } } 程序的运行结果是(  )。
    A

    # o o #<换行> # o o #

    B

    # # # #<换行> # o o #

    C

    # o o #<换行> # # # #

    D

    # # # #<换行> # # # #


    正确答案: A
    解析:
    程序的执行过程为:定义4行4列二维数组字符a并且初始化为a[0][0]=' ',其他元素均为0。执行for循环将数组第一列和第四列赋值为'#'。执行for循环将数组第一行和第四行的第二个到第三个元素赋值为'#',然后将剩余元素全部赋值为'o'。此时矩阵为{{#,#,#,#}, {#,o,o,#}, {#,o,o,#}, {#,#,#,#}}。之后输出矩阵第二行与第三行元素,答案选择A选项。

  • 第13题:

    现在有如下程序

    #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

  • 第14题:

    有如下程序: 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。

  • 第15题:

    下面程序段的时间复杂度为 ( ) 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)。

  • 第16题:

    有以下程序 main() { int n[3],i,j; for(i=0;i<3;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]); } 程序运行后的输出结果是( )

    A.2

    B.1

    C.0

    D.3


    正确答案:D

  • 第17题:

    有以下程序

    include<stdio.h>

    main( )

    {int n[2l,ij;

    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
    3 解析:初始化后:
    N[0]=0,n[1]=0
    i=0,j=0,n[0]=n[0]+1=1
    j=1,n[1]=n[0]+1=1=2
    i=1,j=0,n[0]=n[1]+1=3
    j=1,n[1]=n[1]+1=3

  • 第18题:

    以下程序按下现指定的数据给x数组的下三角置数,并按如下形式输出,请填空。

    4

    3 7

    2 6 9

    1 5 8 10

    include <stdio.h>

    main()

    { int x[4][4],n=0,i,j;

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

    for(i=3;i>j;【 】) {n++;x[i][j]=【 】:}

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

    { for(j=0;j<=i;j++) printf("%3d",x[i][j]);

    printf("\n");

    }

    }


    正确答案:i- n
    i- n 解析:观察本题下三角数据可以发现,其数值是先按行(从第3行到第0行),然后按列(从第0列到第3列)对其进行1到10的赋值的,在程序的第—组嵌套for循环中,通过外循环来控制列的变化,从第0列到第3列,通过内循环来控制行的变化,从第3行到第j行,由于行变量i是从最大行逐渐递减的,所以本题第一空应填i-或与其等效的形式。在循环体中,用变量n来控制被赋的值1到10,所以本题第二个空应填n。

  • 第19题:

    有如下程序: main() { int a[3][3]={{1,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。

  • 第20题:

    下面的程序段运行后,输出结果是 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
    解析:本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:

    由于数组的下标是从。开始的,所以二维数组元素a[i][j]表示的是二维数组a的第i+1行、第j+1列对应位置的元素。

  • 第21题:

    下列程序段的时间复杂度为()。for(i=0;i<m;i++)for(j=0;j<t;j++)e[i][j]=0;for(i=0;i<m;i++)for(j=0;j<t;j++)for(k=0;k<n;k++)c[i][j]_c[i][j]+a[i][k]×b[k][j];

    A.O(m×n×t)
    B.O(m+n+t)
    C.O(m×t+n)
    D.O(m+n×t)

    答案:A
    解析:
    在程序段中,有两段循环程序,第一段是一个双层嵌套循环,另一个是三层嵌套循环,所以基本操作是c[i][j]=c[i][j]+a[i][k]×b[k][j],此基本操作共执行m×t×n次。

  • 第22题:

    填空题
    下面程序段的时间复杂度是() for(i=0;i<n;i++)  for(j=0;j<n;j++)  A[i][j]=0;

    正确答案: O(n2
    解析: 暂无解析

  • 第23题:

    单选题
    有以下程序:#include #include main(){ char w[20], a[5][10] = {abcdef, ghijkl, mnopq, rstuv, wxyz}; int i,j; for(i=0;i<5;i++) {  j=0;  while(a[i][j]!='\0')j++;  w[i]=a[i][j-2]; } w[5]='\0'; puts(w);}程序运行后的输出结果是(  )。
    A

    agmrw

    B

    ekpuy

    C

    djotx

    D

    flqvz


    正确答案: C
    解析:
    本题程序功能是依次将a[0]、a[1]、a[2]、a[3]对应的字符串中的倒数第二个字符赋给w[0],w[1],w[2],w[3],答案选择B选项。