| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include <stdio.h> 
#include <stdlib.h> 
 
#define EPSINON 0.000001 // 定义允许的误差 
 
double add(double x, double y); 
double sub(double x, double y); 
double mul(double x, double y); 
double divi(double x, double y); 
 
double add(double x, double y) 
{ 
        return x + y; 
} 
 
double sub(double x, double y) 
{ 
        return x - y; 
} 
 
double mul(double x, double y) 
{ 
        return x * y; 
} 
 
double divi(double x, double y) 
{ 
        // 不要对浮点数进行==或!=比较,因为IEEE浮点数是一个近似值 
        if (y >= -EPSINON && y <= EPSINON) 
        { 
                printf("除数不能为0\n"); 
                // 如果除数为0,调用exit()函数直接退出程序 
                exit(1); 
        } 
        else 
        { 
                return x / y; 
        } 
} 
 
int main(void) 
{ 
        int i; 
        double x, y, result; 
        double (*func_table[4])(double, double) = {add, sub, mul, divi}; 
 
        printf("请输入两个数:"); 
        scanf("%lf %lf", &x, &y); 
 
        printf("对这两个数进行加减乘除后的结果是:"); 
        for (i = 0; i < 4; i++) 
        { 
                result = (*func_table[i])(x, y); 
                printf("%.2f ", result); 
        } 
        putchar('\n'); 
 
        return 0; 
} 
 
红标的地方都是不懂的地方,不知道上面那个头文件定义的是什么,然后下面那两个函数也看不太懂  
 double (*func_table[4])(double, double) = {add, sub, mul, divi}; 
定义一个大小为4的数组  ,他的元素为返回值为double的函数指针  =  {} 是对这个数组的初始化 
下面的for循环是对四个函数的调用 
result = (*func_table)(x, y); 
这一句打错了这样只是取第一个函数  即你四次操作全部执行的加操作  可以改成下面这个 
result = (func_table[i])(x, y); 
你运行试试 
 
总之他是通过一个数组存放了四个指向函数的指针,通过这个数组中的元素来管理调用这四个函数 
 
 
 
 |   
 
 
 
 |