功能需求:
選擇排序的程式,其功能可以由小至大(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");
}
}
-------------------------從上面結束---------------------------
留言列表