简单计算器功能实现

简单计算器功能实现

1. 基础写法

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//打印目录
void menu(void) {
    printf("\n*****************\n");
    printf("*****1. ADD *****\n");//addition
    printf("*****2. SUB *****\n");//substraction
    printf("*****3. MUL *****\n");//multiplication
    printf("*****4. DIV *****\n");//division
    printf("*****0. EXI *****\n");//exit
    printf("*****************\n");
    printf("请输入:");
}

//加法实现
int add(int first, int second) {
    return first + second;
}

//减法实现
int sub(int first, int second) {
    return first - second;
}

//乘法实现
int mul(int first, int second) {
    return first * second;
}

//除法实现
int div(int first, int second) {
    return first / second;
}

int main(void) {

    int choice, first, second,result;
    //使用do-while循环,保证能够多次计算
    do {
        menu();
        scanf("%d", &choice);
        switch (choice) {
        case 1:
            printf("请输入两个整数:");
            scanf("%d %d", &first, &second);
            result = add(first, second);
            printf("%d + %d = %d", first, second, result);
            break;
        case 2:
            printf("请输入两个整数:");
            scanf("%d %d", &first, &second);
            result = sub(first, second);
            printf("%d - %d = %d", first, second, result);
            break;
        case 3:
            printf("请输入两个整数:");
            scanf("%d %d", &first, &second);
            result = mul(first, second);
            printf("%d x %d = %d", first, second, result);
            break;
        case 4:
            printf("请输入两个整数:");
            scanf("%d %d", &first, &second);
            result = div(first, second);
            printf("%d / %d = %d", first, second, result);
            break;
        case 0:
            printf("退出计算器");
            break;
        default:
            printf("输入错误,请重新输入");
            break;
        }
    } while (choice);
        return 0;
}

2. 稍高级写法(转移表)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//typedef int(*fPointer)(int, int);

//打印目录
void menu(void) {
    printf("\n*****************\n");
    printf("*****1. ADD *****\n");//addition
    printf("*****2. SUB *****\n");//substraction
    printf("*****3. MUL *****\n");//multiplication
    printf("*****4. DIV *****\n");//division
    printf("*****0. EXI *****\n");//exit
    printf("*****************\n");
    printf("请输入:");
}

int add(int first, int second) {
    return first + second;
}

int sub(int first, int second) {
    return first - second;
}

int mul(int first, int second) {
    return first * second;
}

int div(int first, int second) {
    return first / second;
}

int calculate(const int (*functionPointer)(int, int), int first, int second)
//int calculate(const fPointer functionPointer,int first,int second)
{
    return functionPointer(first, second);
}

int main(void) {

    int choice, first, second, result;
    //使用do-while循环,保证能够多次计算
    do {
        menu();
        scanf("%d", &choice);
        if (choice > 4 || choice < 0) {
            printf("输入错误请重新输入!");
            continue;
        }
        printf("请输入两个整数:");
        scanf("%d %d", &first, &second);
        //函数指针数组
        //fPointer functionPointer[4] = {add, sub, mul, div};
        int(*functionPointer[4])(int, int) = {add, sub, mul, div};
        if (choice != 0) {
            printf("%d",calculate(functionPointer[choice - 1], first, second));
        }
        else {
            printf("退出计算器");
            continue;
        }
    } while (choice);
    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

略无慕艳意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值