例31:C語言用指針方法對10個整數按由大到小順序排序。
解題思路:在主函數中定義數組,用來存放10個整數,定義int *型指針變量p指向a[0],定義函數sort將數組中的元素按由大到小排序。
排序函數:
void sort(int x[],int n)//自定義排序函數 { int i,j,k,t;//定義整型變量 for(i=0;i<9;i++)//外層for循環 { k=i;//把i的值賦給k for(j=1+i;j<10;j++)//內層for循環 { if(x[j]>x[k])//如果前一個數大 { k=j; } } t=x[k]; //賦值 x[k]=x[i]; x[i]=t; } }
源代碼演示:
#include<stdio.h>//頭文件 int main()//主函數 { void sort(int x[],int n);//函數聲明 int i,*p,a[10];//定義整型變量、指針變量、數組 p=a;//讀者需要注意這里a賦值 printf("請輸入十個數:");//提示語句 for(i=0;i<10;i++)//輸入10個數 { scanf("%d,",p++);//注意每個數之間用英文逗號隔開 } p=a;//讀者需要注意這里a賦值 sort(a,10);//調用sort排序 printf("由大到小排序后的:");//提示語句 for(p=a,i=0;i<10;i++)//輸出排序后的數 { printf("%d ",*p); p++; } printf("\n");//換行 return 0;//主函數返回值為0 } void sort(int x[],int n)//自定義排序函數 { int i,j,k,t;//定義整型變量 for(i=0;i<9;i++)//外層for循環 { k=i;//把i的值賦給k for(j=1+i;j<10;j++)//內層for循環 { if(x[j]>x[k])//如果前一個數大 { k=j; } } t=x[k]; //賦值 x[k]=x[i]; x[i]=t; } }
編譯運行結果如下:
請輸入十個數:0,4,6,1,8,12,78,34,67,4 由大到小排序后的:78 67 34 12 8 6 4 4 1 0 -------------------------------- Process exited after 22.77 seconds with return value 0 請按任意鍵繼續. . .
讀者需要注意上述小林scanf函數用的逗號,注意是英文逗號:
scanf("%d,",p++);
在上一節小林說過,給指針變量賦的是地址,如下:
int i,*p,a[10]; p=a;
但上述代碼中卻是這樣賦值:
int i,*p,a[10]; p=&a;
是因為我定義的a就是數組,在C語言中,數組名可以表示地址,因此不用再加取地址符&,讀者需要了解。