編程小白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");
}

覈對結果

和分析得一樣,思路還是非常清晰的

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