结对编程-四则运算
要求:

小学老师要每周给同学出300道四则运算练习题。
–这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
–两个运算符,100 以内的数字,不需要写答案。

–需要检查答案是否正确,并且保证答案在 0..100 之间

–尽可能地多设置一些条件

也可以让同学们自选一个小应用程序进行结对编程的开发
请两位同学以结对编码(一个同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验,并把程序、运算结果、博客体会等截屏发到其中一位同学的博客上,并在博客中体现另一位同学的学号(仅学号不体现姓名)

我们实现了一个生成 一百以内计算结果的 / 带优先级的 四则运算生成器
我们采用表达式树生成了带括号的四则运算表达式,并使用C#特有的DataTable对结果进行计算,递归的约束计算结果为100以内的浮点数。

我们首先生成问题

然后输出答案

为了锻炼小学生们的计算能力和四舍五入的能力,为了保证题目的难度,我们的结果几乎都是小数,小学生哥开心坏了!!

using System;
using System.Collections.Generic;

class Program
{
    static Random random = new Random();

    static void Main()
    {
        // 存储符合条件的表达式和答案
        List<string> expressions = new List<string>();
        List<string> expressionsWithResults = new List<string>();

        while (expressions.Count < 300)
        {
            // 生成随机算术表达式
            string expression = GenerateExpression(3); // 递归深度可以根据需要调整

            // 计算表达式的结果
            double result = EvaluateExpression(expression);

            // 检查结果是否小于 100
            if (result < 100)
            {
                // 将符合条件的表达式添加到列表中
                expressions.Add($"{expression} = ");
                expressionsWithResults.Add($"{expression} = {result}");
            }
        }

        // 输出表达式 = 空白
        Console.WriteLine("表达式 = <空白>:");
        foreach (string expr in expressions)
        {
            Console.WriteLine(expr);
        }

        // 输出表达式 = 答案
        Console.WriteLine("\n表达式 = 答案:");
        foreach (string exprWithResult in expressionsWithResults)
        {
            Console.WriteLine(exprWithResult);
        }
    }

    // 生成随机算术表达式
    static string GenerateExpression(int depth)
    {
        // 在特定深度时可能返回一个操作数(终止条件)
        if (depth == 0)
        {
            return random.Next(1, 101).ToString();
        }

        // 随机选择运算符
        char[] operators = { '+', '-', '*', '/' };
        char op = operators[random.Next(operators.Length)];

        // 递归生成左右表达式
        string leftExpression = GenerateExpression(depth - 1);
        string rightExpression = GenerateExpression(depth - 1);

        // 使用括号将左右表达式包裹起来
        return $"({leftExpression} {op} {rightExpression})";
    }

    // 计算算术表达式的结果
    static double EvaluateExpression(string expression)
    {
        // 使用 DataTable 来计算表达式的结果
        // 请注意,这种方式在某些情况下可能存在安全问题
        System.Data.DataTable dt = new System.Data.DataTable();
        object result = dt.Compute(expression, string.Empty);
        return Convert.ToDouble(result);
    }
}



结对者:2252710