首页 > 编程语言 >结对编程-C#-四则运算

结对编程-C#-四则运算

时间:2024-04-16 17:58:19浏览次数:30  
标签:结对 string C# 四则运算 result expression 表达式

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

小学老师要每周给同学出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

标签:结对,string,C#,四则运算,result,expression,表达式
From: https://www.cnblogs.com/yzp0607/p/18138839

相关文章

  • 首次使用navicat/SQLyog报错
    今天在一个错误上耗费了一整天。我写的代码:createtableemployee( idINT, enameVARCHAR(20), genderVARCHAR(20), salaryDECIMAL);错误信息:1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionforth......
  • 在Windows操作系统中,runonce.exe是一个系统进程,用于执行在用户登录时只需执行一次的任
    在Windows操作系统中,runonce.exe是一个系统进程,用于执行在用户登录时只需执行一次的任务或命令。它主要通过注册表中的RunOnce键来实现这些任务的执行。为什么会存在runonce.exe?初始化任务:在用户登录时,有时需要执行一些初始化任务,例如设置默认值、创建用户配置等。这些......
  • Splice方法的图像化理解
    splice在英语中的意思是拼接,在实际的代码使用中,splice就在数组中起到了一个拼接的作用使用方法splice(x,y,a,b,c,...)其中x、y为数字,a、b、c为新添加的项,意思是从数组的第x项开始删除y项,并在其中添加a、b、c...,其中x、y必填,abc可不填图像理解现在让我们将splice方法想象成一......
  • 微服务Spring Cloud17_服务调用方式2
    一、RPC和HTTP无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下2种:RPC:RemoteProduceCall远程过程调用,RPC基于Socket,工作在会话层。自定义数据格式,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型......
  • 视频汇聚/安防视频监控云平台EasyCVR云端录像播放与下载的接口调用方法
    视频汇聚/安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流,平台支持高清视频的接入、管理、共享,支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云......
  • uniapp checkbox_group实现全选和反选功能
    <template> <view> <label> <checkbox:value="value":checked="allpicks"@tap="allpick"/><text>全选</text> </label> <checkbox-groupname="allpick"> <label......
  • SpringCloud(七.3)ES(elasticsearch)-- RestClient操作
    RestClient是ES官方提供的各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html官方文档使用教程    使用RestClient操作索引库使用案例:  hote......
  • masscan下载编译安装,Visual Studio 2022
    Windowswin11编译masscan.exe,2024解决错误:LNK2019无法解析的外部符号e_next_bytee_next_int32第一步:克隆仓库https://github.com/robertdavidgraham/masscan.git第二部:VisualStudio打开vs10/masscan.sln第三步:项目-重定目标解决方案第四步:生成-重新生成解决方案......
  • CSS重置(CSS Reset)
    `/*EricMeyer'sResetCSSv2.0(http://cssreset.com)*/html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,st......
  • oracle表空间扩充
    一、查询表空间使用情况SELECTUPPER(F.TABLESPACE_NAME)"表空间名",D.TOT_GROOTTE_MB"表空间大小(M)",D.TOT_GROOTTE_MB-F.TOTAL_BYTES"已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB-F.TOTAL_BYTES)/D.TOT_GROOTTE_MB*100,2),'990.99')&q......