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

来源:互联网 发布:阿里云cdn怎么配置 编辑:程序博客网 时间:2024/06/05 17:56

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




原创粉丝点击