有以下程序:#include <stdio, h>void fun(iht * a,int i,int j){ int t; if(i < j) { t=a[i];a[i] =a[j] ;a[j]=t; i++;j--;

admin2009-01-15  20

问题 有以下程序:#include <stdio, h>void fun(iht * a,int i,int j){  int t;    if(i < j)     {  t=a;a =a[j] ;a[j]=t;         i++;j--;         fun(a,i,j);main ( )     int x[ ]: {2,6,1,8} ,i;     fun(x,0,3);     for( i=0;i <4;i ++ ) printf( "%2d" ,x );     printf(" \n");

选项 A、1268
B、8621
C、8162
D、8612

答案4

解析 语句fun(x,0、3);中将数组名x作为实参,即把数组x的首地址传送给形参(指针 a),使数组x与形参指针s共占同一段内存单元,在调用函数期间,如果形参数组x的值发生了改变,实参指针a的值也就改变了。程序中fun函数是递归调用函数,其运行过程是:第1次调用fun时,a=x,i=0,j=3,i<j成立,a[0]与a[3]交换,a数组中的数变为{8,6,1,2},执行i++;j--;继续调用fun,此时i,j分别为 1,2,i<j成立,a[1]与a[2]交换,a数组中的数变为{8,1,6,2},执行i++j--;继续调用fun,此时i,j分别为2,1,i<j不成立,递归调用结束。当返回主函数时,x数组中的数据就为{ 8,1,6,2}。
转载请注明原文地址:https://kaotiyun.com/show/d4Hp777K
0

最新回复(0)