• 第三次程序—四则运算(结对开发)


    这次老师又要对四则运算题目提出了新的要求,要求用户能够输入答案并判断对错,这已经是一个小型的答题系统了,而且是结对开发。

    一  功能要求:

          1、乘除可控

          2、随机添加括号

          3、输入结果判断正误

          4、统计正确数量

          5、正负,余数可控

          6、去除连除误区

    二  设计思路

         判断对错就是将用户输入的数和正确的值相比较,正确输出√,错误输出×;

         统计个数就是设置两个全局变量,让它去统计对错的个数。

         至于其他的要求同以前编写的四则运算相同方法。

    三  代码

    //石家庄铁道大学
    //2016.3.18
    #include "stdio.h"
    #include "stdlib.h"
    #include "time.h"
    int correct = 0;//声明全局变量correct
    int wrong = 0;//声明全局变量wrong
    int Add(int num1, int num2)
    {
        int uresult, cresult;
        scanf_s("%d", &uresult);
        cresult = num1 + num2;
        if (cresult == uresult)
        {
            printf("");
            correct++;
        }
        else
        {
            printf("	×");
            wrong++;
        }
        return 0;
    }
    int Sub(int num1, int num2)
    {
        int uresult, cresult;
        scanf_s("%d", &uresult);
        cresult = num1 - num2;
        if (cresult == uresult)
        {
            printf("");
            correct++;
        }
        else
        {
            printf("	×");
            wrong++;
        }
        return 0;
    }
    int Mult(int num1, int num2)
    {
        int uresult, cresult;
        scanf_s("%d", &uresult);
        cresult = num1*num2;
        if (cresult == uresult)
        {
            printf("");
            correct++;
        }
        else
        {
            printf("	×");
            wrong++;
        }
        return 0;
    }
    int Divi(int num1, int num2)
    {
        double uresult, cresult;
        scanf_s("%g", &uresult);
        cresult = num1 / num2;    //取整
        if (cresult == uresult)
        {
            printf("");
            correct++;
        }
        else
        {
            printf("	×");
            wrong++;
        }
        return 0;
    }
    int SetQuestion(int cheng, int number, int line, int plural, int scope, int konghang)
    {
        int num1, num2, oper, i;
        srand(time(NULL));                //i为循环次数
        printf("我们提供一下功能:                  
    ");
        printf("    1.题目的数值范围(暂不支持小数)
    ");
        printf("    2.题目的数量                    
    ");
        printf("    3.打印时每行题的数量            
    ");
        printf("    4.答案中会不会出现负数的结果    
    ");
        printf("    5.题目中是否会出现乘除运算      
    ");
        printf("    6.打印时每行的间隔              
    ");
        printf("请输入数值范围:");
        scanf_s("%d", &scope);
        printf("请选择出题数量:");
        scanf_s("%d", &number);                                   //oper为题目数量
        printf("请输入每行题的数量:");
        scanf_s("%d", &line);                                     //line为每行题的数量
        printf("答案是否有负数(1为有,0为没有):");
        scanf_s("%d", &plural);                                   //plural是否是负数
        while (plural != 0 && plural != 1)                          //判断用户是否按要求输入
        {
            printf("sorry!输入错误,请按要求输入:");
            scanf_s("%d", &plural);
        }
    
        printf("是否有乘除运算(1为有,0为没有):");
        scanf_s("%d", &cheng);
        while (cheng != 0 && cheng != 1)                          //判断用户是否按要求输入
        {
            printf("sorry!输入错误,请按要求输入:");
            scanf_s("%d", &cheng);
        }
        printf("中间有几个空行:");
        scanf_s("%d", &konghang);
        if (cheng == 1)
        {
            if (plural == 0)
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 4;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=	", num1, num2);
                        break;
                    case 1:
                        if (num1 >= num2)
                            printf("%d-%d=	", num1, num2);
                        else
                            printf("%d-%d=	", num2, num1);
                        break;
                    case 2:
                        printf("%d*%d=	", num1, num2);
                        break;
                    case 3:
                        if (num2 == 0)
                            printf("%d/%d=	", num2, num1);
                        else
                            printf("%d/%d=	", num1, num2);
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    if (i%line == 0)
                    {
                        for (int p = 1; p <= konghang; p++)
                        {
                            printf("
    ");
                        }
                    }
                }
    
            }
            else
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 4;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=	", num1, num2);
                        break;
                    case 1:
                        printf("%d-%d=	", num1, num2);
                        break;
                    case 2:
                        printf("%d*%d=	", num1, num2);
                        break;
                    case 3:
                        if (num2 == 0)
                            printf("%d/%d=	", num2, num1);
                        else
                            printf("%d/%d=	", num1, num2);
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    if (i%line == 0)
                    {
                        for (int p = 1; p <= konghang; p++)
                        {
                            printf("
    ");
                        }
                    }
                }
            }
    
        }
        else
        {
            if (plural == 0)
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 2;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=	", num1, num2);
                        break;
                    case 1:
                        if (num1 >= num2)
                            printf("%d-%d=	", num1, num2);
                        else
                            printf("%d-%d=	", num2, num1);
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    if (i%line == 0)
                    {
                        for (int p = 1; p <= konghang; p++)
                        {
                            printf("
    ");
                        }
                    }
                }
    
            }
            else
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 2;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=	", num1, num2);
                        break;
                    case 1:
                        printf("%d-%d=	", num1, num2);
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    if (i%line == 0)
                    {
                        for (int p = 1; p <= konghang; p++)
                        {
                            printf("
    ");
                        }
                    }
                }
            }
    
        }
        printf("
    ");
    
        return 0;
    }
    
    int AnswerQuestion(int cheng, int number, int line, int plural, int scope, int konghang) {
        int num1, num2, oper, i;
        srand(time(NULL));
        //a,b为运算数,c为选择哪个运算符,i为循环次数
        printf("我们提供一下功能:                  
    ");
        printf("    1.题目的数值范围(暂不支持小数)
    ");
        printf("    2.题目的数量                    
    ");
        printf("    3.答案中会不会出现负数的结果    
    ");
        printf("    4.题目中是否会出现乘除运算      
    ");
        printf("    5.打印时每行的间隔              
    ");
        printf("请输入数值范围:");
        scanf_s("%d", &scope);
        printf("请选择出题数量:");
        scanf_s("%d", &number);
        printf("答案是否有负数(1为有,0为没有):");
        scanf_s("%d", &plural);                                   //plural是否是负数
        while (plural != 0 && plural != 1)                          //判断用户是否按要求输入
        {
            printf("sorry!输入错误,请按要求输入:");
            scanf_s("%d", &plural);
        }
    
        printf("是否有乘除运算(1为有,0为没有):");
        scanf_s("%d", &cheng);
        while (cheng != 0 && cheng != 1)                          //判断用户是否按要求输入
        {
            printf("sorry!输入错误,请按要求输入:");
            scanf_s("%d", &cheng);
        }
        printf("中间有几个空行:");
        scanf_s("%d", &konghang);
        if (cheng == 1)
        {
            if (plural == 0)
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 4;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=", num1, num2);
                        Add(num1, num2);
                        break;
                    case 1:
                        if (num1 >= num2)
                        {
                            printf("%d-%d=", num1, num2);
                            Sub(num1, num2);
                        }
                        else
                        {
                            printf("%d-%d=", num2, num1);
                            Sub(num2, num1);
                        }
                        break;
                    case 2:
                        printf("%d*%d=", num1, num2);
                        Mult(num1, num2);
                        break;
                    case 3:
                        if (num2 == 0)
                        {
                            printf("%d/%d=", num2, num1);
                            Divi(num2, num1);
                        }
                        else
                        {
                            printf("%d/%d=", num1, num2);
                            Divi(num1, num2);
                        }
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    for (int p = 1; p <= konghang; p++)
                    {
                        printf("
    ");
                    }
                }
    
            }
            else
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 4;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=", num1, num2);
                        Add(num1, num2);
                        break;
                    case 1:
                        printf("%d-%d=", num1, num2);
                        Sub(num1, num2);
                        break;
                    case 2:
                        printf("%d*%d=", num1, num2);
                        Mult(num1, num2);
                        break;
                    case 3:
                        if (num2 == 0)
                        {
                            printf("%d/%d=", num2, num1);
                            Divi(num2, num1);
                        }
                        else
                        {
                            printf("%d/%d=", num1, num2);
                            Divi(num2, num1);
                        }
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
    
                    for (int p = 1; p <= konghang; p++)
                    {
                        printf("
    ");
                    }
                }
            }
    
        }
        else
        {
            if (plural == 0)
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 2;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=", num1, num2);
                        Add(num1, num2);
                        break;
                    case 1:
                        if (num1 >= num2)
                        {
                            printf("%d-%d=", num1, num2);
                            Sub(num1, num2);
                        }
                        else
                        {
                            printf("%d-%d=", num2, num1);
                            Sub(num2, num1);
                        }
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    for (int p = 1; p <= konghang; p++)
                    {
                        printf("
    ");
                    }
                }
    
            }
            else
            {
                for (i = 1; i <= number; i++)
                {
                    num1 = rand() % scope;
                    num2 = rand() % scope;
                    oper = rand() % 2;
                    printf("(%d)", i);
                    switch (oper)
                    {
                    case 0:
                        printf("%d+%d=", num1, num2);
                        Add(num1, num2);
                        break;
                    case 1:
                        printf("%d-%d=", num1, num2);
                        Sub(num1, num2);
                        break;
                    default:
                    {
                        printf("出错啦~~~");
                    }
                    }
                    for (int p = 1; p <= konghang; p++)
                    {
                        printf("
    ");
                    }
                }
            }
    
        }
        printf("
    ");
    
        return 0;
    }
    void menu()
    {
        printf("       欢迎使用四则运算出题系统     
    ");
        printf("          1.    开始出题            
    ");
        printf("          2.    开始答题            
    ");
        printf("          0.    退出系统            
    ");
    }
    int main()
    {
        int cheng = 0, number = 0, line = 0, plural = 0;
        int    scope = 0, konghang = 0, percent, a, num;
    l1:    menu();
        printf("请选择(0-2):");
        scanf_s("%d", &a);
        switch (a)
        {
        case 1:
            SetQuestion(cheng, number, line, plural, scope, konghang);
            printf("是否继续(1为继续,0为不继续):");
            scanf_s("%d", &num);
            if (num == 1)
                goto l1;
            else
                printf("欢迎下次使用!
    ");
            break;
        case 2:
            AnswerQuestion(cheng, number, line, plural, scope, konghang);
            printf("做对了%d道题
    ", correct);
            printf("做错了%d道题
    ", wrong);
            percent = correct / (correct + wrong);
            if (percent >= 6 / 10)
            {
                printf("你太棒了!!
    ");
            }
            else
            {
                printf("不及格,你要加油啦~~~
    ");
            }
            printf("是否继续(1为继续,0为不继续):");
            scanf_s("%d", &num);
            if (num == 1)
                goto l1;
            else
                printf("欢迎下次使用!
    ");
            break;
        case 0:
            printf("欢迎下次使用!
    ");
            break;
        }
    
        return 0;
    }

    四、运行结果

    五、合作伙伴

    张江鹏

    http://home.cnblogs.com/u/gaara-zhang/feed/blog/ 
    六 总结
    项目计划总结:
    日期任务 听课 编写程序 查阅资料 日总计
    星期一 2   1 3
    星期二   1 1 4
    星期三   3   3
    星期四 2 1   1
    星期五   2   2
    星期六        
    星期日        
    周总计 4 7 2 13
    时间记录日志:
    日期 开始时间  结束时间 中断时间 净时间(分钟) 活动 备注
    3月14日 14:00 15:50 10 100 听课  
      19:00 20:00   60 查阅资料 和搭档一起讨论,着手改变程序与计划
    3月15日 18:45 20:00   95 编写程序  
      20:00 21:00 15 45 讨论和查阅资料  
    3月16日 13:00 16:00   180 编写代码  
    3月17日 14:00 15:50 10 100 听课  
      19:00 20:00   60 编写程序  
    3月18日 19:00 21:15 10 125 编写代码与测试  
    缺陷记录日志:
    日期 编号 引入阶段 排除阶段 修复时间&问题描述
    3月16日 3 编码 编译

    1h,逻辑错误,数组的题不能出现正确答案,循环搞错了

    3月17日 4 编码 编译

    30min:全局变量的定义放在了主函数中,导致系统不能识别;

    30min:转换成vs2015中的scan语句不识别等语句错误

    3月18日 5 编码 执行 调试 2h:个别特殊的临界情况未予顾及到,完善程序。
    结语:
         程序大体上的功能还可以,但改进的空间还很大。
  • 相关阅读:
    final、static关键字
    this关键字与super关键字区别
    JAVA常见报错
    Java抽象类和多态
    Java 类和接口的继承
    JAVA封装
    库存管理案例
    Map的遍历
    LinkedList vector集合,Set接口
    Collection,迭代器iterator,list接口
  • 原文地址:https://www.cnblogs.com/wanzitou/p/5296531.html
Copyright © 2020-2023  润新知