任务描述
本关任务:用指向函数的指针变量作函数的参数求两个整数中的最大值、两个整数中的最小值、两个整数的和。
相关知识
指向函数的指针变量的定义和使用
在 C 语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。可以把函数的这个首地址(或称入口地址)赋给一个指针变量,使该指针变量指向该函数,然后通过该指针变量就可以找到并调用这个函数。把这种指向函数的指针变量称为函数指针变量。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)( 函数参数表列);
例如:int (*pf)(int,int );
定义pf
是指向函数的指针变量,它可以指向函数值类型为整型且有两个int
型形式参数的函数。pf
的类型用int (*)(int,int)
表示。
请看示例:
#include <stdio.h>
/*****max函数和min函数的返回值类型,形参个数和类型都一致*****/
int max(int,int);
int min(int x,int y);
int main()
{
int (*pf)(int,int); //定义pf是指向函数的指针变量
int a,b,c,n;
scanf("%d,%d",&a,&b);
pf = max;
c = pf(a,b); // 等价于c = max(a,b);
printf("max=%d\n",c);
pf = min;
c = pf(a,b); // 等价于c = min(a,b);
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);
}
用指向函数的指针作函数参数
指向函数的指针可以作为函数的参数,把函数的入口地址传递给形参,这样就能够在被调用的函数中使用实参函数。
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,定义求两数的最大值、两数的最小值和两数之和这三个函数:
int max(int,int); //max()函数声明
int min(int,int); //min()函数声明
int add(int,int); //add()函数声明
定义fun()
函数,要求用指向函数的指针作函数参数:
void fun(int x, int y, int (*p)(int,int) ); //fun()函数声明
三次调用fun()
函数,分别实现求两数的最大值、两数的最小值和两数之和这三个功能,要求将不同的函数名作为调用fun()
函数的实参。
测试说明
平台会对你编写的代码进行测试。
测试输入: 64
254
预期输出: max=254
min=64
sum=318
开始你的任务吧,祝你成功!
#include <stdio.h>
int max(int,int); //max函数声明
int min(int,int); //min函数声明
int add(int,int); //add函数声明
int fun(int x,int y, int (*p)(int,int)); //fun函数声明
int main()
{
int a,b,c;
//printf("please enter a , b:");
scanf("%d%d",&a,&b); //输入a和b的值
c = fun(a,b,max); //求 a和b的最大值
printf("max=%d\n",c);
c = fun(a,b,min); //求 a和b的最小值
printf("min=%d\n",c);
c = fun(a,b,add); //求 a和b的和
printf("sum=%d\n",c);
return 0;
}
/********** Begin **********/
int max(int a,int b)
{
return a>b? a:b;
}
int min(int a,int b)
{
return a<b? a:b;
}
int add(int a,int b)
{
return (a+b);
}
int fun(int x,int y, int (*p)(int,int))
{
return p(x,y);
}
/********** End **********/