简单计算器的实现(C语言)(指针)(switch)

算法的通常实现:算法

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
int main()
{
    int input = 0;
    int x = 0;
    int y = 0;
    do
    {
        mnue();
        printf("请选择:");
        scanf("%d", &input);

        switch (input)
        {
        case 1:
            printf("请输入两个操做数:");
            scanf("%d%d", &x, &y);
            printf("%d + %d = %d\n", x, y, Add(x, y));
            break;
        case 2:
            printf("请输入两个操做数:");
            scanf("%d%d", &x, &y);
            printf("%d - %d = %d\n", x, y, Sub(x, y));
            Sub(x, y);
            break;
        case 3:
            printf("请输入两个操做数:");
            scanf("%d%d", &x, &y);
            printf("%d * %d = %d\n", x, y ,Mul(x, y));
            break;
        case 4:
            printf("请输入两个操做数:");
            scanf("%d%d", &x, &y);
            printf("%d / %d = %d\n", x, y, Div(x, y));
            break;
        case 0:
            printf("退出\n");
            break;
        default:
            printf("输入错误,请从新输入!\n");
        }
    } while (input);
    return 0;
}

封装新函数,存储冗余项,利用回调函数优化case里面的冗余项:
回调函数:
简单计算器的实现(C语言)(指针)(switch)数组

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
void Cacl(int (*pf)(int, int))
{
    int x = 0;
    int y = 0;
    printf("请输入两个操做数:");
    scanf("%d%d", &x, &y);
    printf("%d\n", pf(x, y));
}
int main()
{
    int input = 0;
    do
    {
        mnue();
        printf("请选择:");
        scanf("%d", &input);

        switch (input)
        {
        case 1:
            Cacl(Add);
            break;
        case 2:
            Cacl(Sub);
            break;
        case 3:
            Cacl(Mul);
            break;
        case 4:
            Cacl(Div);
            break;
        case 0:
            printf("退出\n");
            break;
        default:
            printf("输入错误,请从新输入!\n");
        }
    } while (input);
    return 0;
}

利用函数指针数组实现:
当功能多了的时候,case语句不会那么长了ide

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
int main()
{
    int input = 0;
    int x = 0;
    int y = 0;
    do
    {
        mnue();
        printf("请选择:");
        scanf("%d", &input);
        int (*pArr[5])(int, int) = { 0,Add,Sub,Mul,Div };
        //故意设5个,使得选择的函数能够对应下标
        if (input >= 1 && input <= 4)
        {
            printf("请输入两个操做数:");
            scanf("%d%d", &x, &y);
            printf("%d\n", pArr[input](x, y));
        }
        else if (input == 0)
        {
            printf("退出\n");
        }
        else
        {
            printf("输入错误,请从新输入!\n");
        }
    } while (input);
    return 0;
}
相关文章
相关标签/搜索