首页 > 编程语言 >结对编程——四则运算

结对编程——四则运算

时间:2023-04-13 14:04:35浏览次数:36  
标签:numStack 结对 编程 num1 num2 int 四则运算 else result

内容目录

  1. 结对编程成员
  2. 实验目的
  3. 实验方法
  4. 实验内容
  5. 实验代码
  6. 实验结果截图
  7. 心得体会

1.结对编程成员
  2152125 & 2152130


2.实验目的

  通过学习和练习结对编程,达到提高代码质量和稳定性、增强团队合作和沟通能力、减少错误、增加效率、促进知识分享、提高代码可读性和可维护性等效果。

 

3.实验方法

  两名程序员一同合作完成四则运算程序的编写;一人负责编写代码,另一人在旁边负责审查代码、提出建议和指导。在一段时间内,两人交替角色和任务,确保代码被充分审查和改进。

 

4.实验内容

  • 小学老师要每周给同学出300道四则运算练习题。
  • 这个程序有很多种实现方式:

–      C/C++

–      C#/VB.net/Java

–      Excel

–      Unix Shell

–      Emacs/Powershell/Vbscript

–      Perl

–      Python

  • 一或两个运算符(a+b或a+b+c),100 以内的数字,不需要写答案。
  • 需要检查答案是否正确,并且保证答案在 0..100 之间
  • 尽可能地多设置一些条件

 

5.实验代码

#include <random>
#include<string>
#include <iostream>
#include <stack>
#include <unordered_map>
using namespace std;

const int ADD = 0;
const int SUB = 1;
const int MUL = 2;
const int DIV = 3;
const string ope[4] = { "+","-","*","/" };
class Question {
public:
    string content;
    int ans;
    Question() :content(""), ans(0) {};
    Question(string con, int ans) {
        this->content = con;
        this->ans = ans;

    }
    void print_ques();
};
void Question::print_ques() {
    cout << this->content << "=" << endl << endl;
}
// 生成随机整数的函数,包含端点
int generateRandomInt(int min, int max) {
    // 使用 C++11 随机数引擎
    std::random_device rd; // 随机设备,用于获取种子
    std::mt19937 gen(rd()); // Mersenne Twister 随机数引擎
    std::uniform_int_distribution<int> dis(min, max); // 均匀分布整数
    return dis(gen); // 生成并返回随机整数
}
//传入四则运算数学表达式的字符串,返回int结果
int calculateMathExpression(const std::string& expr) {
    std::stack<int> numStack;  // 存放数字的栈
    std::stack<char> opStack;  // 存放操作符的栈

    std::unordered_map<char, int> precedence = {
        {'+', 1}, {'-', 1},
        {'*', 2}, {'/', 2}
    };  // 运算符的优先级映射

    int i = 0;
    while (i < expr.length()) {
        char c = expr[i];
        if (isdigit(c)) {
            int num = 0;
            while (i < expr.length() && isdigit(expr[i])) {
                num = num * 10 + (expr[i] - '0');
                i++;
            }
            numStack.push(num);
        }
        else if (c == '+' || c == '-' || c == '*' || c == '/') {
            while (!opStack.empty() && precedence[opStack.top()] >= precedence[c]) {
                char op = opStack.top();
                opStack.pop();

                int num2 = numStack.top();
                numStack.pop();

                int num1 = numStack.top();
                numStack.pop();

                int result = 0;
                if (op == '+') {
                    result = num1 + num2;
                }
                else if (op == '-') {
                    result = num1 - num2;
                }
                else if (op == '*') {
                    result = num1 * num2;
                }
                else if (op == '/') {
                    result = num1 / num2;
                }
                numStack.push(result);
            }
            opStack.push(c);
            i++;
        }
        else {
            i++;
        }
    }

    while (!opStack.empty()) {
        char op = opStack.top();
        opStack.pop();

        int num2 = numStack.top();
        numStack.pop();

        int num1 = numStack.top();
        numStack.pop();

        int result = 0;
        if (op == '+') {
            result = num1 + num2;
        }
        else if (op == '-') {
            result = num1 - num2;
        }
        else if (op == '*') {
            result = num1 * num2;
        }
        else if (op == '/') {
            result = num1 / num2;
        }
        numStack.push(result);
    }

    return numStack.top();
}
//随机生成算式
Question generate_ques() {
    int n = generateRandomInt(1, 4);
    string con = "";
    n = 2 * n + 1;
    int* a = new int[n];
    for (int i = 0; i < n; i++)
        a[i] = generateRandomInt(1, 99);
    for (int i = 0; i < n; i++) {
        if (i % 2 == 0)
            con.append(to_string(a[i]));
        else {
            int index = a[i] % 4;
            con.append(ope[index]);
        }
    }
    Question A(con, calculateMathExpression(con));
    return A;
}
//菜单界面
void title() {
    Question A[100];
    for (int i = 0; i < 100; i++)
        A[i] = generate_ques();
    cout << "<--说明:本程序会自动生成100道数学计算题,只涉及加减乘除四种运算符,操作数的范围:[1,99].\n";
    cout << "在答题时输入114可退出程序,输入514可跳过本题。\n";
    cout << "注意!不支持浮点数的运算,因此带有除法的算式得出的结果可能会与手算或计算器结果不同\n";
    cout << endl << endl;
    while (true) {

        cout << "\t\t\t\t+---------------------------------+\n";
        cout << "\t\t\t\t+-----------1->查看题目-----------+\n";
        cout << "\t\t\t\t+-----------2->开始做题-----------+\n";
        cout << "\t\t\t\t+-----------3->退出---------------+\n";
        cout << "\t\t\t\t+---------------------------------+\n";

        /*cout << "\n1->查看题目" << endl;
        cout << "2->开始做题" << endl;
        cout << "3->退出" << endl << endl;*/
        cout << "请输入指令:";
        int o;
        cin >> o;
        switch (o) {
        case 1: {
            system("cls");
            for (int i = 0; i < 100; i++)
                A[i].print_ques();
            break;
        }
        case 2: {
            system("cls");
            for (int i = 0; i < 100; i++) {
                cout << "+---------------------------------+" << endl;
                cout << A[i].content << "=";
                int ans;
                cin >> ans;
                if (ans == A[i].ans)
                    continue;
                else if (ans == 114)return;
                else if (ans == 514) {
                    cout << "跳过此题" << endl;
                    continue;
                }
                else {
                    cout << "\n答案错误,请重新输入!" << endl;
                    i--;
                }
            }
            break;
        }
        case 3: {
            return;
        }
        default: {
            cout << endl << "给你一拳,让你瞎按" << endl << endl;
        }
        }
    }
}

int main()
{
    system("color 8E");
    title();
    system("pause");
    return 0;
}

 

6.实验结果截图

  1)主界面

 

  2)选择查看题目功能

 

  3)选择开始做题功能

 

  4)输入514跳过此题目

 

7.心得体会

2152130:

  作为结对编程的一员,通过这次实验作业,自认为提高了我们的编程效率,减少了编程过程中的错误率,同时也增强了我们的团队协作的能力。在这个过程中,我们可以通过不断地交流,讨论和协商来寻找问题的解决方案,同时也可以学习到对方的编程技巧和思维方式,从而更好地提升自己的能力。


2152125:

  在结对编程中,我们需要注重与对方的沟通和合作,包括尊重对方的意见,耐心地倾听对方的想法,以及积极地提出自己的看法和建议。通过这种合作方式,我们能更好地完成编程任务,同时也能够建立良好的团队合作关系,共同实现项目的目标。

标签:numStack,结对,编程,num1,num2,int,四则运算,else,result
From: https://www.cnblogs.com/marisa514/p/17314534.html

相关文章

  • 结对编程——四则运算出题及核对答案
    结对编程对象:2152215 目录一、前言二、题设三、分析和设计思路四、功能实现和代码五、运行结果六、实验总结和体会 一、前言  结对编程(英语:Pairprogramming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一......
  • 03.网络编程入门
    1、概述什么是网络编程?网络编程可以让程序与网络上的其他设备中的程序进行数据交互。网络通信的基本模式:Client-Server(CS)、Browser/Server(BS)CS模式BS模式网络通信三要素......
  • 四则运算练习&竞赛系统(结对编程)
    四则运算练习&竞赛系统(结对编程)伙伴:2152334项目要求小学老师要每周给同学出300道四则运算练习题一或两个运算符(a+b或a+b+c),100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0..100之间尽可能地多设置一些条件。请两位同学以结对编码(一个同学coding,另一个......
  • IDL编程语言的代码,打开文件、读文件、写文件
    proread_write_file,filename,output_filename;打开输入文件openr,1,filename,/get_lun;读取文件内容content=''while(noteof(1))dobeginline=''readf,1,linecontent=strjoin([content,line......
  • 编程打卡:C语言趣味编程习题做
    编程打卡:C语言趣味编程习题做百钱百鸡问题问题描述一只Cock卖5钱,Hen卖3钱,chicken卖0.33333333钱,真正工作的时候不要用浮点数存钱啊笨蛋!然后100钱买了100只鸡,问各买了多少只。设计思路解不定方程,穷举。两层循环遍历各种鸡的个数,第三种鸡可以直接相减得出结果,然后判......
  • Java并发编程的艺术
    回复并发编程的艺术即可获取《Java并发编程的艺术》正是为了解决这个问题而写的。书中采用循序渐进的讲解方式,从并发编程的底层实现机制入手,逐步介绍了在设计Java并发程序时各种重要的技术、设计模式与应用,同时辅以丰富的示例代码,使得开发人员能够更快地领悟Java并发编程的要领,围绕......
  • Vue.js 编程式路由导航
    视频>router-link最后会转成标签,有时候页面不是a标签就不能用router-link来写9.编程式路由导航作用:不借助<router-link>实现路由跳转,让路由跳转更加灵活具体编码://$router的两个APIthis.$router.push({ name:'xiangqing', params:{ id:xxx, title:xxx ......
  • 结对编程---四则运算
    目录一、实验目的二、实验内容三、实验代码四、实验结果五、实验心得一、实验目的通过两位同学组队用结对编码(两位位同学轮流coding,另一个同学在旁边审核代码)的方式完成本次实验。本次实验需要设计一个四则运算练习题的随机出题程序,可以通过C/C++/Java/Python等语言进......
  • Nvidia Tensor Core-WMMA API编程入门
    1WMMA(Warp-levelMatrixMultiplyAccumulate)API对于计算能力在7.0及以上的CUDA设备,可以使用CUDAC++API调用TensorCore,支持形如D=AB+C的混合精度的矩阵乘运算。template<typenameUse,intm,intn,intk,typenameT,typenameLayout=void>classfragment;......
  • 结对编程
    21522012157132·关于结对编程 结对编程(Pairprogramming)来自于极端编程XP(eXtremeProgramming),是它的十二个最佳实践之一。顾名思义,结对编程就是两个程序员坐在一起,结对进行代码开发。在极限编程中,所有的软件产品都是由两个程序员并排坐在一起,在同一台机器上共同完成的。关......