函数指针的练习
函数指针实现冒泡排序的升序和降序
#include <stdio.h> #include <stdlib.h> #include <time.h> //正常升序 int shengxu(int* a,int len) { int i=0; int j=0; for(j=len-1;j>0;j--) { for(i=0;i<j;i++) { if(a[i]>a[i+1]) { int t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } return 0; } //函数指针的实现 int asc(int a,int b) { return a>b; } int desc(int a,int b) { return a<b; } int maopao(int*a,int len,int(*fun)(int,int)) { int i=0; int j=0; for(j=len-1;j>0;j--) { for(i=0;i<j;i++) { if(fun(a[i],a[i+1])) { int t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } return 0; } int main() { srand(time(NULL)); int a[10]={0}; int i=0; for(i=0;i<10;i++) { a[i]=rand()%100; printf("%d ",a[i]); } printf("\n"); // shengxu(a,10); maopao(a,10,desc); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; }
用函数指针完成一个函数的加减乘除四则运算
#include <stdio.h> double add(double a,double b) //int (*) (int,int),要变成小数类型,double(*)(double,double) { return a+b; } double sub(double a,double b) { return a-b; } double mul(double a,double b) { return a*b; } double div(double a,double b) { return a/b; } int main() { double a=10; double b=20; double(*p)(double,double)=NULL; //函数指针 int choice=0; printf(" 1 + \n 2 - \n 3 * \n 4 / \n"); scanf("%d",&choice); switch(choice) { case 1: p=add; break; //如果不写这句话,程序会一直进行下去 case 2: p=sub; break; case 3: p=mul; break; case 4: p=div; break; } double ret=p(a,b); //add(a,b);sub(a,b);mul(a,b);div(a,b); printf("p(a,b):%lf\n",ret); return 0; }