📜  C |运营商|问题27(1)

📅  最后修改于: 2023-12-03 14:59:38.947000             🧑  作者: Mango

C | 运营商 | 问题27

问题描述

给定三个整数a、b和c,以及运算符op,你需要根据op的值计算出你需要对a和b执行的操作,并将结果与c进行比较。操作可以是加法、减法、乘法或除法。如果描述的操作与以运算符为中心的操作相同,则返回"+/-/×/÷ by zero"或"unknown operator",取决于相应的情况。

函数原型

下面是需要实现的函数的原型。

const char *calc(int a, int b, int c, char op);
参数
  • a:整型,表示第一个操作数;
  • b:整型,表示第二个操作数;
  • c:整型,表示第三个操作数;
  • op:字符,取值为'+'、'-'、'*'、'/',表示操作符。
返回值

如果操作有效,则返回操作结果是否等于c的布尔值的字符串"true"或"false"。如果操作是非法的,则返回"+/-/×/÷ by zero"或"unknown operator",取决于相应的情况。

样例

以下是计算概述的样例。

calc(1, 2, 3, '+'); // => "false"
calc(10, 2, 5, '/'); // => "true"
calc(10, 0, 5, '/'); // => "/ by zero"
calc(10, 0, 5, 'x'); // => "unknown operator"
实现

下面是一个C语言的参考实现。

#include <stdio.h>
#include <stdlib.h>

const char *calc(int a, int b, int c, char op) {
    int result;
    char *error;

    switch(op) {
        case '+': result = a + b; break;
        case '-': result = a - b; break;
        case '*': result = a * b; break;
        case '/': {
            if(b == 0) return "/ by zero";
            result = a / b;
            break;
        }
        default: return "unknown operator";
    }

    if(result == c) return "true";
    else return "false";
}

int main() {
    printf("%s\n", calc(1, 2, 3, '+'));
    printf("%s\n", calc(10, 2, 5, '/'));
    printf("%s\n", calc(10, 0, 5, '/'));
    printf("%s\n", calc(10, 0, 5, 'x'));

    return 0;
}
解释

实现的calc函数使用switch语句来根据给定的操作符op计算a和b的值。当操作符是加、减、乘或除运算符时,选择相应的操作。在做除法运算时,需要特别注意:如果除数是0,则返回"/ by zero"。如果操作符是未知的,则返回"unknown operator"。

如果最终的计算结果result等于c,则函数返回"true",否则返回"false"。

下面是上述样例的输出结果。

false
true
/by zero
unknown operator
备注

对于加法、减法和乘法,计算结果的类型为整型,而除法的结果为浮点数,但是本题的描述有所简化,假设除数不为0.

当然,实现中为了防止出现除0的情况,特别进行了处理。