计算与软件共程作业2

作业要求:

https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10402

作业1

预习

阅读讲义( https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html )第二部分内容 2. 个人开发技术

  • 软件开发流程不光指团队的流程, 软件团队是由个人组成的。在团队的大流程中, 是每一个具体的个人在做开发,测试,用户界面设计,管理,交流等工作。因此, 个人在软件团队中也有个人的流程。
    软件开发的工作量和质量怎么衡量呢? PSP认为有下列4 个因素:
  • 项目/任务有多大?
    说明项目的大小, 一般用代码行数 (Line Of Code, LOC) 来表示;也可以用功能点 (function point). 一个重要的指标是: 你在实际产品中写了多少代码, 不包括空行/注释行/单字符行 .
  • 花了多少时间?
    可以用小时, 天,月,年来表示。一组人所花费的时间可以用 (人数*时间) 来表示,例如某项目花费了10个人·月。
  • 质量如何?
    可以用缺陷的数量来除以项目的大小。 例如 5 bugs / KLOC, 意味着每千行程序有5个缺陷。
  • 是否按时交付?
    稳定即可

两种效能分析方法:抽样(Sampling), 代码注入(Instrumentation)

单元测试:

  • 单元测试应该在最低的功能/参数上验证程序的正确性。
  • 单元测试必须由最熟悉代码的人(程序的作者)来写。
  • 单元测试过后,机器状态保持不变。
  • 单元测试要快(一个测试运行时间是几秒钟,而不是几分钟)。
  • 单元测试应该产生可重复、一致的结果
  • 单元测试应该覆盖所有代码路径,包括错误处理路径,为了保证单元测试的代码覆盖率,单元测试必须测试公开的和私有的函数/方法。
  • 单元测试应该集成到自动测试的框架中
  • 单元测试必须和产品代码一起保存和维护。

个人程序

(本作业内容来源于网址:https://www.cnblogs.com/xinz/p/7417960.html,
https://www.cnblogs.com/jiel/p/4810756.html
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。 可以使用C,C++,或者C#等语言实现。

要求

分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度
要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级
对于三、四、五年级需要支持括号与多个运算符
程序支持判断对错及累计得分与时间
一次可以出100道题目,而且不能重复(比如2+3 与 3+2 算重复的)
充分发挥想象增加满足小学生数学检测需要的功能
编程思路:

  • 四则运算.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度
  • 解决思路:switch进行变量控制,年纪用+,-,,/,运算个数来分类。一年级只有+,-,二年级三个数进行+,-,三年级,/,四年级三个数运算,五年级小数运算。()加入其中。
    要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级
  • 解决思路,易0-100以内运算,中,100-1000以内运算,难,1000-10000以上运算
    程序支持判断对错及累计得分与时间
  • 解决思路:对错用count计数,最终算出正确率。时间用clock函数计算
    一次可以出100道题目,而且不能重复(比如2 + 3 与 3 + 2 算重复的)
  • 采用不重复随机算法,尽量降低重复。
    充分发挥想象增加满足小学生数学检测需要的功能
  • 想法:支持循环测验。
    运行结果:

作业2

git学习与码云代码托管平台gitee

  1. 阅读网址如下关于git的使用https://www.liaoxuefeng.com/wiki/896043488029600或https://gitee.com/help/categories/43
  2. 通过之前已经注册的码云账号,学会简单的使用将作业1所写代码托管到gitee平台上个人仓库
    在博客园给出作业并包括所写的代码,同时给出托管于gitee上的链接
    程序下载非常的慢,我就直接用网页端提交了,发现效果挺好。
    https://gitee.com/TG1999/four_arithmetic_operations/blob/master/四则运算/四则运算.cpp

代码:

// 四则运算.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度 
//解决思路:switch进行变量控制,年纪用+,-,*,/,运算个数来分类。一年级只有+,-,二年级三个数进行+,-,三年级*,/,四年级三个数运算,五年级小数运算。()加入其中。
//要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级 
//解决思路,易0-100以内运算,中,100-1000以内运算,难,1000-10000以上运算
//程序支持判断对错及累计得分与时间
//解决思路:对错用count计数,最终算出正确率。时间用clock函数计算
//一次可以出100道题目,而且不能重复(比如2 + 3 与 3 + 2 算重复的)
//采用不重复随机算法,尽量降低重复。
//充分发挥想象增加满足小学生数学检测需要的功能 
//想法:支持循环测验。


#include <iostream>
#include<cstdlib>
#include<time.h>
#define CLOCKS_PER_SEC ((clock_t)1000)
using namespace std;
int Difficulty(int difficulty)
{
    int N=0;
    switch (difficulty)
    {
    case 1:
        N = 100;
        break;
    case 2:
        N = 1000;
        break;
    case 3:
        N = 10000;
        break;
    default:
        cout << "请输入正确的难度。" << endl;
        break;
    }
    return N;
}
void Grade(int grade,int numberExercise,int N) {
    double a1, a2, a3,c,k, correctrate;
    double duration;//做题花费的时间
    clock_t start, finish;
int mode, count = 0;
    switch (grade)
    {
    case 1: //+,-,2
        start = clock();
        srand((unsigned)time(NULL));
        for (int i = 0; i < numberExercise; i++) {
            a1 = rand() % N;
            a2 = rand() % N;
            mode = rand() % 2;
            switch (mode) //确定运算符
            {
            case 0:
                cout << a1<< "+" << a2 << "=" << endl;
                c = a1+a2;
                break;
            case 1:
                c = a1-a2;
                cout << a1 << "-" << a2<< "=" << endl;
                break;
            }
            cout << "请输入答案:";
            cin >> k;
            if (k == c) {
                cout << "恭喜你答对了,请再接再厉" << endl;
                count = count + 1;
            }
            else if (k != c) {
                cout << "虽然答错了,但不要灰心哦,正确答案是" << c << endl;
            }
        }
        correctrate = (count*100) / numberExercise;
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        cout << "恭喜你做完了" << numberExercise << "道题目,做对了" << count << "道题目,正确率为 " << correctrate << "%" <<"  一共耗时(s):"<<duration<<endl;
        break;
    case 2://+-,3
        start = clock();
        srand((unsigned)time(NULL));
        for (int i = 0; i < numberExercise; i++) {
            a1 = rand() % N;
            a2 = rand() % N;
            a3 = rand() % (2*N)-N;
            mode = rand() % 2;
            switch (mode) //确定运算符
            {
            case 0:
                cout << a1 << "+" << a2 <<"+("<<a3<< ")=" << endl;
                c = a1+a2+a3;
                break;
            case 1:
                c = a1 - a2+a3;
                cout << a1 << "-" << a2 <<"+("<<a3<< ")=" << endl;
                break;
            }
            cout << "请输入答案:";
            cin >> k;
            if (k == c) {
                cout << "恭喜你答对了,请再接再厉" << endl;
                count = count + 1;
            }
            else if (k != c) {
                cout << "虽然答错了,但不要灰心哦,正确答案是" << c << endl;
            }
        }
        correctrate = (count * 100) / numberExercise;
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        cout << "恭喜你做完了" << numberExercise << "道题目,做对了" << count << "道题目,正确率为 " << correctrate << "%" << "  一共耗时(s):" << duration << endl;
        break;
    case 3://*,/,2
        start = clock();
        srand((unsigned)time(NULL));
        for (int i = 0; i < numberExercise; i++) {
            a1 = rand() % N;
            a2 = rand() % N;
            mode = rand() % 4;
            switch (mode) //确定运算符
            {
            case 0:
                cout << a1 << "+" << a2 << "=" << endl;
                c = a1 + a2;
                break;
            case 1:
                c = a1 - a2;
                cout << a1 << "-" << a2 << "=" << endl;
                break;
            case 2:
                c = a1 * a2;
                cout << a1 << "*" << a2 << "=" << endl;
                break;
            case 3:
                c = a1 / a2;
                cout << a1 << "/" << a2 << "=" << endl;
                break;
            }
            cout << "请输入答案:";
            cin >> k;
            if (k == c) {
                cout << "恭喜你答对了,请再接再厉" << endl;
                count = count + 1;
            }
            else if (k != c) {
                cout << "虽然答错了,但不要灰心哦,正确答案是" << c << endl;
            }
        }
        correctrate = (count * 100) / numberExercise;
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        cout << "恭喜你做完了" << numberExercise << "道题目,做对了" << count << "道题目,正确率为 " << correctrate << "%" << "  一共耗时(s):" << duration << endl;
        break;
    case 4://+,-,*,/,3
        start = clock();
        srand((unsigned)time(NULL));
        for (int i = 0; i < numberExercise; i++) {
            a1 = rand() % N;
            a2 = rand() % N;
            a3 = rand() % (2 * N) - N;
            mode = rand() % 4;
            switch (mode) //确定运算符
            {
            case 0:
                cout << a1 << "+(" << a2 <<"*("<<a3<<"))=" << endl;
                c = a1 + a2*a3;
                break;
            case 1:
                c = a1 - a2/a3;
                cout << a1 << "-(" << a2 << "/(" << a3 << "))=" << endl;
                break;
            case 2:
                c = a1 * (a2-a3);
                cout << a1 << "*(" << a2 << "-(" << a3 << "))=" << endl;
                break;
            case 3:
                c = a1 / (a2+a3);
                cout << a1 << "/(" << a2 << "+(" << a3 << "))=" << endl;
                break;
            }
            cout << "请输入答案:";
            cin >> k;
            if (k == c) {
                cout << "恭喜你答对了,请再接再厉" << endl;
                count = count + 1;
            }
            else if (k != c) {
                cout << "虽然答错了,但不要灰心哦,正确答案是" << c << endl;
            }
        }
        correctrate = (count * 100) / numberExercise;
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        cout << "恭喜你做完了" << numberExercise << "道题目,做对了" << count << "道题目,正确率为 " << correctrate << "%" << "  一共耗时(s):" << duration << endl;
        break;
    case 5://小数运算
        start = clock();
        srand((unsigned)time(NULL));
        for (int i = 0; i < numberExercise; i++) {
            a1 = rand() % N+ rand() / double(RAND_MAX);//加上0-1的小数,即可。
            a2 = rand() % N+ rand() / double(RAND_MAX);
            a3 = rand() % (2 * N) - N+ rand() / double(RAND_MAX);
            mode = rand() % 4;
            switch (mode) //确定运算符
            {
            case 0:
                cout << a1 << "+(" << a2 << "*(" << a3 << "))=" << endl;
                c = a1 + a2 * a3;
                break;
            case 1:
                c = a1 - a2 / a3;
                cout << a1 << "-(" << a2 << "/(" << a3 << "))=" << endl;
                break;
            case 2:
                c = a1 * (a2 - a3);
                cout << a1 << "*(" << a2 << "-(" << a3 << "))=" << endl;
                break;
            case 3:
                c = a1 / (a2 + a3);
                cout << a1 << "/(" << a2 << "+(" << a3 << "))=" << endl;
                break;
            }
            cout << "请输入答案:";
            cin >> k;
            if (k == c) {
                cout << "恭喜你答对了,请再接再厉" << endl;
                count = count + 1;
            }
            else if (k != c) {
                cout << "虽然答错了,但不要灰心哦,正确答案是" << c << endl;
            }
        }
        correctrate = (count * 100) / numberExercise;
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        cout << "恭喜你做完了" << numberExercise << "道题目,做对了" << count << "道题目,正确率为 " << correctrate << "%" << "  一共耗时(s):" << duration << endl;
        break;
    default:
        cout << "请输入正确的年级。" << endl;
        break;
    }
}
int main()
{
    int T;
    do {
        int grade, numberExercise, difficulty, N = 0;
        cout << "请选择您的当前年级:1:一年级,2:二年级,3:三年级,4:四年级,5:五年级。" << endl;
        cin >> grade;
        cout << "请选择难度:1:简单,2:普通,3:困难。" << endl;
        cin >> difficulty;
        cout << "请输入你要做的题数:" << endl;
        cin >> numberExercise;
        N = Difficulty(difficulty);
        Grade(grade, numberExercise, N);
        cout << "如果您想继续做题,请输入1,退出系统请输入其他任意数" << endl;
        cin >> T;
    } while (T==1);
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/TG1999/p/12389501.html