zoukankan      html  css  js  c++  java
  • 随机生成四则运算式2

    1. 题目避免重复
    2. 可定制(数量/打印方式)
    3. 可以控制下列参数
      1. 是否有乘除法
      2. 是否有括号(最多可以支持十个数参与运算)
      3. 数值范围
      4. 加减有无负数
      5. 除法有无余数
    4. 设计思路:这次我用了很多子函数,比如操作数和算符以及结果的输出,这样来说方便了许多。

      #include<iostream>
      using namespace std;
      #include<stdio.h>
      #include<stdlib.h>
      #include<time.h>
      void main()
      {
      srand((int)time(NULL));
      void peizhi(bool&p1, bool&p2, bool&p3, bool&p4);

      int sfys1();//生成算符余数函数(有乘除)
      int sfys2();//生成算符余数函数(无乘除)
      int czs();//生成操作数
      char suanfu1(int sfys1);//根据算符余数,给出算符的函数(有乘除)
      char suanfu2(int sfys2);//根据算符余数,给出算符的函数(无乘除)
      void kuohao1();//无乘除的括号
      void kuohao2();//有乘除的括号
      void sc1();//输出类型1,无乘除法
      void sc2();//输出类型2,有乘除法
      void sc3();//输出类型3,加减无负数
      void sc4();//输出类型4,除法无余数

      bool pz1, pz2, pz3, pz4;

      peizhi(pz1, pz2, pz3, pz4);

      //无乘除法无括号加减有负数的表达式
      if (pz1==0&&pz2==0&&pz3==1)
      {

      for (int i = 0; i < 30; i++)
      {

      sc1();
      }

      }

      //无乘除法无括号加减无负数的表达式
      else if (pz1==0&&pz2==0&&pz3==0)
      {
      for (int i = 0; i < 30; i++)
      {

      sc3();
      }
      }

      //无乘除法有括号加减有负数的表达式
      else if (pz1 == 0 && pz2 == 1&&pz3==1)
      {
      int bianhuan1;
      bianhuan1= (int)(rand() * 2) / RAND_MAX;
      for (int i = 0; i < 30; i++)
      {
      bianhuan1 = (int)(rand() * 2) / RAND_MAX;
      if (bianhuan1 == 0)
      {
      sc1();
      }
      else
      {
      kuohao1();
      }
      }
      }

      //无乘除法有括号加减无负数的表达式
      else if (pz1 == 0&& pz2 == 1&&pz3==0)
      {
      int bianhuan1;
      bianhuan1 = (int)(rand() * 2) / RAND_MAX;
      for (int i = 0; i < 30; i++)
      {
      bianhuan1 = (int)(rand() * 2) / RAND_MAX;
      if (bianhuan1 == 0)
      {
      sc3();
      }
      else
      {
      kuohao1();
      }
      }
      }

      //有乘除法无括号有负数有余数
      else if (pz1 == 1 && pz2 == 0 && pz3 == 1 && pz4 == 1)
      {
      for (int i = 0; i < 30; i++)
      {

      sc2();
      }
      }

      //有乘除法无括号无负数有余数
      else if (pz1 == 1 && pz2 == 0 && pz3 == 0 && pz4 == 1)
      {
      for (int i = 0; i < 30; i++)
      {

      sc3();
      }
      }

      //有乘除法无括号无负数无余数
      else if (pz1 == 1&& pz2 == 0 && pz3 == 0 && pz4 == 0)
      {
      for (int i = 0; i < 30; i++)
      {

      sc4();
      }
      }
      //有乘除法有括号无负数无余数
      else if (pz1 == 1&& pz2 == 1 && pz3 == 0 && pz4 == 0)
      {
      int bianhuan1;
      bianhuan1 = (int)(rand() * 2) / RAND_MAX;
      for (int i = 0; i < 30; i++)
      {
      bianhuan1 = (int)(rand() * 2) / RAND_MAX;
      if (bianhuan1 == 0)
      {
      sc4();
      }
      else
      {
      kuohao2();
      }
      }
      }
      }
      void peizhi(bool&p1, bool&p2, bool&p3, bool&p4)
      {
      cout << "请选择设置:0/1"<<endl;
      cout << "是否有乘除法?" << endl;
      cin >> p1;
      cout << endl;
      cout << "是否有括号(最多可以支持十个数参与运算)" << endl;
      cin >> p2;
      cout << endl;
      cout << "加减有无负数" << endl;
      cin >> p3;
      cout << endl;
      cout << "除法有无负数" << endl;
      cin >> p4;
      cout << endl;

      }

      //根据算符余数,给出算符的函数(有乘除)
      char suanfu1(int sfys1)
      {

      switch (sfys1)
      {
      default:
      break;
      case 0:
      return '+'; break;
      case 1:
      return '-'; break;
      case 2:
      return'*'; break;
      case 3:
      return'/'; break;


      }
      }

      //生成算符余数函数(有乘除)
      int sfys1()
      {
      int suanfuNum;
      suanfuNum = (rand() * 100) / RAND_MAX;
      int suanfu = suanfuNum % 4;
      return suanfu;
      }

      //根据算符余数,给出算符的函数(无乘除)
      char suanfu2(int sfys2)
      {

      switch (sfys2)
      {
      default:
      break;
      case 0:
      return '+'; break;
      case 1:
      return '-'; break;


      }
      }

      //生成算符余数函数(无乘除)
      int sfys2()
      {
      int suanfuNum;
      suanfuNum = (rand() * 100) / RAND_MAX;
      int suanfu = suanfuNum % 2;
      return suanfu;
      }

      //生成操作数
      int czs()
      {
      int czsNum;
      czsNum = (rand() * 100) / RAND_MAX;
      return czsNum;
      }

      //生成括号运算式(无乘除)
      void kuohao1()
      {

      cout << '(' << czs() << suanfu2(sfys2()) << czs() << ')' << suanfu2(sfys2()) << czs()<<"="<<endl;
      }

      //生成括号运算式(有乘除)
      void kuohao2()
      {

      cout << '(' << czs() << suanfu1(sfys1()) << czs() << ')' << suanfu1(sfys1()) << czs()<<"=" << endl;
      }

      //输出类型1
      void sc1()
      {
      cout << czs() << suanfu2(sfys2()) << czs() << "="<<endl;
      }

      //输出类型2
      void sc2()
      {
      int opNum1 = czs(), opNum2 = czs();
      char op = suanfu1(sfys1());
      if (op == '/')
      {
      while (opNum2== 0)
      {
      opNum1 = czs();
      opNum2 = czs();
      }
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      else
      {
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      }

      //输出类型3,加减无负数
      void sc3()
      {
      int opNum1 = czs(), opNum2 = czs();
      char op = suanfu2(sfys2());
      if (op == '-')
      {
      while (opNum1 - opNum2 < 0)
      {
      opNum1 = czs();
      opNum2 = czs();
      }
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      else
      {
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      }

      //输出类型4,除法无余数
      void sc4()
      {
      int opNum1 = czs(), opNum2 = czs();
      char op = suanfu1(sfys1());
      if (op == '-')
      {
      while (opNum1 - opNum2 < 0)
      {
      opNum1 = czs();
      opNum2 = czs();
      }
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      else if (op == '/')
      {
      while (opNum1%opNum2 != 0||opNum2==0)
      {
      opNum1 = czs();
      opNum2 = czs();
      }
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      else
      {
      cout << opNum1 << op << opNum2 << "=" << endl;
      }
      }

    5. 总结:这次的实验对于我来说真的是很有难度,自己也花了很长时间,但还是对自己不满意,对于编程中的一些东西我还是要认真再学习。

      项目计划总结:

      日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料   日总计
      周一 2 1 2 2 5
      周二   3    1 4
      周三          
      周四 2 2      
      周五   5  1 1  
      周六     2   2
      周日     2    
      周总计 4 14 7 4 6

      时间记录日志:

      日期 开始时间 结束时间 中断时间 净时间 活动 备注
      3/7 14:00 15:50 10 100 听课 软件工程上课
        16:00 18:20   140 编写程序 编写老师布置的作业
        19:00 21:00  10 110 阅读书籍 《构建之法》
        21:00 24:00 20 160 网上查找资料,编程 作业2,讨论问题
      3/8 16:00 18:00  10 110 查资料,编写程序 作业2
        21:00 21:50   50 阅读书籍 《构建之法》
      3/9            
      3/10 14:00 15:50  10 100 听课 软件工程上课
        19:00 21:20  20 100 查资料,编写程序 休息,聊天,作业2
      3/11 8:00 10:05  5 120 写博客 发表本周博客
        16:10 18:30  10 140 修改程序,写博客  测试程序,发表博客
        19:00 19:40   40 阅读书籍 《构建之法》
        19:45 21:45 10 110 写博客,修改程序 休息,聊天,发表博客
      3/12 9:00 9:30   30 阅读书籍 计划阅读《构建之法》
      3/13 19:00 19:30   30 阅读书籍  

      缺陷记录日志:

      还有一些功能没有实现,还是自己水平不够。

  • 相关阅读:
    memset使用技巧
    04.碰撞反应
    03.键盘状态跟踪与精灵删除
    02.基本动作
    01.基本图形
    00.入门
    03.交互--鼠标,键盘
    02.action--新增精灵知识点
    01.helloworld--标签
    05.声音
  • 原文地址:https://www.cnblogs.com/wanzitou/p/5269519.html
Copyright © 2011-2022 走看看