练习答案Word格式文档下载.docx
《练习答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《练习答案Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
elsey=-1;
B)if(x!
=0)if(x>
0)y=1;
elsey=0;
C)if(x<
if(x!
=0)y=1;
D)y=-1;
语句if(x<
if(x<
0)
y=-1;
else{
if(!
x)
y=0;
else
y=1;
}
即:
-1x<
0
y=0x=0
1x>
5、循环for(i=0,j=5;
++i!
=--j;
)printf(“%d%d”,i,j);
将执行
A)6次B)3次C)0次D)无限次
i=0,j=5,(++i1)!
=(--j4)成立:
i=1,j=4
i=1,j=4,(++i2)!
=(--j3)成立:
i=2,j=3
i=2,j=3,(++i3)!
=(--j2)成立:
i=3,j=2
……
6、下列程序段执行后s值为:
inti=5,s=0;
doif(i%2)continue;
elses+=i;
while(--i);
A)15B)9C)6D)以上均不是
写成规范形式:
do
if(i%2)
continue;
else
s+=i;
i=5,s=0:
i%2=1:
i=4
i=4,s=0:
i%2=0:
s=0+4=4;
i=3
i=3,s=4:
i=2
i=2,s=4:
s=4+2=6;
i=1
i=1,s=6:
i=0
7、对于inta,要使((1<
<
2>
>
1)|a)==a;
则a可以是:
A)2B)6C)10D)2,6,10均可
1:
0000000000000001
1<
2:
0000000000000100
0000000000000010
(1<
1)|2:
0000000000000010
(2)
(1<
1)|6:
0000000000000110(6)
1)|10:
0000000000001010(10)
8、对于以下宏定义:
#defineSQ(x)x*x
#defineDD(x,y)SQ(x)-SQ(y)
宏调用DD(2*3,2+3)执行后值为:
A)43B)11C)25D)以上均不是
DD(2*3,2+3)
SQ(2*3)-SQ(2+3)
2*3*2*3-2+3*2+3
43
9、语句if(a>
b)k=0;
elsek=1;
(inta,b,k)等价于:
A)k=(a>
b)?
0;
B)k=a>
b;
C)k=a<
=b;
D)以上均不是
10、对于inti;
charc,s[20];
从输入序列123ab45efg中将123读入i;
’b’读入c;
“45efg”读入s,则scanf语句应写为:
A)scanf(“%da%c%s”,i,c,s)B)scanf(“%d%*c%c%s”,&
i,&
c,s);
C)scanf(“%da%c%s”,&
i,&
c,&
s)D)scanf(“%d%c%c%s”,&
11、对于以下递归函数f,调用f(4),其返回值为:
intf(intn)
{returnf(n-1)+n;
A)10B)11C)0D)以上均不是
12、如下程序段:
intc[]={1,7,12};
int*k;
k=c;
printf("
nextkis%d"
*++k);
其输出应为:
A)2B)7C)1D)以上均不对
k1c[0]
7c[1]
12c[2]
13、执行i=3;
if(i>
3)if(i<
4)i=1elsei=2;
后i的值应为:
A)1B)2C)3D)语句错误
14、执行下列程序:
#defineMA(x,y)((x)*(y))
i=5;
i=MA(i,i+1)-7;
后变量i的值应为:
A)30B)19C)23D)1
MA(i,i+1)-7
→((i)*(i+1))–7
→(5*6)–7
→23
15、执行下列程序:
inti,j;
i=3/2+7/2==5;
j=45%11+(((7>
8)?
14:
21)==14);
后变量i,j的值应为:
A)i=0j=1B)i=1j=1
C)i=0j=2D)i=1j=2
i=((3/2+7/2)==5)=((1+3)==5)=(4==5)=0;
j=1+(21==14)=1+0=1
16、如果charcc[]="
12345"
,做sizeof(cc)后的返回值应为
A)2B)5C)6D)1
sizeof()返回参数对象的字节数:
这里的参数是字符数组cc,有6个元素.
17、如果inti=16,j=23;
执行printf("
%x--%o"
i,j)后输出为:
A)10--23B)10--27C)16--23D)16--27
18、执行下列程序:
#defineMA(x,y)(x)*(y)
inti=2;
i=3/MA(i,i+1)+5;
printf(“%d\n”,i);
A)5B)8C)0D)以上都错
3/MA(i,i+1)+5
→3/(i)*(i+1)+5
→3/2*3+5
→8
19、有一函数:
intf(inta){
autointb=0;
staticintc=3;
b=b+1;
c=c+1;
return(a+b+c);
如果有inti,j;
则执行两次调用:
i=f
(2);
j=f
(2)后,i,j值为:
A)i=7,j=7B)i=7,j=8
C)i=8,j=7D)i=8,j=8
注意静态局部变量staticintc;
的含义
第一次调用f
(2):
开始时:
b=0,c=3
执行:
b=0+1=1,c=3+1=4;
返回:
a+b+c=2+1+4=7;
调用结束后:
静态局部变量c=4保持不变;
第二次调用f
(2):
b=0,c=4
b=0+1=1,c=4+1=5;
a+b+c=2+1+5=8;
静态局部变量c=5保持不变;
20、有一函数:
intf(char*s){
intk=0;
while(*s)k=k*10+*s++-’0’;
return(k);
调用f(“1234”)的返回结果是:
A)“1234”B)1234C)“4321”D)4321
while循环等价于:
while(*s)k=k*10+(*s++)–‘0’;
该函数的作用:
将数字字符串转换成相应的整数.
21、staticinta[]={1,2,3},*p,*q;
p=a+1;
q=p++;
执行该程序段后,p和q所指向的单元的内容分别为:
A)(*p)=1,(*q)=2B)(*p)=2,(*q)=3
C)(*p)=3,(*q)=2D)以上都错
1a[0]
p2a[1]
3a[2]
a
二、填空题
22、用for循环打印147101316192225,其语句应为:
for(i=1;
i<
=9;
i++)printf(“%3d”,_3*i-2__);
23、执行完下列语句段后,i,j值分别为:
___355,350__
j=10*(i=5);
i+=j*=i+2;
第一条语句执行后:
i=5,j=50
执行第二条语句:
i+=j*=i+2
→i+=(j*=(i+2))
→i+=(j*=7)
→i+=(j=50*7)
→i=5+350=355,j=350
24、执行完下列语句段后,i值为:
__5__
staticinta[3][4]={{1,2,3},{4,5,6}},i;
i=a[0][5];
a[0][0]1X
a[0][1]2X+2
a[0][2]3X+4
a[0][3]?
X+6
a[1][0]4X+8
a[1][1]5X+10
a[1][2]6X+12
a[1][3]?
X+14
a[2][0]?
X+16
a[2][1]?
X+18
a[2][2]?
X+20
a[2][3]?
X+22
a[0][5]的地址:
X+(0*4+5)*2=X+10,即对应于a[1][1]。
25、执行完下列语句段后,i值为:
__4___
inti;
intf(intx)
{staticintk=0;
x+=k++;
returnx;
i=f
(2);
i=f(3);
26、执行完下列语句段后,i值为:
__18__
{return((x>
0)?
x*f(x-1):
3);
i=f(f
(1));
调用f
(1):
(1>
0)成立,执行1*f(0)=f(0),
调用f(0)=3
所以,f
(1)=3;
调用f(3):
f(3)=3*f
(2)
f
(2)=2*f
(1)=2*3=6
所以f(3)=3*6=18
27、执行完下列语句段后,s和f值分别为:
__”%s%lf”,12.4__
chars[20];
doublef;
sscanf(“%s%lf12.4%s%f12.5”,“%s%lf”,s,&
f);
函数sscanf()的一般形式:
sscanf(char*buffer,char*format,var1,var2,var3,…)
它的含义:
从缓冲区buffer中按照格式字符串format读入变量var1,var2,var3,…的值。
28、对于charc;
若已知其值为小写字母,将其转换为相应大写字母的表达式为___c–‘a’+‘A’______
29、inti=0,s=0;
while(i<
n)s+=i++;
等价于
inti,s;
for(_i=0,s=0;
i<
n;
s+=i++_);
30、下面是用二分法从数组v[n]中查找数x的函数,返回值为x所在下标(若找到)或-1(没找到):
binsearch(intx,intv[],intn)
{intlow,high,mid;
low=0;
high=n-1;
while(low<
=high){
mid=_(low+high)/2_;
if(x<
v[mid])high=mid-1;
elseif(x>
v[mid])low=mid+1;
elsereturn__mid_;
}
return-1;
31、对于整型变量i,j执行scanf("
%d%*d%d"
&
j);
当输入23456后
i=_2_j=_4__
32、对于int*p,*q,i=5,j=6;
执行:
p=&
i;
q=p;
j;
后(*p)=_6_,(*q)=__5__
33、f(intm)
{
for(i=0;
m;
i++)
for(j=m-1;
j>
=0;
j--)
printf(“%1d%c"
i+j,j?
'
*'
:
#'
);
如果调用f(3)将输出__2*1*0#3*2*1#4*3*2#__
34、voidf(int*a,intb)
staticintk=0;
*a+=++k;
b+=2;
若执行i=2;
j=4;
f(&
i,j);
j,i)后i=__3__,j=__6___
i23j4i3j46
k01k12
ab46ab35
35、用for循环打印012012012;
for(i=1;
i++)printf("
%2d"
__(i-1)%3__);