C語言 | 用指針對10個數排序


例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語言中,數組名可以表示地址,因此不用再加取地址符&,讀者需要了解。

C語言學習路線   

C語言開發工具

C語言 | 用指針對10個數排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM