第二次结对编程—四则运算自动生成程序

一、题目要求

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:

  • 能够自动生成四则运算练习题
  • 可以定制题目数量
  • 用户可以选择运算符
  • 用户设置最大数(如十以内、百以内等)
  • 用户选择是否有括号、是否有小数
  • 用户选择输出方式(如输出到文件、打印机等)
  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、任务分配

驾驶员:王旭
领航员:张昊辰
驾驶员负责写代码,浏览文件,还有基础实现方法。
领航员则着眼更长远的考虑并且检查错误。进行代码测试和检查错误。

三、代码分析

代码一共分为三个主要模块:
Subject_Manu主要实现程序主菜单操作的实现;
Subject_Output_Screen主要实现四则运算式的生成;
Evaluate主要用于实现四则运算式的计算功能。
代码地址:点我
主菜单的实现

void Subject_Manu()
{
    printf("本程序中输入“1”为是,“0”为否\n\n");
    printf("请输入所生成题的数目:\n");
    scanf("%d",&problem_num);
    printf("请输入运算符号:(“0”为加减运算,“1”为乘除运算,“2”为混合运算)\n");
    scanf("%d",&problem_operate);
    printf("请输入所生成数的范围:\n");
    printf("下界:");
    scanf("%d",&number_min);
    printf("上界:");
    scanf("%d",&number_max);
    printf("请输入是否包含小数:(“1”or“0”)\n");
    scanf("%d",&if_decimal);
    printf("请输入是否包含小括号:(“1”or“0”)\n");
    scanf("%d",&if_bracket);
    printf("请输入是否输入到文件:(“1”or“0”)\n");
    scanf("%d",&if_file);
    Subject_Control();
}

四则运式的生成

void Subject_Output_Screen()
{
    printf("题目列表:\n");
    for (int i = 0; i < problem_num; ++i) {
        int id = 0;
        int num;
        int num_opera;
        int N = rand() % 4 + 2;
        bool f = true, flag = true;
        double number;
        printf("(%d)", i + 1);
        if (if_file) {
            fprintf(file, "(%d)  ", i + 1);
        }
        for (int j = 0; j < N; ++j) {
            if (rand() % 2 && N > 2 && flag && if_bracket) {
                printf("(");
                if (if_file) fprintf(file, "(");
                flag = false;
                id = j;
                //str += "(";
            }
            num = (rand() % abs(number_max - number_min)) + number_min;
            number = num + (double)(rand() % 100) / 100;
            num_opera = rand() % problem_operate;
            if (back_operate == 2) {
                num_opera += 2;
            }
            //不是小数
            if (!if_decimal) {
                //str += to_string(num);
                printf("%d", num);
            }
            //是小数
            else {
                //str += to_string(number);
                printf("%.2f", number);
            }
            //输出文件
            if (if_file) {
                if (!if_decimal) {
                    fprintf(file, "%d", num);
                }
                else {
                    fprintf(file, "%.2f", number);
                }
            }
            if (id != j && rand() % 2 && !flag && f) {
                printf(")");
                if (if_file) fprintf(file, ")");
                f = false;
                //str += ")";
            }
            //str += subject_operator[num_opera];
            printf("%s", subject_operator[num_opera]);
            if (if_file) {
                fprintf(file, "%s", subject_operator[num_opera]);
            }
        }

        num = (rand() % (number_max - number_min)) + number_min;
        number = num + (double)(rand() % 100) / 100;

        if (!if_decimal) {
            //str += to_string(num);
            printf("%d", num);
            if (if_file) {
                fprintf(file, "%d", num);
            }
        }
        else {
            //str += to_string(number);
            printf("%.2f", number);
            if (if_file) {
                fprintf(file, "%.2f", number);
            }
        }
        if (f && !flag) {
            printf(")");
            if (if_file)fprintf(file, ")");
            //str += ")";
        }
        printf("=\n");
        if (if_file) {
            fprintf(file, "=\n");
        }
    }
    if (if_file) {
        printf("\nquestion.txt文件生成成功啦!\n\n");
    }
    fclose(file);
}

四、运行结果

选择的条件是带括号和小数的四则混合运算,并生成文件,下面是代码运行结果图:

1645276-20190506224818379-156663441.png

图形界面运行结果图:

1645276-20190504110055949-1162229853.png

所生成文件的结果图:

1645276-20190504110110979-1898436167.png

从结果中可以看到代码中还是有着不完美的地方,有着一些BUG,比如生成的计算式不是特别合理,小括号的位置过于随机,这些都是不完善的地方。

五、总结

对队友评价

  这次我们这个项目的的领航员是张昊辰同学。在选择完作业的题目时,我们对这次作业进行了任务和角色的分配,我是驾驶员,他是领航员。之后我们一起设计了程序的思路,部分功能的实现。他在这些设计工作中起到了重要的作用,拓宽了我的编程思路,使得代码更加完善。在我编程中,张昊辰同学能够对我进行很好的监督并给予帮助,遇到问题时,能够和我讨论出现的问题,使得我们工作效率有了提高。在我完成编程工作后,他也进行结果的检查,认真的进行了单元测试。

对自己总结

  总体上,这次结对编程把作业要求的基本功能都实现了,并用MFC实现了简单的图形化界面,但是由于自己和队友之前没有接触过GUI,由于时间分配等问题导致没能把图形界面实现的更加完美。在这次结对编程中我主要负责代码功能及图形界面的实现,这也促进了自己编程能力的进步。领航员张昊辰也起到了至关重要的作用。从最开始的设计,之后的编程工作,以及最后的测试,如果没有他的帮助,我自己一个人是不容易很好的完成这些工作的。

附上一张和队友的工作照

1645276-20190506135723530-261364477.png

转载于:https://www.cnblogs.com/CodeAky/p/10807191.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ChatGPT结对编程是一种将两个程序员合作编写代码的技术。这种技术可以提高编写代码的效率和质量,同时也可以提高两位程序员的技能水平。以下是ChatGPT结对编程的步骤: 1. 首先,找到一个合适的编程伙伴。最好是一个有一定编程经验的人,但如果你是新手,也可以与另一个新手合作。 2. 确定你们编写的代码项目。你们可以选择一个共同感兴趣的项目或者一个有挑战性的项目。确保你们都对项目有一定的理解。 3. 确定你们的角色。一个人可以担任主要代码编写者,另一个人可以担任代码审核者。这样可以确保代码的质量。 4. 确定编程环境。你们可以使用一个共同的编程环境,如Visual Studio Code或者Atom。也可以使用在线编程环境,如CodePen或JSFiddle。 5. 开始编写代码。一个人负责编写代码,另一个人负责审核代码。在编写代码的过程中,你们可以随时通过聊天工具进行交流和讨论。 6. 定期进行代码审核。定期进行代码审核可以确保代码的质量。你们可以定期的分享代码,并相互审核对方的代码。 7. 完成项目并进行总结。完成项目后,你们可以总结你们的经验和教训,并提出改进建议。这将有助于你们以后更好的编写代码。 总之,ChatGPT结对编程是一种非常有用的技术,可以提高编写代码的效率和质量。通过合作编写代码,你们可以相互学习,相互支持,以及增强你们的编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值