函数指针
背景:
1 2 3 4 5 6 7 8 9
| 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 求1/1+1/3+...+1/n(要求利用函数指针编程)
输入格式:" 程序运行示例1如下: 10 Even=1.141666 程序运行示例2如下: 9 Odd=1.787302
|
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <stdio.h>
double even_sum(int); double odd_sum(int);
int main() { int n; double (*current)(int); scanf("%d",&n); if(n%2==0){ current=even_sum; }else{ current=odd_sum; } double result=current(n); if(n%2==0){ printf("Even=%f",result); }else{ printf("Odd=%f",result); } return 0; }
double even_sum(int n){ double result=0; for(int i=2;i<=n;i+=2){ result+=1.0/i; } return result; }
double odd_sum(int n){ double result=0; for(int i=1;i<=n;i+=2){ result+=1.0/i; } return result; }
|
double (*func_ptr)(int); 这行代码声明了一个名为 func_ptr 的指针,它专门用来指向“接受一个 int 参数并返回 double 类型结果”的函数。
定义函数指针,current不仅是一个函数名,还是一个专门用来存地址的指针变量