第7章计算机.docx

上传人:b****5 文档编号:7013556 上传时间:2023-01-16 格式:DOCX 页数:26 大小:53.88KB
下载 相关 举报
第7章计算机.docx_第1页
第1页 / 共26页
第7章计算机.docx_第2页
第2页 / 共26页
第7章计算机.docx_第3页
第3页 / 共26页
第7章计算机.docx_第4页
第4页 / 共26页
第7章计算机.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

第7章计算机.docx

《第7章计算机.docx》由会员分享,可在线阅读,更多相关《第7章计算机.docx(26页珍藏版)》请在冰豆网上搜索。

第7章计算机.docx

第7章计算机

一、选择题

1.答案选择:

B

考点:

一维数组的定义

分析:

一维数组定义的形式为:

类型名数组名[常量表达式]

注意点:

(1)常量表达式不能省略,不能为变量可以使宏定义名

(2)数组名是用户定义标示符。

A答案中省略了常量表达式,因此是错误的。

C答案中没有0…100这种形式的常量表达式。

D答案常量表达式不能为变量。

2.答案选择:

B

考点:

循环和数组元素的引用

分析:

intp[8]={11,12,13,14,15,16,17,18}

(1)i=0,j=0,判断:

i++<7为真,i的值为1,判断if中的表达式(p[1]%2)为假,不执行j+=p[1]

(2)i=1,j=0,判断:

i++<7为真,i的值为2,判断if中的表达式(p[2]%2)为真,执行j+=p[0]后j的值为13

(3)i=2,j=13,判断:

i++<7为真,i的值为3,判断if中的表达式(p[3]%2)为假,不执行j+=p[1]

(4)i=3,j=13,判断:

i++<7为真,i的值为4,判断if中的表达式(p[4]%2)为真,执行j+=p[0]后j的值为28

(5)i=4,j=28,判断:

i++<7为真,i的值为5,判断if中的表达式(p[5]%2)为假,不执行j+=p[1]

(6)i=5,j=28,判断:

i++<7为真,i的值为6,判断if中的表达式(p[6]%2)为真,执行j+=p[0]后j的值为45

(7)i=6,j=45,判断:

i++<7为真,i的值为7,判断if中的表达式(p[1]%2)为假,不执行j+=p[1]

(8)i=7,j=45,判断:

i++<7为假,结束循环

(9)输出j的值为45

3.答案选择:

D

考点:

循环、数组元素的引用和逻辑运算

分析:

intp[7]={11,13,14,15,16,17,18}

(1)i=0,k=0,判断:

i<7&&p[0]%2为真,执行k=k+p[0]后k的值为11,执行i++后i的值为1。

(2)i=1,k=11,判断:

i<7&&p1]%2为真,执行k=k+p[1]后k的值为24,执行i++后i的值为2。

(3)i=2,k=24,判断:

i<7&&p[2]%2为假,结束循环。

注意:

2<7&&p[2]%2左边为真,但是右边为假,那么整个表达式为假。

(4)输出k的值为24。

4.答案选择:

考点:

循环嵌套,交换

分析:

intx[]={1,3,5,7,2,4,6,0}

第一个嵌套循环

(1)i=0,i<3为真

1)j=2,j>=0为真,判断(x[3]>x[2])为真,进行交换后x[]={1,3,7,5,2,4,6,0},j--

2)j=1,j>=0为真,判断(x[2]>x[1])为真,进行交换后x[]={1,7,3,5,2,4,6,0},j—

3)j=0,j>=0为真,判断(x[1]>x[0])为真,进行交换后x[]={7,1,3,5,2,4,6,0},j—

4)j=-1,j>=0为假,i++

(2)i=1,i<3为真

1)j=2,j>=1为真,判断(x[3]>x[2])为真,进行交换后x[]={7,1,5,3,2,4,6,0},j--

2)j=1,j>=1为真,判断(x[2]>x[1])为真,进行交换后x[]={7,5,1,3,2,4,6,0},j—

3)j=0,j>=1为假,i++

(3)i=2,i<3为真

1)j=2,j>=2为真,判断(x[3]>x[2])为真,进行交换后x[]={7,5,3,1,2,4,6,0},j--

2)j=1,j>=2为假,i++

(4)i=3,i<3为假

第二个嵌套循环:

(1)i=0,i<3为真

1)j=4,j<7为真,判断(x[5]

2)j=5,j<7为真,判断(x[6]

3)j=6,j<7为真,判断(x[7]

4)j=7,j<7为假,i++

(2)i=1,i<3为真

1)j=4,j<6为真,判断(x[5]

2)j=5,j<6为真,判断(x[6]

3)j=6,j<6为假,i++

(3)i=2,i<3为真

1)j=4,j<5为真,判断(x[5]

2)j=5,j<5为假,i++

(4)i=3,i<3为假

第三个循环:

for(i=0;i<8;i++)输出x[i]的值为:

75310246

5.答案选择:

B

考点:

二维数组的定义

分析:

形式:

类型名数组名[常量表达式1][常量表达式2]

A)定义的时候不能省略常量表达式1

B)真确,表示定义了一行三列的数组a,即inta[1][3]={2*3,0,0}

C)缺少初始化值,inta[][3]={}和inta[][3]={0}事有区别的,第一种形式没有任何的初始化值,因此数组的元素不确定所以是出错的,第二种形式有值且都为0

D)inta[2][3]={{1},{2},{3,4}},a数组定义时只有两行三列,但是在赋初始值时却是三行三列的。

6.答案选择:

D

考点:

二维数组的定义

分析:

二维数组不能省略列下标。

D选项中省略了列下标,因此是错误的。

7.答案选择:

考点:

二维数组的定义

分析:

A答案中使用了变量作为数组中的常量表达式,因此是错误的。

B答案中定义的时候只定义了一行两列的数组,但是在赋初始值时时二行的,因此是错误的。

C答案中是省略了列下标,因此是错误的。

8.答案选择:

C

分析:

intm[][3]={1,4,7,2,5,8,3,6,9}

(1)i=0,k=2,i<3为真,输出m[k][i],即m[2][0]的值为3,执行i++

(2)i=1,k=2,i<3为真,输出m[k][i],即m[2][1]的值为6,执行i++

(3)i=2,k=2,i<3为真,输出m[k][i],即m[2][2]的值为9,执行i++

(4)i=3,k=2,i<3为假

(5)输出的结果为:

369

9.答案选择:

A

分析:

inta[][3]={{1,2,3},{4,5,0}}

(1)i=0,i<3为真,判断if表达式(i<2)为真,a[1][0]=a[1][0]-1,a[1][0]=3,那么数组a中元素变为:

{{1,2,3},{3,5,0}},执行i++后i的值为1

(2)i=1,i<3为真,判断if表达式(i<2)为真,a[1][1]=a[1][1]-1,a[1][1]=4,那么数组a中元素变为:

{{1,2,3},{3,4,0}},执行i++后i的值为2

(3)i=2,i<3为真,判断if表达式(i<2)为假,执行else:

a[1][2]=1,那么数组a中元素变为:

{{1,2,3},{3,4,1}},执行i++后i的值为3

(4)i=3,i<3为假,结束循环

(5)输出a[0][1]+a[1][1]+a[1][2]的值为7

10.答案选择:

B

分析:

intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}

(1)i=0,s=0,i<4为真,执行s+=aa[0][1],s的值为2,执行i++

(2)i=1,s=2,i<4为真,执行s+=aa[1][1],s的值为8,执行i++

(3)i=2,s=8,i<4为真,执行s+=aa[2][1],s的值为17,执行i++

(4)i=3,s=17,i<4为真,执行s+=aa[3][1],s的值为19,执行i++

(5)i=4,s=19,i<4为假,结束循环

(6)最终输出s的值为19

11.答案选择:

C

分析:

C选项中&aa[0]++首先引用aa[0],后对aa[0]的值增加一,那么&aa[0]++将获得aa[0]的地址,不是aa[0]的地址。

12.答案选择:

分析:

inta[]={1,2,3,4,5,6,7,8,9},*p=a,i;指针p指向了数组a的首地址。

A答案a[p-a]表示a[0]

B答案*(&a[i])表示:

首先取出a[i]的地址,由于题目给出i的值为0到8,因此不存在下标越界。

在(&a[i])前面加上*后表示取出a[i]的值,因此B答案是正确的。

C答案p[i],这主要考查指针当作数组用的,如果一个指针指向了一个一维数组,那么可以将指针当做数组用。

如p[i]就表示数组中第i个下标的值。

D答案*(*(a+i))用来表示取出二维数组的值,不能用于一维数组。

13.答案选择:

A

分析:

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;指针p指向了数组a的首地址。

执行输出语句中表达式*(p+2)的值,首先指针p指向了数组a的首地址,那么p+2就表示下标为2的数组元素的地址,就是a[2]的地址。

在p+2前面加上*后表示取出对应的值,就是a[2]的值,即为3。

14.答案选择:

B

分析:

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;由于p=&a[3]指向了a[3]的地址,那么q=p+2,q指针就指向了a[5]的地址。

*p+*q就相当于a[3]+a[5],得到的值为10。

15.答案选择:

C

分析:

inta[]={2,4,6,8,10},y=0,x,*p;p=&a[1];p指针指向了a[1]的地址,执行循环:

(1)x=1,y=0,x<3成立,执行y+=p[1],即:

y=y+a[2]得到y的中为6,继续执行x++

(2)x=2,y=4,x<3成立,执行y+=p[2],即:

y=y+a[3]得到y的中为14,继续执行x++

(3)x=3,y=10,x<3不成立,结束循环

(4)输出y的值为14

16.答案选择:

A

分析:

for(p=a;p

for(i=0;i<10;i++)printf(“%d”,a[i]);区别:

for(p=a;p

for(i=0;i<10;i++)printf(“%d”,a[i]);使用了直接输出数组元素的方法。

17.答案选择:

D

分析:

D答案中输出列表中的表达式为(*p)++,首先p指向了数组a的首地址,那么*p的值就是a[0]为2,(*p)++的就是a[0]++得到的值为3。

for(i=0;i<6;i++)printf(“%2d”,(*p)++);输出的结果为:

333333

18.答案选择:

A

分析:

inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q=NULL;指针q指向了NULL,指向了空,称q为空指针。

*q=*(p+5)表示q将访问a[10]的地址,这样将得到一个错误的信息。

记住:

如果通过一个空指针去访问一个存储单元时,将会得到一个错误的信息。

19.答案选择:

D

分析:

指针只能指向地址,不能将普通变量或是值赋值给指针。

A答案中p=100,将一个常量值赋值给指针是错误的

B答案中p=a[5],a[5]是数组中下标为5的数组元素,是一个值不是地址。

因此是错误的。

C答案p=a[2]+2,和B答案一样a[2]+2得到的也是一个值,不是地址。

D答案p=a+2,a表示数组的首地址,a+2表示地址的相加,得到的也是一个地址,就是a[2]的地址。

20.答案选择:

D

分析:

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];

首先指针p指向了a[3]的地址,那么p[5]就应该是a[8],b=p[5]就是b=a[8],p的值就为9。

21.答案选择:

B

分析:

intx[8]={8,7,6,5,0,0},*s;s=x+3;

首先s指针指向了x[3]的地址,那么s[2]就是x[5],结果就该为:

0

22.答案选择:

C

分析:

inti,s=0,t[]={1,2,3,4,5,6,7,8,9}

(1)i=0,i<9成立,执行:

s+=*(t+0),s的值为1,执行i+=2

(2)i=2,i<9成立,执行:

s+=*(t+2),s的值为4,执行i+=2

(3)i=4,i<9成立,执行:

s+=*(t+4),s的值为9,执行i+=2

(4)i=6,i<9成立,执行:

s+=*(t+6),s的值为16,执行i+=2

(5)i=8,i<9成立,执行:

s+=*(t+8),s的值为25,执行i+=2

(6)i=9,i<9不成立,结束循环。

(7)输出的结果为:

25

23.答案选择:

B

分析:

inta[3][3],*p,i;p=&a[0][0];注意:

指针p是一维指针却指向了二维数组,这样的情况是允许的,二维数组在逻辑上是连续存储的。

(1)i=0,i<9成立,p[0]=0+1,即a[0][0]=1,执行i++

(2)i=1,i<9成立,p[1]=1+1,即a[0][1]=2,执行i++

(3)i=2,i<9成立,p[2]=2+1,即a[0][2]=3,执行i++

(4)i=3,i<9成立,p[3]=3+1,即a[1][0]=4,执行i++

(5)i=4,i<9成立,p[4]=4+1,即a[1][1]=5,执行i++

(6)i=5,i<9成立,p[5]=5+1,即a[1][2]=6,执行i++

(7)i=6,i<9成立,p[6]=6+1,即a[2][0]=7,执行i++

(8)i=7,i<9成立,p[7]=7+1,即a[2][1]=8,执行i++

(9)i=8,i<9成立,p[8]=8+1,即a[2][2]=9,执行i++

(10)i=9,i<9不成立,结束循环

(11)输出a[1][2]的值为6

24.答案选择:

D

分析:

inta[3][3],*p,i;p=&a[0][0];

第一个循环:

(1)i=0,i<9成立,p[0]=0,即a[0][0]=0,执行i++

(2)i=1,i<9成立,p[1]=1,即a[0][1]=1,执行i++

(3)i=2,i<9成立,p[2]=2,即a[0][2]=2,执行i++

(4)i=3,i<9成立,p[3]=3,即a[1][0]=3,执行i++

(5)i=4,i<9成立,p[4]=4,即a[1][1]=4,执行i++

(6)i=5,i<9成立,p[5]=5,即a[1][2]=5,执行i++

(7)i=6,i<9成立,p[6]=6,即a[2][0]=6,执行i++

(8)i=7,i<9成立,p[7]=7,即a[2][1]=7,执行i++

(9)i=8,i<9成立,p[8]=8,即a[2][2]=8,执行i++

(10)i=9,i<9不成立,结束循环

第二个循环:

(1)i=0,i<3为真,输出a[1][0]为3,执行i++

(2)i=1,i<3为真,输出a[1][1]为4,执行i++

(3)i=2,i<3为真,输出a[1][2]为5,执行i++

(4)i=3,i<3为假

(5)输出的结果为:

345

25.答案选择:

B

分析:

inta[3][2]={0},(*ptr)[2],i,j;

执行第一个循环:

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

{ptr=a+i;

scanf(“%d”,*ptr);

ptr++;

}

在运行时输入:

123<回车>

(1)i=0,i<2成立,执行循环体:

ptr=a+0,scanf(“%d”,*ptr);后a[0][0]的值为1,ptr++后ptr指向下一行的首地址。

(2)i=1,i<2成立,执行循环体:

ptr=a+1,scanf(“%d”,*ptr);后a[1][0]的值为2,ptr++后ptr指向下一行的首地址。

(3)i=2,i<2不成立,那么将结束循环,数值3将不能被输入。

执行第二个循环:

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

{for(j=0;j<2;j++)

printf(“%2d”,a[i][j]);

printf(“\n”);

}

(1)i=0,i<3成立

1)j=0,j<2成立,输出a[0][0]为1,执行j++

2)j=1,j<2成立,输出a[0][1]为0,执行j++

3)j=2,j<2不成立

4)输出换行,执行i++

(2)i=1,i<3成立

1)j=0,j<2成立,输出a[1][0]为2,执行j++

2)j=1,j<2成立,输出a[1][1]为0,执行j++

3)j=2,j<2不成立

4)输出换行,执行i++

(3)i=2,i<3成立

1)j=0,j<2成立,输出a[2][0]为0,执行j++

2)j=1,j<2成立,输出a[2][1]为0,执行j++

3)j=2,j<2不成立

4)输出换行,执行i++

(4)i=3,i<3不成立,结束循环

(5)输出的结果为:

10

20

00

26.答案选择:

B

分析:

指针数组的定义。

27.答案选择:

D

分析:

intc[4][5],(*p)[5];p=c;二维数组的引用有几种形式:

(1)直接引用:

c[i][j]

(2)指针当作数组用:

p[i][j]

(3)*(c[i]+j)

(4)*(p[i]+j)

(5)*(*(c+i)+j)

(6)*(*(p+i)+j)

28.答案选择:

D

分析:

根据27题中的几种形式来判断。

29.答案选择:

C

分析:

特别注意p[0]=a[1],判断的方法和27题中的几种形式来判断。

30.答案选择:

C

分析:

和上面几个题一样。

31.答案选择:

A

分析:

inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;pa=a;试着和第九题比较一下看有什么地方不同。

(1)i=0,i<3为真,判断if表达式(i<2)为真,pa[1][0]=pa[1][0]-1,pa[1][0]=3,那么数组a中元素变为:

{{1,2,3},{3,5,0}},执行i++后i的值为1

(2)i=1,i<3为真,判断if表达式(i<2)为真,pa[1][1]=pa[1][1]-1,pa[1][1]=4,那么数组a中元素变为:

{{1,2,3},{3,4,0}},执行i++后i的值为2

(3)i=2,i<3为真,判断if表达式(i<2)为假,执行else:

pa[1][2]=1,那么数组a中元素变为:

{{1,2,3},{3,4,1}},执行i++后i的值为3

(4)i=3,i<3为假,结束循环

(5)输出a[0][1]+a[1][1]+a[1][2]的值为7

32.答案选择:

B

分析:

intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

(1)i=0,i<3为真

1)j=0,j<=0为真,t=t+b[0][b[0][0]],即t=1+b[0][0],t的值为1,执行j++

2)j=1,j<=0为假,执行i++

(2)i=1,i<3为真

1)j=1,j<=1为真,t=t+b[1][b[1][1]],即t=1+b[1][1],t的值为2,执行j++

2)j=2,j<=1为假,执行i++

(3)i=2,i<3为真

1)j=2,j<=2为真,t=t+b[2][b[2][2]],即t=2+b[2][2],t的值为4,执行j++

2)j=3,j<=2为假,执行i++

(4)i=3,i<3为假,结束循环

(5)输出t的值为4

33、B

首先将格式printf(“%c”,‘’);改为printf(“%4c”,‘’);

本题中输出的是包括主对角线的右边的数据。

执行外循环中的语句:

A、i=0;i<4为真值,执行花括号中的语句。

1、执行内循环的第一个for语句,

①j=1,j<=i为假值,不执行内循环的第一个循环,退出第一个内循环。

2、执行内循环的第二个for语句。

该处是要输出第一行中的所有数据。

所以应该从数组的第一个数据开始输出,此时的变量i的值为0,填的内容为i.其他的三个选项值都不为0.

①j=0;j<4为真值,输出num[i][j],即1,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

②j=1;j<4为真值,输出num[i][j],即2,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

③j=2;j<4为真值,输出num[i][j],即3,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

④j=3;j<4为真值,输出num[i][j],即4,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

⑤j=4;j<4为假值,退出该循环。

执行后面的语句。

3、执行printf(“\n”);即:

换行。

执行完后返回到外循环的表达式3,i++;

B、i=1;i<4为真值,执行花括号中的语句。

1、执行内循环的第一个for语句,

①j=1,j<=i为真值,执行内循环的第一个循环,执行语句:

printf(“%4c”,‘’);即输出一个空格,该空格占有4个宽度。

执行完后执行表达式3,j++,

②j=2,j<=i为假值,不执行内循环的第一个循环,退出第一个内循环。

2、执行内循环的第二个for语句。

该处是要输出第二行中的后三个数据。

所以应该从数组的第二个数据开始输出,此时的变量i的值为1,填的内容为i.其他的三个选项值都不为1.

①j=1;j<4为真值,输出num[i][j],即6,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

②j=2;j<4为真值,输出num[i][j],即7,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

③j=3;j<4为真值,输出num[i][j],即8,此时%-4d代表的是输出的数据占有的宽度时4个宽度,并且以左对齐的方式输出。

执行完之后执行j++。

④j=4;j<4为假值,退出该循环。

执行后面的语句。

3、执行printf(“\n”);即:

换行。

执行完后返回到外循环的表达式3,i++;

C、i=2;i<4为真值,执行花括号中的语句。

1、执行内循环的第一个for语句,

①j=1,j<=i为真值,执行内循环的第一个循环,执行语句:

printf(“%4c”,‘’);即输出一个空格,该空格占有4个宽度。

执行完后执行表达式3,j++,

②j=2,j<=i为真值,执行内循环的第一个循环,执行语句:

printf(“%4c”,‘’);即输出一个空格,该空格占有4个宽度。

执行完后执行表达式3,j++,

③j=3,j<=i为假值,不执行内循环的第一个循环,退出第一个内循环。

2、执行内循环的第二个for语句。

该处是要输出第三行中的后2个数据。

所以应该从数组的第三个数据开始输出,此时的变量i的值为2,填的内容为i.其他的三个选项值都不为2.

①j=2;j<4为真值,输出num

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

当前位置:首页 > 自然科学 > 数学

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

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