动态函数调用实现下列操作,输入2个数以及操作符计算结果。 @ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等

来源:互联网 发布:巨人网络 刘伟 编辑:程序博客网 时间:2024/05/05 19:37
<span style="font-size:18px;">////  main.m//  HomeWrokFunctionPointer////  Created by lanouhn on 14-7-30.//  Copyright (c) 2014年 Summer. All rights reserved.//#import <Foundation/Foundation.h>//求两个数的差int differenceValue(int x, int y){    return x - y;}//求两个数的和int sumValue(int x, int y){    return x + y;}//求余操作 remainder类型冲突int remainder1(int x, int y){    return x % y;}//求整操作int integer(int x, int y){    return x / y;}//求最大公约数  greatest common divisorint gcdValue(int x, int y){    int temp = 0, gcd = 0;    temp = y;    if (x < y) {        temp = x;    }    for (int i = 1; i <= temp; i++) {        if (x % i == 0 && y % i == 0) {            gcd = i;        }    }    return gcd;}//求最小公倍数  lowest common multipleint lcmValue(int x, int y){    int lcm = 0;    for (int i = x * y; i > 0; i--) {        if (i % x == 0 && i % y == 0) {            lcm = i;        }    }    return lcm;}typedef int (*pValue)(int, int);//建立字符和函数间的一一对应关系typedef struct characterFunctionPair{    char character;//存储函数对应的字符    pValue function;//存储字符对应的函数的地址}CharacterFunctionPair;//根据给定的字符查找匹配表,找出对应的函数//character 用来接收匹配的字符串//p 用来接收匹配表//count 用来接收匹配表中元素的个数pValue getFunctionByCharacter(char character, CharacterFunctionPair *p, int count){    //根据输入的内容查匹配表找到对应的函数    for (int i = 0; i < count; i++) {        if (character == (p + i)->character) {            //如果匹配到对应的函数,将函数地址返回            return (p + i)->function;        }    }    //如果没有匹配到对应的函数,就返回NULL.    return NULL;}//根据输入的字符得到对应的函数名,对x, y, 进行操作int getResult(int x, int y, char character, int count,CharacterFunctionPair *p){    int result = 0;    //回调函数,得到函数名    pValue compute = getFunctionByCharacter(character, p, count);    result = compute(x, y);    return result;}int main(int argc, const char * argv[]){    //2.、动态函数调用实现下列操作,输入2个数以及操作符计算结果。    //@ 求最大公约数   $求最小公倍数    //-  求差  + 求和 等等    //创建匹配表    CharacterFunctionPair pair[6] = {        {'@', gcdValue},        {'$', lcmValue},        {'+', sumValue},        {'_', differenceValue},        {'%', remainder1},        {'/', integer}    };    CharacterFunctionPair *p = NULL;    p = pair;    int x = 0, y = 0;//存储控制台输入的数字    char str;//存储从控制台输入的字符串    printf("请输入两个数以及操作符计算结果,'@'求最大公约数,'$'求最小公倍数,'-'求差,'+'求和,'/'求整,'%%'求余\n");    scanf("%d%c%d", &x, &str, &y);    int result = getResult(x, y, str, 6, p);    printf("value = %d\n", result);                    return 0;}</span>

0 0
原创粉丝点击