青少年编程与数学 01-008 在网页上完成计算 19课题、分数计算

青少年编程与数学 01-008 在网页上完成计算 19课题、分数计算

编程完成分数算式的显示与计算。

一、分数的计算

分数的计算包括加、减、乘、除四种基本运算。以下是分数计算的步骤和规则:

加法和减法

  1. 找到公共分母:首先,你需要找到两个分数的公共分母。公共分母是两个分母的最小公倍数。
  2. 转换分数:将每个分数转换为具有公共分母的等价分数。
  3. 执行加法或减法:分子相加或相减,分母保持不变。

例子

假设我们要计算 ( 1 4 + 1 6 \frac{1}{4} + \frac{1}{6} 41+61 ):

  • 公共分母是 ( 4 ) 和 ( 6 ) 的最小公倍数,即 ( 12 )。
  • 转换分数:( 1 4 = 3 12 \frac{1}{4} = \frac{3}{12} 41=123 ),( 1 6 = 2 12 \frac{1}{6} = \frac{2}{12} 61=122 )。
  • 相加:( 3 12 + 2 12 = 5 12 \frac{3}{12} + \frac{2}{12} = \frac{5}{12} 123+122=125 )。

乘法

  1. 分子相乘:将两个分数的分子相乘。
  2. 分母相乘:将两个分数的分母相乘。
  3. 简化结果:如果可以,将结果简化为最简分数。

例子

假设我们要计算 ( 2 3 × 4 5 \frac{2}{3} \times \frac{4}{5} 32×54 ):

  • 乘分子:( 2 × 4 = 8 2 \times 4 = 8 2×4=8 )。
  • 乘分母:( 3 × 5 = 15 3 \times 5 = 15 3×5=15 )。
  • 结果:( 8 15 \frac{8}{15} 158 )(已经是最简分数)。

除法

  1. 将除数倒置:将除数的分子和分母倒置。
  2. 执行乘法:将被除数与倒置后的除数进行乘法运算。
  3. 简化结果:如果可以,将结果简化为最简分数。

例子

假设我们要计算 ( 3 4 ÷ 2 5 \frac{3}{4} ÷ \frac{2}{5} 43÷52 ):

  • 倒置除数:( 2 5 \frac{2}{5} 52 ) 变为 ( 5 2 \frac{5}{2} 25 )。
  • 乘法:( 3 4 × 5 2 \frac{3}{4} \times \frac{5}{2} 43×25 )。
  • 乘分子:( 3 × 5 = 15 3 \times 5 = 15 3×5=15 )。
  • 乘分母:( 4 × 2 = 8 4 \times 2 = 8 4×2=8 )。
  • 结果:( 15 8 \frac{15}{8} 815 )。

简化分数

简化分数的步骤是将分子和分母除以它们的最大公约数(GCD)。

例子

简化 ( 8 12 \frac{8}{12} 128 ):

  • 8 和 12 的最大公约数是 4。
  • 8 除以 4 等于 2。
  • 12 除以 4 等于 3。
  • 简化后的分数是 ( 2 3 \frac{2}{3} 32 )。

分数的计算可以涉及更复杂的概念,如混合数、带分数等,但基本的运算规则是相同的。

二、编程计算

编写网页程序,完成分数的显示与计算。要求:

  1. 功能要求:用户可以两个分数,点击计算按钮后由程序在页面上显示计算过程和结果。计算结果要求是整数或分数。
  2. 使用MathJax显示数学算式。
  3. 需要HTML来构建界面,CSS来设置样式,以及JavaScript来实现计算逻辑。所有代码都写在一个.html文件中。
  4. 页面中显示中文。代码中添加中文注释。
  5. 设计尽量美观的样式,使用暗色调背景。页面元素在网页中合理居中。
  6. 用户可以多次输入并计算。
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>分数计算器</title>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
    <style>
        body {
            background-color: #333;
            color: white;
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
        }

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

        input[type="number"],
        select {
            width: 70px;
            margin: 5px;
            text-align: center;
            border: none;
        }

        button {
            background: #555;
            color: white;
            border: none;
            padding: 5px 10px;
            border-radius: 5px;
            cursor: pointer;
        }

        button:hover {
            background: #666;
        }

        .result {
            margin-top: 20px;
            font-size: 48px;
        }

        .hr {
            border-bottom: 2px solid yellow;
        }

        table {
            align-self: center;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>分数计算器</h1>
        <table>
            <tr>
                <td class="hr"><input type="number" id="num1" placeholder="分子1"></td>
                <td rowspan="2"><select id="operator">
                        <option value="+">+</option>
                        <option value="-">-</option>
                        <option value="*">*</option>
                        <option value="/">/</option>
                    </select></td>
                <td class="hr"><input type="number" id="num2" placeholder="分子2"></td>
                <td rowspan="2"><button onclick="calculate()">计算</button></td>
            </tr>
            <tr>
                <td><input type="number" id="denom1" placeholder="分母1"></td>
                <td><input type="number" id="denom2" placeholder="分母2">
                </td>
            </tr>
        </table>
        <p class="result" id="result"></p>
    </div>
    <script>
        function calculate() {
            // 获取输入值
            let num1 = document.getElementById('num1').value;
            let denom1 = document.getElementById('denom1').value;
            let operator = document.getElementById('operator').value;
            let num2 = document.getElementById('num2').value;
            let denom2 = document.getElementById('denom2').value;

            // 检查输入的有效性
            if (isNaN(num1) || isNaN(denom1) || denom1 === "0" ||
                isNaN(num2) || isNaN(denom2) || denom2 === "0") {
                alert("请输入有效的分数(分母不能为零)!");
                return;
            }

            // 计算结果
            let result;
            if (operator === '+') {
                result = addFractions(num1, denom1, num2, denom2);
            } else if (operator === '-') {
                result = subtractFractions(num1, denom1, num2, denom2);
            } else if (operator === '*') {
                result = multiplyFractions(num1, denom1, num2, denom2);
            } else if (operator === '/') {
                result = divideFractions(num1, denom1, num2, denom2);
            }

            // 显示结果
            // let mathString = `<p> 
            // \[
            //  $\frac{${num1}}{${denom1}} ${operator} \frac{${num2}}{${denom2}} = \frac{${result.numerator}}{${result.denominator}}$
            // \]
            // </p>`;
            let mathString = `\\(\\frac{${num1}}{${denom1}} ${operator} \\frac{${num2}}{${denom2}} = \\frac{${result.numerator}}{${result.denominator}}\\)`;
            document.getElementById('result').innerHTML = mathString;
            // 延迟执行MathJax渲染以确保DOM更新完成
            setTimeout(function () {
                MathJax.typeset();
            }, 100);
        }

        // 分数加法
        function addFractions(n1, d1, n2, d2) {
            let commonDenominator = d1 * d2;
            let numerator = n1 * d2 + n2 * d1;
            return simplifyFraction(numerator, commonDenominator);
        }

        // 分数减法
        function subtractFractions(n1, d1, n2, d2) {
            let commonDenominator = d1 * d2;
            let numerator = n1 * d2 - n2 * d1;
            return simplifyFraction(numerator, commonDenominator);
        }

        // 分数乘法
        function multiplyFractions(n1, d1, n2, d2) {
            let numerator = n1 * n2;
            let denominator = d1 * d2;
            return simplifyFraction(numerator, denominator);
        }

        // 分数除法
        function divideFractions(n1, d1, n2, d2) {
            let numerator = n1 * d2;
            let denominator = d1 * n2;
            return simplifyFraction(numerator, denominator);
        }

        // 简化分数
        function simplifyFraction(n, d) {
            let gcd = greatestCommonDivisor(n, d);
            return { numerator: n / gcd, denominator: d / gcd };
        }

        // 求最大公约数
        function greatestCommonDivisor(a, b) {
            while (b !== 0) {
                let t = b;
                b = a % b;
                a = t;
            }
            return a;
        }
    </script>
</body>

</html>

三、调试练习

思考:程序中的计算与手工计算有何不同?

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值