青少年编程与数学 01-008 在网页上完成计算 13课题、四则运算

编程完成四则运算。

一、四则运算编程

编写网页程序,完成四则运算。要求:

  1. 功能要求:用户可以四则运算算式,点击计算按钮后由程序计算表达式的结果并显示在页面上。
  2. 需要HTML来构建界面,CSS来设置样式,以及JavaScript来实现转换逻辑。所有代码都写在一个.html文件中。
  3. 页面中显示中文。代码中添加中文注释。
  4. 设计尽量美观的样式,使用暗色调背景。页面元素在网页中合理居中。
  5. 用户可以多次输入算式并计算。

示例1:

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>四则运算计算器</title>
    <style>
        body {
            background-color: #333;
            color: #fff;
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 50;
        }

        .container {
            width: 700px;
            text-align: center;
            background: #444;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(255, 255, 255, 0.1);
        }

        input[type="text"] {
            width: 500px;
        }

        input,
        button {
            padding: 10px;
            margin: 5px;
            font-size: 16px;
        }

        #result {
            margin-top: 20px;
            font-size: 20px;
            min-height: 150px;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>四则运算计算器</h1>
        <input type="text" id="expression" placeholder="输入算式,例如 2+2" />
        <button onclick="calculate()">计算</button>
        <div id="result"></div>
    </div>

    <script>
        // 计算表达式结果的函数
        function calculate() {
            var expression = document.getElementById('expression').value;
            try {
                // 计算表达式
                var result = eval(expression);
                // 显示结果
                document.getElementById('result').innerText = '结果: ' + result;
            } catch (error) {
                // 如果表达式无效,显示错误信息
                document.getElementById('result').innerText = '错误: 无效的表达式';
            }
        }
    </script>
</body>

</html>

示例2:

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>Math.js计算器</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #333;
            color: #fff;
        }

        .container {
            text-align: center;
            padding: 20px;
            background: #444;
            border-radius: 10px;
        }

        input,
        button {
            padding: 10px;
            margin: 5px;
            font-size: 16px;
        }

        #result {
            margin-top: 20px;
            font-size: 20px;
        }
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/9.4.4/math.js"></script>
</head>

<body>
    <div class="container">
        <h1>Math.js 计算器</h1>
        <input type="text" id="expression-input" placeholder="输入算式,例如 '2 + 3 * 2'" />
        <button onclick="calculateExpression()">计算</button>
        <div id="result"></div>
    </div>

    <script>
        function calculateExpression() {
            var expression = document.getElementById('expression-input').value;
            try {
                // 使用 Math.js 计算表达式
                var result = math.evaluate(expression);
                // 显示结果
                document.getElementById('result').textContent = '结果: ' + result;
            } catch (error) {
                // 如果表达式无效,显示错误信息
                document.getElementById('result').textContent = '错误: ' + error.message;
            }
        }
    </script>
</body>

</html>

二、表达式计算

(一)eval函数

eval 函数是 JavaScript 中的一个内置函数,它可以计算由字符串形式的代码组成的表达式,并执行其中的 JavaScript 代码。换句话说,eval 可以将字符串当作代码来执行。这使得它在某些情况下非常有用,但同时也带来了一些安全风险。

使用 eval 的基本语法:

eval(string);
  • string:需要计算或执行的 JavaScript 代码字符串。

示例:

  1. 计算一个数学表达式:
var result = eval("1 + 2 * 3"); // 结果为 7
  1. 调用一个函数:
function greet() {
    console.log("Hello, World!");
}

eval("greet();"); // 输出 "Hello, World!"
  1. 访问或修改变量:
var x = 10;
eval("console.log(x);"); // 输出 10
eval("x = 20;"); // x 的值被修改为 20

JavaScript 中的 eval 函数可以执行字符串形式的 JavaScript 代码,因此它支持 JavaScript 中定义的所有运算符。以下是一些主要的运算符类型:

  1. 基本算术运算符

    • 加法:+
    • 减法:-
    • 乘法:*
    • 除法:/
    • 模运算(求余数):%
    • 指数:**Math.pow
  2. 一元运算符

    • 递增:++
    • 递减:--
    • 逻辑非:!
    • 位非:~
    • 负号:-(一元运算)
  3. 比较运算符

    • 小于:<
    • 大于:>
    • 小于等于:<=
    • 大于等于:>=
    • 等于:=====
    • 不等于:!=!==
  4. 逻辑运算符

    • 逻辑与:&&
    • 逻辑或:||
    • 逻辑非:!
  5. 位运算符

    • 位与:&
    • 位或:|
    • 位异或:^
    • 左移位:<<
    • 右移位:>>
    • 无符号右移位:>>>
  6. 赋值运算符

    • 简单赋值:=
    • 加等于:+=
    • 减等于:-=
    • 乘等于:*=
    • 除等于:/=
    • 模等于:%=
    • 幂等于:**=
    • 位与等于:&=
    • 位或等于:|=
    • 位异或等于:^=
    • 左移位等于:<<=
    • 右移位等于:>>=
    • 无符号右移位等于:>>>=
  7. 条件(三元)运算符

    • 形式:condition ? exprIfTrue : exprIfFalse
  8. 逗号运算符:允许对多个表达式求值,并返回最后一个表达式的值。

  9. 对象属性访问

    • 点符号:object.property
    • 方括形符号:object['property']
  10. 函数调用:使用圆括号调用函数。

  11. 数组和对象字面量

    • 数组:[element1, element2, ...]
    • 对象:{property1: value1, property2: value2, ...}
  12. 模板字符串

    • 使用反引号(`)创建模板字符串。

是否真正支持这些运算符,用了才知道。

eval 函数可以执行任何有效的 JavaScript 代码,包括上述运算符以及更复杂的表达式、函数定义、控制流语句等。然而,由于安全原因,通常建议避免使用 eval,因为它可能会执行恶意代码,尤其是在处理不可信的输入时。

安全风险:

  • eval 可以执行传入的任何代码,这意味着如果传入的字符串来自不可信的源,可能会对应用程序造成安全威胁。
  • 使用 eval 可能会使代码难以阅读和维护,因为它允许在运行时动态地执行代码。
  • eval 可能会影响 JavaScript 引擎的优化,因为它需要解析和执行字符串中的代码。

替代方案:

  • 安全执行:如果需要计算数学表达式,可以使用更安全的函数,如 Function 构造函数,但这仍然存在安全风险。
  • 解析库:对于复杂的表达式解析,可以使用专门的数学表达式解析库,如 math.js,这些库提供了更安全和功能更丰富的表达式解析能力。
  • 正则表达式:对于简单的文本替换或模式匹配,可以使用正则表达式代替 eval

在实际开发中,应尽量避免使用 eval,除非确实需要动态执行代码,并且能够确保传入的字符串是安全的。

(二)math.js

Math.js 是一个用于 JavaScript 和 TypeScript 的广泛使用的开源数学库。以下是 Math.js 的一些主要特点和优势:

  1. 全面的数学函数支持:Math.js 提供了丰富的数学函数,包括基本的算术运算、代数、微积分、统计、三角函数、逻辑运算等。

  2. 符号计算能力:Math.js 不仅能进行数值计算,还能处理符号计算。这意味着它可以对数学表达式进行操作,如简化、展开、因式分解、求导数和积分等。

  3. 多种数值类型:支持多种数值类型,包括整数、浮点数、复数和分数。

  4. 单位处理:Math.js 可以创建带有单位的数值,并进行单位转换和检查,这对于科学和工程计算非常有用。

  5. 矩阵运算:支持矩阵的创建、操作和多种矩阵函数,如矩阵乘法、求逆、行列式计算等。

  6. 高精度计算:Math.js 提供了高精度的数值计算选项,可以处理非常大的数或非常小的数,适用于需要高精度的场景。

  7. 易于使用的 API:Math.js 的 API 设计直观,易于学习和使用,使得数学表达式的编写和计算变得简单。

  8. 跨平台兼容性:Math.js 可以在浏览器和 Node.js 环境中运行,适用于 Web 应用、服务器端应用和桌面应用。

  9. 扩展性:用户可以根据自己的需要扩展 Math.js 的功能,如添加自定义函数或常量。

  10. 活跃的社区和文档:Math.js 拥有活跃的开发社区和完善的文档,为用户提供了丰富的学习资源和支持。

Math.js 的这些特性使其成为科学计算、工程模拟、数据分析和教育等多个领域的理想选择。无论是需要进行复杂的数学运算还是简单的数值处理,Math.js 都能提供强大的支持。

运算符:

操作名字语法关联性结果
(,)分组(x)没有2 * (3 + 4)14
[,]矩阵、索引[...]没有[[1,2],[3,4]][[1,2],[3,4]]
{,}对象{...}没有{a: 1, b: 2}{a: 1, b: 2}
,参数分隔符x, y从左到右max(2, 1, 5)5
.属性访问器obj.prop从左到右obj={a: 12}; obj.a12
;语句分隔符x; y从左到右a=2; b=3; a*b[6]
;行分隔符[x; y]从左到右[1,2;3,4][[1,2],[3,4]]
\n语句分隔符x \n y从左到右a=2 \n b=3 \n a*b[2,3,6]
+x + y从左到右4 + 59
+一元加号+y从右到左+44
-减去x - y从左到右7 - 34
-一元减号-y从右到左-4-4
*x * y从左到右2 * 36
.*元素乘法x .* y从左到右[1,2,3] .* [1,2,3][1,4,9]
/x / y从左到右6 / 23
./元素除法x ./ y从左到右[9,6,4] ./ [3,2,2][3,3,2]
%百分比x%没有8%0.08
%加法与百分比x + y%从左到右100 + 3%103
%带百分比的减法x - y%从左到右100 - 3%97
% modx % y从左到右8 % 32
^权力x ^ y从右到左2 ^ 38
.^元素功率x .^ y从右到左[2,3] .^ [3,3][8,27]
'转置y'从左到右[[1,2],[3,4]]'[[1,3],[2,4]]
!阶乘y!从左到右5!120
&按位和x & y从左到右5 & 31
~按位不~x从右到左~2-3
``按位或`xy`从左到右
`^`按位异或`x ^y`从左到右
<<左移x << y从左到右4 << 18
>>右算术移位x >> y从左到右8 >> 14
>>>正确的逻辑转变x >>> y从左到右-8 >>> 12147483644
and逻辑和x and y从左到右true and falsefalse
not逻辑不not y从右到左not truefalse
or逻辑或x or y从左到右true or falsetrue
xor逻辑异或x xor y从左到右true xor truefalse
=分配x = y从右到左a = 55
? :条件表达式x ? y : z从右到左15 > 100 ? 1 : -1-1
:范围x : y从右到左1:4[1,2,3,4]
to,in单位换算x to y从左到右2 inch to cm5.08 cm
==平等x == y从左到右2 == 4 - 2true
!=不等x != y从左到右2 != 3true
<较小x < y从左到右2 < 3true
>较大x > y从左到右2 > 3false
<=斯莫勒雷克x <= y从左到右4 <= 3false
>=Largereqx >= y从左到右2 + 4 >= 6true

运算符具有以下优先级,从最高到最低:

操作描述
(...) [...] {...}分组 矩阵 对象
x(...) x[...] obj.prop :函数调用 矩阵索引 属性访问器 键/值分隔符
'矩阵转置
!阶乘
^,.^
+, , ,-``~``not一元加号、一元减号、按位不、逻辑不
%,mod百分比, 模量
请参阅以下部分隐式乘法
*, , ,/``.*``./乘法、除法
+,-加法、减法
:范围
to,in单位换算
<<, ,>>``>>>按位左移位、按位向右算术移位、按位右逻辑移位
==, , , , ,!=``<``>``<=``>=关系
&按位和(延迟计算)
`^`
``
and逻辑和(延迟评估)
xor逻辑异或
or逻辑或(延迟评估)
?,:条件表达式
=分配
,参数和列分隔符
;行分隔符
\n,;语句分隔符
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值