四则运算结对编程——四则运算(c语言版)

前言
按照结对编程的原则,我(2252616)和我的合作伙伴(2252627)两人进行了结对编程,我们共同完成的项目的是小学的四则运算,通过随机生成四则运算题目,供学生答题,并在学生提交答案后进行自动评定,返回正误。经过讨论,我们采用了C语言这门古老而又长青的语言作为我们的开发语言,并选取Visual Studio 2022作为开发环境。

功能要求
小学老师要每周给同学出300道四则运算练习题。
–两个运算符,100 以内的数字,不需要写答案(实现)
–需要检查答案是否正确,并且保证答案在 0..100 之间(实现)
创新性:
在算式中出现除法运算时,除法运算允许不被整除;
在答案超纲时,会在提交答案时告知答案超纲,并不予评判,但本身也允许学有余力的同学自己答题;

代码实现
首先由我负责编程,2252627在一旁审核我的代码。在具体编程之前,2252627同学建设性的提出了具体的实现框架,决定了要实现的功能以及如何实现。随后,我们正式开始了编程,我们在编程过程中始终保持无障碍沟通,所幸有惊无险,最终实现了四则运算的题目。
我们的具体代码如下:

点击查看代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
int generateQuestion(int* num1, int* num2, char* operator);
int calculateAnswer(int num1, int num2, char operator);
int isAnswerValid(int answer);
int main(void) {
    srand(time(NULL)); // 初始化随机数生成器  
    int num1, num2;
    char operator;
    int answer;
    int correctCount = 0;

    printf("小学四则运算练习题生成器\n");
    for (int i = 0; i < 300; i++) {
        if (generateQuestion(&num1, &num2, &operator)) {
            printf("%d %c %d = ?\n", num1, operator, num2);

            // 用户输入答案  
            scanf("%d", &answer);

            // 计算正确答案  
            int correctAnswer = calculateAnswer(num1, num2, operator);

            // 检查答案是否有效  
            if (isAnswerValid(correctAnswer)) {
                // 检查用户答案是否正确  
                if (answer == correctAnswer) {
                    printf("回答正确!\n");
                    correctCount++;
                }
                else {
                    printf("回答错误!正确答案是 %d\n", correctAnswer);
                }
            }
            else {
                printf("生成的题目答案不在0到100之间,已跳过。\n");
            }
        }
        else {
            printf("无法生成题目,已跳过。\n");
        }
    }

    printf("练习结束,你答对了 %d 道题。\n", correctCount);

    return 0;
}

int generateQuestion(int* num1, int* num2, char* operator) {
    do {
        *num1 = rand() % 100; // 生成0到99的随机数  
        *num2 = rand() % 100;
        *operator = rand() % 4; // 生成0到3的随机数,对应四种运算符  
        if (*operator == 2) { // 如果是乘法,需要调整乘数以避免答案过大  
            if (*num2 > 1) {
                *num2 = rand() % (*num2); // 确保第二个乘数小于第一个乘数  
            }
            else {
                *num1 = rand() % 100; // 重新生成第一个乘数  
                *num2 = rand() % (*num1);
            }
        }
    } while ((*operator == 3 && *num2 == 0) || // 避免除数为0的情况  
        (*operator == 2 && *num1 * *num2 > 100)); // 避免乘法结果超过100  

    if (*operator == 0) *operator = '+';
    else if (*operator == 1) *operator = '-';
    else if (*operator == 2) *operator = '*';
    else *operator = '/';

    return 1;  
}

// 计算题目的答案  
int calculateAnswer(int num1, int num2, char operator) {
    switch (operator) {
    case '+': return num1 + num2;
    case '-': return num1 - num2;
    case '*': return num1 * num2;
    case '/': return num1 / num2;  
    default: return 0;  }
}

// 检查答案是否在0到100之间
int isAnswerValid(int answer) {
    return answer >= 0 && answer <= 100;
}

感悟
结对编程让我们明白了合作的重要性。在编程过程中,我们经常会遇到各种各样的问题,有时候一个人可能很难快速找到解决方案。但是,当两个人一起思考时,我们可以互相启发,共同找到问题的症结所在,从而更快地解决问题。这种合作不仅提高了我们的工作效率,还让我们在解决问题的过程中更加深入地理解了编程知识。
在本次结对编程过程中,也出现了一些问题。例如,有时候两个人的想法可能不一致,导致在解决问题上产生分歧。但是,我认为这正是结对编程的意义和价值所在。通过沟通和讨论,我们可以学会尊重对方的意见,学会在团队中寻求共识,这对于我们未来的职业发展是非常有益的。
在我们看了,这种相互交流,共勉共进的方式可以促进双方的的共同进步,不仅仅提高了我们的编程效率和技能,还促进我们之间的沟通和合作。

posted @   Spaddington  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示