四则运算(二)

一:设计思路

通过随机函数始末位置来确定题目范围,通过用户输入选择项,确定题目难度(有无乘除,结果有无负数,除法有无余数)。通过用户输入行间隔和列数确定打印格式。

二:源程序

  1 /*程序名:四则运算*/
  2 #include<iostream.h>
  3 #include<stdlib.h>
  4 #include<iomanip.h>
  5 int main()
  6 {
  7     int op1,op2;
  8     int min,max;
  9     int judgeopera;   //有无乘除判断
 10     int judgesign;    //有无正负判断
 11     int judgeremain;  //有无余数判断
 12     int count;        //题目数量
 13     int yunsuan;      //确定运算符
 14     int j;
 15     int row;          //行间隔
 16     int column;       //列数
 17     int flag=0;
 18     srand((unsigned)time(0));
 19     cout<<"请输入数值范围:";
 20     cin>>min>>max;
 21     cout<<"请输入输出行间隔:";
 22     cin>>row;
 23     cout<<"请输入输出列数:";
 24     cin>>column;
 25     char yun[5]={‘+‘,‘-‘,‘*‘,‘/‘};
 26     cout<<"输入题目数量:";
 27     cin>>count;
 28     cout<<"是否含有乘除(1表示Yes,2表示No)";
 29     cin>>judgeopera;
 30     while(judgeopera!=1&&judgeopera!=2)                 //如果输入不符合,重新输入
 31     {
 32         cout<<"重新输入:";
 33         cin>>judgeopera;
 34     }
 35     cout<<"是否允许负数存在(1表示Yes,2表示No)";
 36     cin>>judgesign;
 37     while(judgesign!=1&&judgesign!=2)
 38     {
 39         cout<<"重新输入:";
 40         cin>>judgesign;
 41     }
 42     if(judgeopera==1)
 43     {
 44         cout<<"有乘除法时是否允许余数存在(1表示Yes,2表示No)";
 45         cin>>judgeremain;
 46         while(judgeremain!=1&&judgeremain!=2)
 47         {
 48             cout<<"重新输入:";
 49             cin>>judgeremain;
 50         }
 51     }
 52     for(int i=0;i<count;i++)
 53     {
 54
 55         op1=int(rand()%(max-min+1))+min;
 56         op2=int(rand()%(max-min+1))+min;
 57         if(judgeopera==1)
 58         {
 59             yunsuan=int(rand()%4);
 60             if(judgesign==1)
 61             {
 62                 if(judgeremain==1)                                 //有乘除,有负数,有余数部分
 63                 {
 64                     cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
 65                     flag=flag+1;
 66                 }
 67                 else                                               //由乘除,有负数,无余数部分
 68                 {
 69                     if(yunsuan==3)
 70                     {
 71                         while(op1%op2!=0)
 72                         {
 73
 74                             op1=int(rand()%(max-min+1))+min;
 75                             op2=int(rand()%(max-min+1))+min;
 76                         }
 77                         cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
 78                         flag=flag+1;
 79                     }
 80                     else
 81                     {
 82                         cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
 83                         flag=flag+1;
 84                     }
 85                 }
 86             }
 87             else                        //有乘除,无负数,
 88             {
 89                 if(yunsuan==1)
 90                 {
 91                     while(op1<op2)
 92                     {
 93
 94                         op1=int(rand()%(max-min+1))+min;
 95                         op2=int(rand()%(max-min+1))+min;
 96                     }
 97                     cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
 98                     flag=flag+1;
 99                 }
100                 else
101                 {
102                     if(judgeremain==1)    //有乘除,无负数,有余数部分
103                     {
104                         cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
105                         flag=flag+1;
106                     }
107                     else
108                     {
109                         if(yunsuan==3)
110                         {
111                             while(op1%op2!=0)
112                             {
113                                 op1=int(rand()%(max-min+1))+min;
114                                 op2=int(rand()%(max-min+1))+min;
115                             }
116                             cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
117                             flag=flag+1;
118                         }
119                         else
120                         {
121                             cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
122                             flag=flag+1;
123                         }
124                      }
125                 }
126             }
127         }
128         else  //无乘除部分
129         {
130
131             yunsuan=int(rand()%2);
132             if(judgesign==1)
133             {
134                 cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
135                 flag=flag+1;
136             }
137             else
138             {
139                 if(yunsuan==1)
140                 {
141                     while(op1<op2)
142                     {
143                         op1=int(rand()%(max-min+1))+min;
144                         op2=int(rand()%(max-min+1))+min;
145                     }
146                     cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
147                     flag=flag+1;
148                 }
149                 else
150                 {
151                     cout<<i+1<<"、"<<op1<<yun[yunsuan]<<op2<<"\t";
152                     flag=flag+1;
153                 }
154             }
155         }
156         if(flag==column)     //列数设置
157         {
158             for(int p=0;p<=row;p++)   //行间隔设置
159             {
160                  cout<<endl;
161             }
162             flag=0;
163         }
164     }
165     return 0;
166 }

三:截图

四:psp

 一、项目计划总结:

周活动总结表

姓名: 王童博                             日期:2015/3/15


日期       任务


听课


编写程序


阅读课本


准备考试


日总计


周日


周一


周二


120


120


周三


50


50


周四


50


50


周五


120


60


180


周六


100


100


周总结


240


210


50


500

阶段时间和效率                                 周数(上一次周活动表的周数+1):1

不包括上一周在内的累计时间


总计


平均


最大


最小

以前各周的累计时间


总计


240


210


20


500


平均


240


210


20


500


最大


240


210


20


500


最小


240


210


20


500

二、时间记录表:

学生       王童博                                                      日期       2015/3/15

教师        王建民                                                     课程           PSP


日期


开始时间


结束时间


中断时间


净时间


活动


备注


3/11


7:00


7:50


50


编程


3/12


9:00


9:50


50


查阅资料


3/13


8:00


9:00


60


编程


3/14


6:50


8:30


100


编程

三、缺陷记录日志:

学生       王童博

日期        3/15

教员       王建民

程序号    四则运算


日期


编号


类型


引入阶段


排除阶段


修复时间


修复缺陷


3/11


1


范围


编码


运行测试


2min


输入错误,导致程序崩溃。设置条件,输入错误,则重新输入


3/13


2


函数


编码


运行测试


2min


Rand函数的随机性。使用srand来进行


3/14


3


可能性没有考虑周全


编码


运行测试


10min


当无余数时,会产生空题。重新生成运算解决问题,

五:总结

此次课堂练习,当然了课堂上 没有完成。在课下通过查找资料,完成了几点功能。但是对于括号和小数的精度则没有实现。完成的过程中遇到许多问题,本想以函数形式展现,可是以我的思路写下来,if else可以完成所需要求。不过丧失了程序的模块化。整个程序看起来有点杂。对于使用链表来存储运算题,最后输出。通过查询有无相同有无重复蛮好的想法,但由于对链表的不熟悉导致失败。在以后的试验中还得强化自己编程能力。来弥补一年的空缺。

时间: 2024-10-16 23:16:52

四则运算(二)的相关文章

四则运算二之结果

设计思想: 题目避免重复 将得到的题目放入数组,并与前面的进行匹配,若相同则跳过且变量减一. 可定制 通过一个变量控制输出来确定输出格式. 控制参数 是否有乘除法 If语句当面对除法时,控制被除数不为0.若为零,则跳过且变量减一. 数值范围 随机数控制. 加减有无负数 If语句检验随机数是否小于0,若小于零则跳过且变量减一. 除法有无余数 If语句检验,其余同上. 是否支持分数 If语句随机出现分数的运算. 实现代码: //四则运算二,王昭博,3.13,2015 #include<iostrea

个人作业五:四则运算二

四则运算2 一.设计思路: 1.题目避免重复: (1)利用系统时间来产生随机数,重复率会降低. (2)建立链表,逐个判断.可读取写入文件. 2.可定制(数量/打印方式): (1)格式有默认值; (2)可以选择重新设置分几列和每行的间隔.打印方式用%取余来实现分列输出. 3.可以控制参数: (1)这些参数都有默认值: (2)出题之前可以选择重新设置某一个或多个参数: (3)是否有乘除法/括号/负数/余数/支持分数/支持小数:用户输入1/0表示是/否: 数值范围.真分数.假分数.精确到几位小数.每行

3月10号周二课堂练习:四则运算二

一.题目新的要求 1.题目避免重复: 2.可定制(数量/打印方式): 3.可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 二.设计思想(将自己上次上课时的设计思想进行稍微的修改) 1.判断两次随机数是否相同    使用函数srand()保证两个随机数不同 2.多加入一个变量,来控制题目数量 3.在每一个switch选择的语句,进行选择判断  3.1选择是否有乘除

20165210 结对编程练习:四则运算(二)

20165210 结对编程练习:四则运算(二) 题目需求: 四则运算: 自动生成 要求有加减乘除 支持真分数 统计正确率 需求分析: 首先我们可以把除法和分数归为一类 有一个类进行随机生成数 有一个类进行随机生成符号 主类进行四则运算和统计正确率 四则运算的计算式 分数的计算式 设计思路: 原文地址:https://www.cnblogs.com/lyklyk/p/8910285.html

程序设计之四则运算二

随着又一次软件工程课的来临,老师再一次给我们布置了新的作业,这次作业是上一次的改良版,有了更多的要求 一.题目避免重复 二.定制(数量/打印方式) 三.控制参数 1.是否有乘除法 2.是否有括号 3.数值范围 4.加减有无负数 5.除法有无余数 题目避免重复,可以通过存入算式到数组,生成之后的算式时比较,如果重复则重新生成. 控制是否有乘除法可以通过改变随机生成时的参数来实现. 难度最大的就是生成括号了,这个需要考虑生成括号的位置,个数,括号的叠加等等. 位置可以通过设置数组代替,对应数字只有左

四则运算二

一.设计思想 在上个程序中添加控制变量,实现题目个数.数值范围.有无乘除法的控制. 二.源程序代码 #include<iostream> #include<cmath> using namespace std; void main() { int i, j, a, m, n, l, k, p, q, c,d,num/*,real*/; cout << "请输入题目的个数:" << endl; cin >> p; cout &l

3月13号周五课堂练习:对四则运算二进行测试(选择一个条件)

测试条件:随机数的取值范围 1.当负数和0时出现提示重新输入 2.当题目数量大于随机数的取值范围如1时,产生相同的四则运算关系式 3.当输入字母和其他特殊字符时,程序崩溃 4.当输入取值过大时,提示重新输入(最大的值99999999999999,14个9) 通过本次测试发现自己的程序不够健壮,很多bug,后期要好好的把发现的程序bug解决掉.

四则运算二项目计划总结

周项目总结表                        姓名:黄伟鹏                       日期:2016/3/19 任务/日期 听课 编写程序 阅读书籍 日总计 周日  3.12 0 1 1 2 周一 2 0.5 2 4.5 周二 0 0.5 0 0.5 周三 0 0 0 0 周四 0 0 0 0 周五 0 1 0 1 周六 0 3 1 4 周总计 2 7 4 13 日期 开始时间 结束时间 中断时间 净时间 活动 备注 3.12 8:00 9:00   1 编程序

四则运算 二

设计思想: 1.定义数组number1[] number2[] 2.首先在ChooseAmount()函数中选择题目数量实现题目数的订制 3.在ChooseMD()函数中选择是否有乘除法 其中定义变量mDChoose 若为1则有 若为2 则无 4.在ChooseNumberRange()选择输出数值的范围 5.在RandomNumber()函数中用随机赋值入数组 6.在RandomNumberChange()函数中判断一些数学运算问题 比如除数不为0 7.在RandomOperatorOne()

软工概论第二周个人项目四则运算二(改进)

设计思想: 设计思想:输出表达式的个数n,利用随机数方法产生小于100的随机数,用for循环产生多个随机数,然后在进行判断,判断两个证书的和小于100,差大于0,乘积小于100,能够整除如果不符合要求则跳过本次循环,如果符合则赋值当总数到n时跳出循环,用字符串保存表达式,用double类型的数组保存正确结果,然后循环输出表达式,输入结果后跳转到判断结果界面,循环判断结果,如果相等flag[]为1,不等为0,最后给出正确的题目数量和错误的数量和未作的数量,在循环输出不正确的那些题目 改进的地方:表