功能需求:

選擇排序的程式,其功能可以由小至大(Ascending)和由大至小(Descending)兩種,來排序輸入的資料({18,2,20,33,13}),

並將排序的過程印出來,請利用指向函數的指標及命令列引數的方法設計之。

範例:

– C:\HW4_1 –a 會利用指向函數的指標呼叫一個由小至大的選擇排序程式,將({18,2,20,33,13})進行排序
– C:\HW4_1 –d 會利用指向函數的指標呼叫一個由大至小的選擇排序程式,將({18,2,20,33,13})進行排序

輸出結果:

輸出結果  

-------------------------從下面開始---------------------------

#include <stdio.h>
#include <stdlib.h>
void h2L(int arr[5]);
void l2H(int arr[5]);
void (*op)(int arr[5]);
int main(int argc, char *argv[])
{
  int data[5]={18,2,20,33,13};
 
  char ch;
  
  if(argc==1)
  {
   printf("請輸入命命列:\n-a由小-->大\n-d由大-->小\n");
  }
  else
  {
   ch=*(argv[1]+1);
  
   if(ch=='a')
   {
    op=l2H;
    (*op)(data);
   }
   else
   if(ch=='d')
   {
    op=h2L;
    (*op)(data);
   }
   else
   {
    printf("命令列輸入錯誤!\n");
   }
  }
  system("PAUSE"); 
  return 0;
}
void h2L(int arr[5])
{
   int i,j,k,temp;
     for(i=0;i<5;i++)
     {
      for(j=0;j<5;j++)
      {
       if(arr[i]>arr[j])
       {
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
       }
      }
     
      for(k=0;k<5;k++)
      {
       printf("%d ",arr[k]);
      }
      printf("\n");
     }
}

void l2H(int arr[5])
{
     int i,j,k,temp;
     for(i=0;i<5;i++)
     {
      for(j=0;j<5;j++)
      {
       if(arr[i]<arr[j])
       {
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
       }
      }
     
      for(k=0;k<5;k++)
      {
       printf("%d ",arr[k]);
      }
      printf("\n");
     }
}

-------------------------從上面結束---------------------------

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蛋酒 的頭像
    蛋酒

    藍色代表憂鬱 那我代表什麼

    蛋酒 發表在 痞客邦 留言(0) 人氣()