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

结对编程 四则运算

时间:2024-04-21 13:11:48浏览次数:28  
标签:结对 编程 int 四则运算 练习 choice printf

题目:
小学老师要每周给同学出300道四则运算练习题。
这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
两个运算符,100 以内的数字,不需要写答案。
需要检查答案是否正确,并且保证答案在 0——1000 之间
我们采用的是c++来实现的
伙伴:2252310
分工:我负责前面加减乘除的不混合运算,伙伴负责加减乘除的混合运算
代码:

#include <stdlib.h>
#include <time.h>
int getChoice();
void Menu();
void doExercise(int);
int test(int);

int exnum=0;                    //题目数量
int main(void)
{
    int choice=0;
    do
    {
        Menu();                    //显示菜单
        
        while(1)
        {
            choice=getChoice();
            if(choice<0 || choice>5)
                printf("请重新输入");
            else
                break;
        }
        
        if(choice==0)
        {
            break; //用户选择0,退出循环(退出系统)
        }
        
        doExercise(choice); //测试系统
    }while(choice!=0);
    
    printf("练习结束,玩去吧!\n");
    return 0;
}

int getChoice()
{
    printf("请输入你的选择(0--5):");
    int choice;
    scanf("%d",&choice);
    return choice;
}
void Menu()
{
    
    printf("--------------------------------------------\n");
    printf("|             四则运算练习                 |\n");
    printf("|               1.加法练习                 |\n");
    printf("|               2.减法练习                 |\n");
    printf("|               3.乘法练习                 |\n");
    printf("|               4.除法练习                 |\n");
    printf("|               5.混合练习                 |\n");
    printf("|                0.退出                    |\n");
    printf("--------------------------------------------\n");
    
}
void doExercise(int n)
{
    int score=0; //练习得分,初始化为0
    int i=0; //练习题数的计数器
    printf("你想做多少道题?");
    
    scanf("%d",&exnum);
    for(i=0;i<exnum;i++)
    {
        score=score+test(n); //间接递归调用test(n)
    }
    printf("\n正确率:%d/%d\n\n\n",score,exnum);
}

int test(int n)
{
    int rightanswer=0,rightanswer1=0; //正确答案
    int useranswer=0; //用户输入的答案
    int t=0; //临时变量
    char operation,operation1,operation2; //运算类别
    int num1=0; //操作数1
    int num2=0; //操作数2
    int num3=0,num4=0,num5=0; 
    do{
    srand(time(NULL)); //使用当前时间进行随机数发生器的初始化。 
    num1=rand()%10; //取0—10之间的随机数
    num2=rand()%10;
    num3=rand()%10;
    num4=rand()%4;
    num5=rand()%4;
    
    
    
    
    
    switch(n)
{
    case 1:
    operation1='+';
    operation2='+';
    break;
    
    case 2:
    operation1='-';
    operation2='-';
    break;
    
    case 3:
    operation1='*';
    operation2='*';
    break;
    case 4:
    operation1='/';
    operation2='/';
    break;
    case 5:
    if(num4==0)
        operation1='+';
    else if (num4==1)
        operation1='-'; 
    else if (num4==2)
        operation1='*';
    else if (num4==3)
        operation1='/' ;
    
    if(num5==0)
        operation2='+';
    else if (num5==1)
        operation2='-' ;
    else if (num5==2)
        operation2='*' ;
    else if (num5==3)
        operation2='/';
    break;
    
    }
    
    
    
    if((operation=='-') )
    {   
        t=num1;
        num1=num2;
        num2=t;
    }
    
    if(operation2=='+'||operation2=='-'){
        
    switch(operation1)
    {
    case '+':
        rightanswer1=num1+num2;
        break;
        
    case '-':
    
        rightanswer1=num1-num2;
        break;
        
    case '*':
        rightanswer1=num1*num2;
        break;
    case '/':
        rightanswer1=num1/num2;
        break;
        
    }
    switch(operation2)
    {
    case '+':
        rightanswer=rightanswer1+num3;
        break;
        
    case '-':
        rightanswer=rightanswer1-num3;
        break;
        
    case '*':
        rightanswer=rightanswer1*num3;
        break;
    case '/':
        rightanswer=rightanswer1/num3;
        break;
        
    }
    }
    else if(operation2=='*'||(operation2=='/'&&(operation1=='+'||operation1=='-'))){
        switch(operation2)
        {
            
        case '*':
            rightanswer1=num2*num3;
            break;
        case '/':
            rightanswer1=num2/num3;
            break;
            
        }
        switch(operation1)
        {
        case '+':
            rightanswer=num1+rightanswer1;
            break;
            
        case '-':
            rightanswer=num1-rightanswer1;
            break;
            
        case '*':
            rightanswer=num1*rightanswer1;
            break;
        case '/':
            rightanswer=num1/rightanswer1;
            break;
            
        }
        
    }
    else if(operation2=='/'&&(operation1=='*'||operation1=='/'))
    {
        switch(operation1)
        {
            
            
        case '*':
            rightanswer1=num1*num2;
            break;
        case '/':
            rightanswer1=num1/num2;
            break;
            
        }
        switch(operation2)
        {
        case '/':
            rightanswer=rightanswer1/num3;
            break;
            
        }
    }
    }while(rightanswer<0);
//判断正误
    int errornum=0;
    printf("%d%c%d%c%d= ",num1,operation1,num2,operation2,num3);
    while(1){
        scanf("%d",&useranswer);
        
        if(useranswer==rightanswer)
        {
            if(errornum>0){
                printf("做对了!\n\n");
                return 0;
            }
            else{
                printf("做对了!\n\n");
                return 1;
            }
        }
        else 
        {
            errornum++;
            if(errornum==3){
                printf("错误3次,正确答案为:%d\n\n",rightanswer);return 0;
            }
            else{
                printf("做错了!请重新输入答案:");
            }
        }
    }
}`

运行:

体会:
结对编程是一种非常有效的合作方式,通过结对编程可以让团队成员之间更好地沟通和协作,共同解决问题。在结对编程过程中,两个程序员共同工作在同一个工作站上,一人编写代码,一人审查代码,相互交流讨论,共同思考解决方案。

通过结对编程,我们可以相互学习对方的编程技能和思维方式,共同提高编程能力。同时,结对编程也可以减少错误和bug的产生,因为两个人共同审查代码,可以及时发现问题并进行修复。

在结对编程过程中,需要相互尊重和信任对方,共同努力达成共同的目标。这种合作方式可以增强团队的凝聚力和合作精神,提高工作效率和质量。

总的来说,结对编程是一种非常有益的合作方式,可以带来更好的工作体验和更好的成果。希望我们可以继续保持这种合作方式,共同进步,共同成长。

标签:结对,编程,int,四则运算,练习,choice,printf
From: https://www.cnblogs.com/luoqingyun/p/18148813

相关文章

  • C# 异步编程Task(三) async、await
    一、async和await两个修饰符C#5.0的时候引入了async和await两个修饰符,成为异步编程的核心关键字。async是修饰符,表明方法含有异步操作,但并不是说整个方法是异步的。async修饰的方法会先同步执行到第一处await的地方而后开始异步。await可以理解为一异步特有的“return”。即返回......
  • AutoCAD C# 在编程中使用字段表达式
    CAD中有些文字需要随着图纸的当前条件的变化自动变化,例如保存日期、打印日期、打印比例等等。CAD早期版本只是在扩展工具中提供了动态反应文字(rtext)功能,动态反应文字可以用CAD的Diesel表达式来定义动态文字,也可以动态链接文本文档,文本文档被编辑后,图纸中的文字会自动更新。由于......
  • 【转载】Java函数式编程——为什么new Thread()中要用函数式编程
    面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,......
  • 软件开发与创新第二次实验——结对编程:计算题出题系统
    一.结对情况本人:2252209结对搭档:2211323二.程序设想思路根据题目我和搭档总结出如下几个关键点:1.四则运算随机出题2.两个运算符,三个数字3.提供算式答案并对用户输入答案进行检查我们在基础要求上新增点如下:1.为提高用户使用观感,开头结尾增加一些文字说明2.在用户输入完......
  • 讲解GPU和CUDA编程的经典入门书籍
    作者:羊羊得亿-AIGC链接:来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。讲解GPU和CUDA编程的经典入门书籍|背景分析:GPU(图形处理单元)和CUDA(ComputeUnifiedDeviceArchitecture,统一计算架构)编程已经成为高性能计算和深度学习领域的重要工具。合......
  • Windows编程系列:进程间通信(基于Mailslot)
    最近在做一个资源管理器背景工具,将模块注入后,需要跟模块进行通信,意向传递一些信息。一开始想到的是使用共享内存,但是无法进行实时通知。匿名管道的话需要传入句柄字符串,也不太适用这里的场景。使用Mailslots可以间隔的去取消息,刚好可以实现这个需求。不同于消息队列的时,没取到......
  • 软件创新与开发——结对编程
    程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间。本次作业由2252312和2252413共同完成由2252312发布博客园运行环境:Windows10教育版开发环境:devc++语言:C++处理器:11thGenIntel(R)Core(TM)[email protected]以下是源......
  • 精通-Python-网络编程第二版(五)
    精通Python网络编程第二版(五)原文:zh.annas-archive.org/md5/dda7e4d1dd78bc5577547014ce9b53d1译者:飞龙协议:CCBY-NC-SA4.0第十二章:使用Jenkins进行持续集成网络触及技术堆栈的每个部分;在我工作过的所有环境中,它总是一个零级服务。它是其他服务依赖的基础服务。在其他......
  • 精通-Python-系统管理脚本编程(一)
    精通Python系统管理脚本编程(一)原文:zh.annas-archive.org/md5/c33d6613eafa4d86b92059a00f7aa16f译者:飞龙协议:CCBY-NC-SA4.0前言Python已经发展并扩展了其功能,涵盖了几乎所有可能的IT操作。本书将帮助你利用Python的最新功能,编写有效的脚本,并创建用于管理环境的命......
  • 精通-Python-系统管理脚本编程(四)
    精通Python系统管理脚本编程(四)原文:zh.annas-archive.org/md5/c33d6613eafa4d86b92059a00f7aa16f译者:飞龙协议:CCBY-NC-SA4.0第十六章:网络爬虫-从网站提取有用的数据在本章中,您将学习有关网络爬虫的知识。您还将学习Python中的beautifulsoup库,该库用于从网站提取信息。......