首页 > 编程语言 >软件开发与创新实践——结对编程

软件开发与创新实践——结对编程

时间:2024-04-23 16:35:32浏览次数:26  
标签:结对 return string 软件开发 int 编程 100 include op

实验目的

本次学习的任务是通过两人结对编程(一个人Coding,一个人审核)的方式,来体会团队合作的过程。本次实验由我和2230232共同完成。

编程题目

小学老师要每周给同学出300道四则运算练习题。
–这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
– 两个运算符,100 以内的数字,不需要写答案。
– 需要检查答案是否正确,并且保证答案在 0..100 之间
– 尽可能地多设置一些条件

项目实现过程

本次项目我们通过讨论决定使用C++语言进行编写。我们通过C++中头文件实现随机生成数字,通过getPriority()函数生成随机生成计算式,为了确保计算结果最终在0~100之间,我们设置了一个循环调用getAnswer(int a, string op, int b)函数来确保该计算式的结果是在0~100以内,若答案超过这个范围则重新生成计算式。在答题结束后通过displayAnswers()函数来显示答题的题目。但是在实际使用中发现打印出的答案和题目使用一个颜色,所以我们经过讨论使用<windows.h>头文件中的SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);来设置答案的颜色,使得更方便区分,也易于使用。

项目实现的功能

  1. 输出需要的计算式数量,随机生成需要数量的计算式。
  2. 作答完成后统计正确数量
  3. 输出打印正确的答案

运行截图


实验代码

#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <random>
#include <algorithm>
#include <windows.h>

using namespace std;

class Project {
public:
    int M = 3;
    static const int N = 301;
    int a[N];
    int b[N];
    int c[N];
    float ans[N];
    float check[N];
    int w[N];
    bool flag;
    map<string, int> opMap;
    string op[4] = {"+", "-", "*", "/"};
    string ch1[N];
    string ch2[N];

int getAnswer(int a, string op, int b) {
    if (a < 0 || b < 0) return -1;  // 如果a或b小于0,则返回-1
    if (a > 100 || b > 100) return -1;  // 如果a或b大于100,则返回-1
    if (op == "+") {
        if (a + b > 100) return -1;  // 如果加法结果大于100,则返回-1
        return (a + b);
    }
    if (op == "-") {
        if (a - b < 0) return -1;  // 如果减法结果小于0,则返回-1
        return (a - b);
    }
    if (op == "*") {
        if (a * b > 100) return -1;  // 如果乘法结果大于100,则返回-1
        return (a * b);
    }
    if (op == "/") {
        if (b == 0 || a % b != 0 || a / b > 100) return -1;  // 若b为0或a不能整除b或除法结果大于100,则返回-1
        return (a / b);
    }
    return 0;
}



    void displayAnswers() {
        cout << "正确答案如下:" << endl;
        for (int i = 1; i <= M; i++) {
            int correctAnswer = getAnswer(a[i], ch1[i], b[i]);
            //调用此方法设置参数
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
            correctAnswer = getAnswer(correctAnswer, ch2[i], c[i]);
            cout << "(" << i << ") " << a[i] << ch1[i] << b[i] << ch2[i] << c[i] << "=" ;
            //调用此方法设置参数
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
            cout<< correctAnswer << endl;
        }
    }







void getPriority() {
    opMap["+"] = 0;
    opMap["-"] = 0;
    opMap["*"] = 1;
    opMap["/"] = 1;

    random_device rd;
    mt19937 gen(rd());
    for (int i = 0; i <= M; i++) {
        //设置一个循环,确保生成的计算式计算结果在0~100之间
        flag = false;
        while (!flag) {
            a[i] = gen() % 101;
            b[i] = gen() % 101;
            c[i] = gen() % 101;
            ch1[i] = op[gen() % 4];
            ch2[i] = op[gen() % 4];
            int result = getAnswer(a[i], ch1[i], b[i]);
            result = getAnswer(result, ch2[i], c[i]);
            if (result >= 0 && result <= 100) {
                ans[i] = result;
                flag = true;
            }
        }
    }
}


public:
    Project() {
        getPriority();
    }

    int getM() {
        return M;
    }

    void setM(int m) {
        M = m;
    }

    int* getA() {
        return a;
    }

    int* getB() {
        return b;
    }

    int* getC() {
        return c;
    }

    float* getAns() {
        return ans;
    }

    float* getCheck() {
        return check;
    }

    int* getW() {
        return w;
    }

    bool isFlag() {
        return flag;
    }

    map<string, int> getOpMap() {
        return opMap;
    }

    string* getOp() {
        return op;
    }

    string* getCh1() {
        return ch1;
    }

    string* getCh2() {
        return ch2;
    }
};

int main() {
    int t;

    Project pj = Project();
    cout << "请输入您要出的题目数量" << endl;
    cin >> t;
    pj.setM(t);
    pj.getPriority();
    int num = 0;
    cout << "请依次输入答案,按回车自动进入下一道题" << endl;
    for (int i = 1; i <= pj.getM(); i++) {
        cout << "(" << i << ") " << pj.getA()[i] << pj.getCh1()[i] << pj.getB()[i] << pj.getCh2()[i] << pj.getC()[i] << "=";
        cin >> pj.getCheck()[i];
        if (pj.getCheck()[i] != pj.getAns()[i])
            pj.getW()[++num] = i;
    }
    cout << "您一共答对" << (pj.getM() - num) << "道题" << "答错" << num << "道题" << endl;
    pj.displayAnswers();

    return 0;
}

标签:结对,return,string,软件开发,int,编程,100,include,op
From: https://www.cnblogs.com/z045/p/18153144

相关文章

  • 软件开发与创新——结对编程
    本次结对编程作业由我和学号2252406的同学一起编写一、题目:小学老师要求出300道四则运算练习题要求:两个运算符,都是100以内的数字,答案在0-1000之间。拓展功能:有除法时计算的结果保留两位小数,避免除0错误,回答错误的题目存到“错题本.txt”文件中,方便后续查看及改正。300道题全部......
  • day20-并发编程(下)
    1.多进程开发进程是计算机中资源分配的最小单元;一个进程中可以有多个线程,同一个进程中的线程共享资源;进程与进程之间则是相互隔离。Python中通过多进程可以利用CPU的多核优势,计算密集型操作适用于多进程。1.1进程介绍importmultiprocessingdeftask(): passif__name......
  • 异步编程模型
    本文内容异步编程提升响应能力异步方法易于编写异步方法的运行机制API异步方法显示另外6个通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力。但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写、调试和维护。C#支持简化的方法,即异步编程,它......
  • 认识一下JavaScrip中的元编程
    本文分享自华为云社区《元编程,使代码更具描述性、表达性和灵活性》,作者:叶一一。背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一......
  • Windows编程系列:设置资源管理器背景
    偶然的机会,在github上发现了一个有趣且优秀的项目,https://github.com/Maplespe/explorerTool。这里学习了一下,并顺带学习了一下涉及的相关知识点。不得不感叹作者的厉害之处,能想到这种方法。 主要实现原理是:1、通过ApiHook,在调用CreateWindows函数创建窗口时,如果是资源管理器......
  • 实验3_C语言函数应用编程
    Task11#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);8voidprint_spaces(intn);9voidprint_blank_lines(intn)......
  • Python企业面试题5 —— 网络编程和并发
    1.简述进程、线程和协程的区别以及应用场景?#进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度。#线程:拥有自己独立的栈和共享的堆,线程也由操作系统调度。#协程和线程:协程避免了无意义的调度,由此可以提高性能;但同时协程失去了线程使用多CPU的能力。进程与......
  • linux系统是未来_大小写敏感_case_sensitive_编程原生态
    修改py文件......
  • 实验3 C语言函数应用编程
    //task1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn);//函数声明in......
  • 实验3 C语言函数应用编程
    实验任务11#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidprint......