编程小白C语言题目练习12

题目要求

有以下程序
void f(int a[],int i,int j)
{  int  t;
 if(i<j)
   {  t=a[i]; a[i]=a[j];a[j]=t;
      f(a,i+1,j-1);
   }
}
main( )
{  int i,a[5]={1,2,3,4,5};
   f(a,0,4);
   for(i=0;i<5;i++)   

printf(“%d,”,aa[i]);   

printf(“\n”);
 }

执行后输出结果是(    ) 

 思路分析

当看到这个题,就觉得有点不大好做,在函数f中,又调用了函数f,但是不好做不代表不能做,只看函数的前半部分,这是很熟悉,排序,而且元素是从大到小排序,接着有是调用 函数f 如果思维转换不过来,不妨手动写一写,看一看

第一次调用函数f时,int a[]={1,2,3,4,5}, int i=0,int j=4, 这个时候在函数f中应该是a[i]=1,a[j]=5, i<j,元素调换位置 

第二次调用函数f时,int a[]={5,,2,3,4,1}, int i=1,int j=3,这个时候在函数f中应该是a[i]=2,a[j]=4,i<j,元素调换位置

第三次调用函数f时,int a[]={5,4,3,2,1},  int i=2,int j=2,这个时候不满足i<j,退出函数f

然后依次输出数组元素 应该为5 4 3 2 1

撸写代码

#include<stdio.h> 
void f(int a[],int i,int j)
{  
	int  t;
	if(i<j)
	   {  
	   		t=a[i]; 
			a[i]=a[j];
			a[j]=t;
	      	f(a,i+1,j-1);
	   }
}
int main( )
{  
	int i,a[5]={1,2,3,4,5};
	f(a,0,4);
	for(i=0;i<5;i++)   
	printf("%d,",a[i]);   
	printf("\n");
}

核对结果

和分析得一样,思路还是非常清晰的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章