求教几道C语言选择题(详细解答)!

1、 如下程序的执行结果是
main()
{
static int a〔〕={1,7,3,9,5,11};
int *p=a;
*(p+3)+=4;
printf("%d,%d",*p,*(p+3));
}
A)1,13 B)1,16
C)3,13 D)1,14

2、 下面程序的输出是
int b=3;
fun(int *k)
{
int b=2;
b=*(k++)*b;
return(b);
}
main()
{
int a〔〕={11,12,13,14,15,16};
b=fun(&a〔1〕)*b;
printf("%d\n",b);
}
A)24 B)72
C)11 D)33

3、 下面程序的输出结果是
fun(int x)
{
int a=3;
a*=x;
return a;
}
main()
{
int x=2,y=1,n;
n=fun(x);
n=fun(y);
printf("%d\n",n);
}
A)2 B)4
C)3 D)8

第一题:A。
解析:首先得到一个静态数组a[],指针p指向a[0], *(p+3)+=4可写为*(p+3)=*(p+3)+4, p+3的意思是指针移动至a[3]所在单元,*(p+3)是取值,即为9,那么运算*(p+3)+=4得*(p+3)的最终值为13,p由于指向数组初位置则*p为1.

第二题:B。
解析:第一全局变量b=3,先看main函数部分,得到数组a[],从语句 b=fun(&a(1))*b处看fun函数,在这里fun函数是个地址传递,main函数中把a[1]的地址传递给fun函数中的指针*k,在fun的语句b=*(k++)*b中,由于是k++,则先做取值运算,再做k自加,所以*(k++),*k,a[1]的值一样,为12,则b=*(k++)*b运算后得b=24,即fun函数的返回值为24,带回 b=fun(&a(1))*b运算得b=72(这里要注意算式中的第二个b要用全局变量b=3带)。
第三题:C。
解析:同第二题先看main函数,对于语句 n=fun(x); n=fun(y); 由于是顺序结构,则只要看后一句即可;语句n=fun(y)调用fun函数,把值y=1给x,a*=x的意思是a=a*x,即a=3,然后返回函数值至main函数,n=3
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-19
第一题:选A
main()
{
static int a〔〕={1,7,3,9,5,11};
int *p=a; // *p=1
*(p+3)+=4; // *(p+3)=9,9+4=13
printf("%d,%d",*p,*(p+3)); //1,13
}
第二题:选B
由于是选择题,所以可以快速选出答案,因为其余选项显然太小
第三体:选C
只要看n=fun(y); 就行了