解题思路:定义一个函数max,实现求两个整数中的大者。在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。分别编程并作比较。
(1)通过函数名调用函数
#include <stdio.h>
int main()
{int max(int,int);
int a,b,c;
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("a=%d\nb=%d\nmax=%d\n",a,b,c);
return 0;
}
int max(int x,int y)
{int z;
if(x>y) z=x;
else z=y;
return(z);
}
(2)通过指针变量访问它所指向的函数
#include <stdio.h>
int main()
{int max(int,int);
int (*p)(int,int); // 定义指向函数的指针变量p
int a,b,c;
p=max; // 使p指向max函数。若写成p=max(a,b);则错
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
c=(*p)(a,b); // 通过指针变量调用max函数
printf("a=%d\nb=%d\nmax=%d\n",a,b,c);
return 0;
}
int max(int x,int y) // 定义max函数
{int z;
if(x>y) z=x;
else z=y;
return(z);
}
8.23 输入两个整数,然后让用户选择1或2,选1时调用max函数,输出二者中的大数,选2时调用min函数,输出二者中的小数。
解题思路:定义两个函数max和min,分别用来求大数和小数。在主函数中根据用户输入的数字1或2,使指针变量指向max函数或min函数。
#include <stdio.h>
int main()
{int max(int,int); // 函数声明
int min(int x,int y); // 函数声明
int (*p)(int,int); // 定义指向函数的指针变量
int a,b,c,n;
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
printf("please choose 1 or 2:");
scanf("%d",&n); // 输入1戓2
if (n==1) p=max; // 如输入1,使p指向max函数
else if (n==2) p=min; // 如输入2,使p指向min函数
c=(*p)(a,b); // 调用p指向的函数
printf("a=%d,b=%d\n",a,b);
if (n==1) printf("max=%d\n",c);
else printf("min=%d\n",c);
return 0;
}
int max(int x,int y)
{int z;
if(x>y) z=x;
else z=y;
return(z);
}
int min(int x,int y)
{int z;
if(x<y) z=x;
else z=y;
return(z);
}
例8.24 有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求a与b之和。
#include <stdio.h>
int main()
{int max(int,int);
int min(int,int);
int add(int,int);
void fun(int x,int y, int (*p)(int,int));
int a=34,b=-21,n;
printf("please choose 1,2 or 3:");
scanf("%d",&n);
if (n==1) fun(a,b,max);
else if (n==2) fun(a,b,min);
else if (n==3) fun(a,b,add);
return 0;
}
void fun(int x,int y,int (*p)(int,int))
{int resout;
resout=(*p)(x,y);
printf("%d\n",resout);
}
int max(int x,int y)
{int z;
if(x>y)z=x;
else z=y;
printf("max=" );
return(z);
}
int min(int x,int y)
{int z;
if(x<y)z=x;
else z=y;
printf("min=");
return(z);
}
int add(int x,int y)
{int z;
z=x+y;
printf("sum=");
return(z);
}
#include <stdio.h>
void main()
{int max(int,int);
int min(int,int);
int add(int,int);
int fun(int x,int y, int (*p)(int,int));
int a=34,b=-21,n;
printf("please choose 1,2 or 3:");
scanf("%d",&n);
if (n==1) fun(a,b,max);
else if (n==2) fun(a,b,min);
else if (n==3) fun(a,b,add);
}
int max(int x,int y)
{int z;
if(x>y)z=x;
else z=y;
printf("max=%d" );
return(z);
}
int min(int x,int y)
{int z;
if(x<y)z=x;
else z=y;
printf("min=%d");
return(z);
}
int add(int x,int y)
{int z;
z=x+y;
printf("sum=%d");
return(z);
}
int fun(int x,int y,int (*p)(int,int))
{int resout;
resout=(*p)(x,y);
printf("%d\n",resout);
}