C学习-用指向函数的指针变量作函数的参数求两个整数中的最大值、两个整数中的最小值、两个整数的和


任务描述

本关任务:用指向函数的指针变量作函数的参数求两个整数中的最大值、两个整数中的最小值、两个整数的和。

相关知识

指向函数的指针变量的定义和使用

  在 C 语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。可以把函数的这个首地址(或称入口地址)赋给一个指针变量,使该指针变量指向该函数,然后通过该指针变量就可以找到并调用这个函数。把这种指向函数的指针变量称为函数指针变量

函数指针变量定义的一般形式为:

 
  1. 类型说明符 (*指针变量名)( 函数参数表列);

  例如:int (*pf)(int,int );   定义pf是指向函数的指针变量,它可以指向函数值类型为整型且有两个int型形式参数的函数。pf的类型用int (*)(int,int)表示。

请看示例:

 
  1. #include <stdio.h>
  2. /*****max函数和min函数的返回值类型,形参个数和类型都一致*****/
  3. int max(int,int);
  4. int min(int x,int y);
  5. int main()
  6. {
  7. int (*pf)(int,int); //定义pf是指向函数的指针变量
  8. int a,b,c,n;
  9. scanf("%d,%d",&a,&b);
  10. pf = max;
  11. c = pf(a,b); // 等价于c = max(a,b);
  12. printf("max=%d\n",c);
  13. pf = min;
  14. c = pf(a,b); // 等价于c = min(a,b);
  15. printf("min=%d\n",c);
  16. return 0;
  17. }
  18. int max(int x,int y)
  19. {
  20. int z;
  21. if(x>y)
  22. z = x;
  23. else
  24. z = y;
  25. return(z);
  26. }
  27. int min(int x,int y)
  28. {
  29. int z;
  30. if(x<y)
  31. z = x;
  32. else
  33. z = y;
  34. return(z);
  35. }

用指向函数的指针作函数参数

  指向函数的指针可以作为函数的参数,把函数的入口地址传递给形参,这样就能够在被调用的函数中使用实参函数。

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,定义求两数的最大值、两数的最小值和两数之和这三个函数:

 
  1. int max(int,int); //max()函数声明
  2. int min(int,int); //min()函数声明
  3. int add(int,int); //add()函数声明

定义fun()函数,要求用指向函数的指针作函数参数:

 
  1. 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 **********/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IcarusCPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值