四则运算2

一、实验要求:

  在四则运算1的基础上,又添加了如下要求:

  1、题目避免重复
  2、可定制(数量打印方式)
  3、控制参数:

    是否有乘除法
    是否有括号(最多可以支持十个数参与计算)
    取值范围
    加减有无负数
    除法有无余数!

二、设计思路:

  题目避免重复:引用了srand((int)time(0))(设置时间种子 ,使得程序每次运行的结果都不同),但是无法从根本上解决题目重复的问题。

  可定制:通过for循环结构控制题目的数量,可控制打印中每行的间隔和题目数量。

  控制参数:可以支持乘除法运算,可以设定取值范围,对于是否有括号的问题(最多可以支持十个数参与运算)还没有解决,对括号的运用不能熟练地掌握。

  总结:由于自己编程功底薄弱、编程能力相对较弱,对此次实验要求理解不够深刻,有一些内容要求也没有完成,自己也感到有一定的压力。不管怎么样吧,努力地去做

    就好了。希望通过本门课程增强自己的编程能力和对数据结构和算法的理解,课余时间也会做一定的习题练习,希望尽快的提升自己的编程力能和自己的专业技能,以前

    没有认真地学习编程,希望以后可以用心地去学,抓紧一切时间来练习,提升自己的编程能力。

三、源程序代码:

  

  1 //四则运算2
  2 //胡浩特 2016/3/12
  3 
  4 #include<iostream>
  5 using namespace std;
  6 
  7 #include<stdio.h>
  8 #include<stdlib.h>
  9 #include<time.h>
 10 #include<math.h>
 11 void main()
 12 {
 13     srand((int)time(0));         //设置时间种子 ,使得程序每次运行的结果都不同
 14     int num0, num1, num2, c;
 15     int limit[8];
 16     double num3, num4;
 17     
 18     cout << "输入题目的数量:";
 19     cin >> num0;
 20     cout << endl;
 21     cout << "输入打印中每行的间隔:";
 22     cin >> limit[0];
 23     cout << endl;
 24     cout << "输入打印中每行的题目数:";
 25     cin >> limit[1];                                //每次都输入太麻烦了,这个设置一般是一样的,可否改为设置一次即可
 26     cout << endl;
 27     cout << "输入操作数的数值范围的最小值和最大值:";
 28     cin >> limit[2] >> limit[3];
 29     cout << endl;
 30     cout << "是否有乘除法,有输入1,没有输入0:";
 31     cin >> limit[4];
 32     cout << endl;
 33     cout << "加减有无负数,有输入1,没有输入0:";
 34     cin >> limit[5];
 35     cout << endl;
 36     if (limit[4] == 1)
 37     {
 38         cout << "除法有无余数,有输入1,没有输入0:";
 39         cin >> limit[6];
 40         cout << endl;
 41     }
 42     if (limit[4] == 0)
 43     {
 44         cout << "是否支持小数,有输入1,没有输入0:";
 45         cin >> limit[7];
 46         cout << endl;
 47         if (limit[7] == 1)
 48         {
 49             cout << "若支持小数,精确到多少位:";
 50             cin >> limit[8];
 51             cout << endl;
 52         }
 53     }
 54     for (int i = 0; i<num0; i++)              //输出题目的循环
 55     {
 56         num1 = limit[2] + (int)(limit[3] * rand() / (RAND_MAX + 1.0));
 57         num2 = limit[2] + (int)(limit[3] * rand() / (RAND_MAX + 1.0));
 58         c = 1 + (int)(4 * rand() / (RAND_MAX + 1.0));
 59         if (limit[4] == 1)
 60         {
 61             if (c % 4 == 0)
 62             {
 63                 if (limit[6] == 1)
 64                 {
 65                     if (num1%num2 == 0)
 66                         cout << "" << i + 1 << "道:" << num1 << "/" << num2 << "=" << "    ";
 67                     else
 68                     {
 69                         while (num1%num2 != 0)
 70                         {
 71                             num2 = num2 - num1%num2;
 72                         }
 73                         cout << "" << i + 1 << "道:" << num1 << "/" << num2 << "=" << "    ";
 74 
 75                     }
 76                 }
 77             }                                    //输出有无余数的除法
 78             if (c % 4 == 1) cout << "" << i + 1 << "道:" << num1 << "+" << num2 << "=" << "    ";
 79             if (c % 4 == 2) cout << "" << i + 1 << "道:" << num1 << "-" << num2 << "=" << "    ";
 80             if (c % 4 == 3) cout << "" << i + 1 << "道:" << num1 << "*" << num2 << "=" << "    ";
 81         }                                   //输出有乘除法的题目
 82         else
 83         {
 84             if (limit[7] == 1)
 85             {
 86                 num3 = pow(0.1, limit[8]) + (int)(0.1*rand() / (RAND_MAX + 1.0)) + num1;
 87                 num4 = pow(0.1, limit[8]) + (int)(0.1*rand() / (RAND_MAX + 1.0)) + num2;
 88             }
 89             if (limit[5] == 1)
 90             {
 91                 if (c % 2 == 0) cout << "" << i + 1 << "道:" << pow(-1, i)*num3 << "-" << pow(-1, i + 1)*num4 << "=" << "    ";
 92                 if (c % 2 == 1) cout << "" << i + 1 << "道:" << pow(-1, i)*num3 << "+" << pow(-1, i + 1)*num4 << "=" << "    ";
 93             }
 94             else
 95             {
 96                 if (c % 2 == 0) cout << "" << i + 1 << "道:" << num3 << "-" << num4 << "=" << "    ";
 97                 if (c % 2 == 1) cout << "" << i + 1 << "道:" << num3 << "+" << num4 << "=" << "    ";
 98             }                                //输出有无负数的加减
 99         }
100         if ((i%limit[1]) + 1 == limit[1])     //每行打印的题目数
101         for (int k = 0; k <= limit[0]; k++)
102             cout << endl;                //每行打印的间隔
103     }
104 }

四、实验结果:

  

  

五、PSP0级相关日志

  (1)项目计划日志

    周活动总结表

    姓名:胡浩特    日期:2016/3/6-2016/3/12

日期/任务 听课 编写程序 阅读课本 准备考试 日总计
周日   60 60   120
周一 100    60   160
周二     100   100
周三   100 60   160
周四 100 60     160
周五     120   120
周六   240 100   340
周总结 200 460 500   1160

  (2)时间记录日志:  

 

  学生:胡浩特                                             日期:2016-03-12

  教师:王建民                                              课程: PSP  

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3.7 19:00 9:30 30 120

构建之法

数据结构

 
3.9

2:00

4:30

4:00

6:00

120

90

编写程序

阅读

 
3.11

4:30

7:30

6:30

9:30

30

15

90

105

阅读

编写程序

 
3.12

9:00

2:00

11:30

5:30

30

30

120

180

编写程序

撰写博客

 
             
             

   (3)缺陷记录日志:  

 学生:胡浩特                                             日期:2016-03-12

  教师:王建民                                              程序号:1

  

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3.7 1 范围 设计 编译 10min  
描述:随机数范围输入时,出现错误。
3.9 2 循环 编码 编译 5min  
描述:在打印题目时,循环打印出现问题。
3.11 3 余数 编码 编译 5min  
描述:在选择有无余数时,不能出现有余数的式子。
3.12 4 整合 编码 编译 5min  
描述:使用switch语句来进行各项的选择时没整和好。
原文地址:https://www.cnblogs.com/JYQ-hu/p/5269531.html