例31:C语言用指针方法对10个整数按由大到小顺序排序。
解题思路:在主函数中定义数组,用来存放10个整数,定义int *型指针变量p指向a[0],定义函数sort将数组中得元素按由大到小排序。
排序函数:
voidsort(intx[],intn)//自定义排序函数{inti,j,k,t;//定义整型变量for(i=0;i<9;i++)//外层for循环{k=i;//把i得值赋给kfor(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>//头文件intmain()//主函数{voidsort(intx[],intn);//函数声明inti,*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");//换行return0;//主函数返回值为0}voidsort(intx[],intn)//自定义排序函数{inti,j,k,t;//定义整型变量for(i=0;i<9;i++)//外层for循环{k=i;//把i得值赋给kfor(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由大到小排序后得:78673412864410--------------------------------Process exited after22.77secondswithreturnvalue0请按任意键继续. . .
读者需要注意上述小林scanf函数用得逗号,注意是英文逗号:
scanf("%d,",p++);
在上一节小林说过,给指针变量赋得是地址,如下:
inti,*p,a[10];p=a;
但上述代码中却是这样赋值:
inti,*p,a[10];p=&a;
是因为我定义得a就是数组,在C语言中,数组名可以表示地址,因此不用再加取地址符&,读者需要了解。