有以下程序voidf(int x,int y){ int t; if(x<y){t=x;x=y;y=t;}}main(){ int a=4,b=3,c=5; f(a,b)

题目

有以下程序 void f(int x,int y) { int t; if(x<y) { t=x;x=y;y=t;} } main() { int a=4,b=3,c=5; f(a,b) ;f(a,c) ;f(b,c) ; printf("%d,%d,%d\n",a,b,c) ; } 执行后输出结果是

A.3,4,5

B.5,3,4

C.5,4,3

D.4,3,5

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序

void f( int y, int *x)

{ y=y+*x; *X=*X+y; }

main()

{ int x=2,y=4;

f(y,&x);

printf("%d %d\n",x,y);

}

执行后输出结果是______。


正确答案:8 4
8 4 解析:本题考核的知识点是函数的调用、值传递和地址传递的区别。“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响.函数 f(Y*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参的y的值将不改变,而实参x的值将改变,故最后输出的y的值为4,而x的值为8。

第2题:

有以下程序: void f(int y,int *x) { y=y+ *x; *x;=*x+y;} main() { int x=2,y=4; f(y,&x); - printf ("%d %d\n",x,y); } 执行后的输出结果是 ______。

A.8 4

B.8 8

C.4 8

D.4 2


正确答案:A
解析:函数{的形参Y是简单变量,x是地址变量,故Y=4,x=2+4+2=8

第3题:

有以下程序:void f(int *x,int *y){ int *t; t=x; x=y ;y=t; *x=*y;}main(){ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p>q) { f(p,q);p++;q--} for(i=0;i<8;i++)printf("d,",a[i]);}程序运行后的输出结果是( )。A.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,


正确答案:C
循环的条件是p>q,而p指向的是数组的首地址,q指向的是数组的最后一个元素,因此p<q,不满足条件,不执行循环,所以结果不变。

第4题:

有以下程序:

void f( int y,int *x)

{ y=y+*x; *x=*x+y; }

main()

{int x=2,y=4;

f(y,&x);

ptintf("%d %d\n",x,y);

}

执行后输出结果是【 】。


正确答案:84
84 解析:“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响。函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参y的值将不改变,而实参x的值将改变,故最后输出的y值为4,而x的值为8。

第5题:

下面程序的运行结果是void swap(int *a,int *b){ int *t; t=a;a=b;b=t;}main(){ int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d%d\n",*p,*q);}


正确答案:35
观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。

第6题:

主调函数中的两个变量a和b,要求调用函数交换a、b的值,返回交换结果,则以下正确的函数是______。

A.funa(int*x,int*y) {int*p; *p=*x;*x=*y;*y=*p; }

B.funb(int x,int y) {int t; t=x;x:y=y=t;}

C.func(int*x,int*y) {*x=*y;*y=*x;}

D.fund(int *x,int*y) {*x=*x+*y;*y=*x-*y;*x=*x-*y;}


正确答案:D
解析:选项A中指针变量p没有明确的指向,选项B是值传递方式,显然不能改变实参中的值,选项C不能完成交换,实参中的值都变成一样的,只有选项D是正确的。

第7题:

主调函数中的两个变量a和b,要求调用函数交换a、b值,返回交换结果,则以下正确的函数是______。

A.funa(int*x,int*y) { int*p; *p=*x;*x=*y;*y=*p; }

B.funb (int x,int y) {int t;t=x;x=y;y=t;}

C.func(int *x,int*y) {*X=*y;*y=*x;}

D.fund(int *x,int *y) {*x=*x+*y;*y=*x-*y;*x=*x-*y;}


正确答案:D

第8题:

下列的程序段中与上题的程序段对y的计算结果相同的是 ______。

A.x=34567 y=0 flag=.T. DO WHIL flag y=x% 10+y * 10 x=int(x/10) IF x>0 flag=.F. ENDIF ENDDO

B.x=34567 y=0 flag=.T. DO WHIL flag y=x%10+y * 10 x=int(x/10) IF x=0 flag=.F. ENDIF ENDDO

C.x=34567 y=0 flag=.T. DO WHIL!flag y=x%10+y* 10 x=int(x/10) IF x>0 flag=.F. ENDIF ENDDO

D.x=34567 y=0 flag=.T. DO WHIL!flag y=x%10+y* 10 x=int(x/10) IF x=0 flag=.T. ENDIF ENDDO


正确答案:B
解析:此题中选项A运行的结果是7,选项B运行的结果是76543,选项C运行的结果是0,选项D运行的结果是是0。

第9题:

有以下程序:include void f(int * x,int * y) int t;t= *x; *x= *y; *y=t;main ( ){in

有以下程序:#include <stdio.h>void f(int * x,int * y) int t; t= *x; *x= *y; *y=t;main ( ){ int a[8] = { 1,2,3,4,5,6,7,8} ,i, * p, * q; p=a;q =&a[7]; while(p<q) { f(p,q) ;p ++ ;q --; } for(i =0;i<8;i ++ ) printf(" % d," ,a[i]); }程序运行后的输出结果是( )。

A.8,2,3,4.,5,6,7,1,

B.5,6,7,8,1,2,3,4,

C.1,2,3,4,5,6,7,8,

D.8,7,6,5,4,3,2,1,


正确答案:D
解析:程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。在main函数中,通过P=a;q=&a[7];指针变量p指向数组的第一个元素,指针变量q指向数组的最后一个元素。通过调用函数f(p,q)进行前后对称位置上的数组元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为8,7,6,5,4,3,2,1,所以程序输出的结果为:8,7,6,5,4,3,2,1,

第10题:

下面程序和运行运行结果是【 】。

void swap(int * a,int * b)

{ int * t;

t=a; a=b; b=t;

}

main( )

{ intx=3,y=5,* p=&x,* q=&y;

swap(p,q);

prinff("%d %d\n", *p, *q);}


正确答案:3 5
3 5 解析:本题swap( )函数的功能是实现两个数的交换,但它为无返回值型。