指针函数应用——例8.22 用函数求整数a和b中的大者。(通过函数名调用函数、通过指针变量访问它所指向的函数)

本文详细介绍了通过函数名和指针访问函数的方法,并通过示例代码进行演示。此外,文章还展示了如何根据用户输入选择调用不同函数来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:定义一个函数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);
 }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值