1.任务要求:对之前的自动出题系统提出了新的要求:(1)、题目避免重复;(2)、可定制(数量/打印方式);(3)可以控制下列参数:是否有乘除法、数值范围、加减有无负数、除法有无余数、是否支持分数...

2.设计思路:(1)主函数中有一个大循环,其中主框架是一个switch语句构成的,可以在四中运算中设置不同的要求并加以           实现。并使程序可以循环运行,即用户可以循环使用;

(2)避免重复:可以使用srand函数确保产生的随机数不相同;

(3)定制数量/打印方式:每一次循环会出n道题目,每行有num道题目,添加变量N,num,其数值由用户确定;

(4)乘除法选择:有无乘除法,加一个变量mul,设置其值并在switch语句中使用,若有乘除法则执行rand()%4,产生               四种运算符号,反之产生加减两种运算;

(5)数值范围:两个运算数为可以随便设置范围,其中用判断语句确保除法中除数不等于0;减法中被减数大于减数;

(6)除法是否有余数/是否支持分数:添加函数,利用判断语句设定,当题目是除法时如果不能除尽则重新生成题目,直到余              数为零,在主函数合适位置处调用添加函数,使用户可以进行选择题目中是否包含分数的运算数,如果包括可以重新设置                两个运算数变量的格式改为分数,反之不用做处理,并对此函数进行调用。

3.源程序代码:

//四则运算2. 2015/3/13 刘子晗

#include <iostream>
#include<stdlib.h>
#include <time.h>
#include<iomanip>
using namespace std; void main()
{
cout << "欢迎进入四则运算出题系统!" << endl;
cout << "*****************************************" << endl;
char g='Y',mod;
while (g == 'Y')
{
cout << "此系统分为两个模块,请进行选择:(A.整数 or B.分数)";
cin >> mod;
if (mod == 'A')
{
int N,max,min,num,j;
char mul,neg,rem;
srand((unsigned)time(NULL));
cout << "请输入要生成的题目数量N:";
cin >> N;
cout << "打印参数num(每一行有num道题目):";
cin >> num;
cout << "运算数的范围上限max:";
cin >> max;
cout << "运算数的范围下限min:";
cin >> min;
cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):";
cin >> mul;
cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):";
cin >> neg;
cout << "您是否希望除法题目中出现余数?(Y(是)or N(否)):";
cin >> rem; for (int k=;k<N;k++)
{
int a = rand()%(max-min+) + min ;
int b = rand()%(max-min+) + min ;
if (mul == 'Y')
{
j = rand()% + ;
}
if (mul == 'N')
{
j = rand()% + ;
}
switch(j)
{
case :
cout << setw() << a << "+" << setw() << b << "=" ;
break;
case :
if (neg == 'N')
{
while (a <= b)
{
a = rand()%(max-min+) + min ;
b = rand()%(max-min+) + min ;
}
cout << setw() << a << "-" << setw() << b << "=" ;break;
}
else
{
cout << setw() << a << "-" << setw() << b << "=" ;break;
} case :
cout << setw() << a << "*" << setw() << b << "=" ;
break;
case :
while (b == )
{
b = rand()%(max-min+) + min ;
}
if (rem == 'N')
{
while((a % b)!= )
{
a = rand()%(max-min+) + min ;
b = rand()%(max-min+) + min ;
}
cout << setw() << a << "/" << setw() << b << "=" ;break;
} else
{
cout << setw() << a << "/" << setw() << b << "=" ;break;
} }
if ( (k+) % num == )
{
cout << endl;
}
else
{
cout << " ";
} }
}
else
{
int N,max,min,num,j;
char mul,neg;
srand((unsigned)time(NULL));
cout << "请输入要生成的题目数量N:";
cin >> N;
cout << "打印参数num(每一行有num道题目):";
cin >> num;
cout << "运算数的分子和分母的范围上限max:";
cin >> max;
cout << "运算数的分子和分母的范围下限min:";
cin >> min;
cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):";
cin >> mul;
cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):";
cin >> neg; for (int k=;k<N;k++)
{
int a1 = rand()%(max-min+) + min ;
int a2 = rand()%(max-min+) + min ;
int b1 = rand()%(max-min+) + min ;
int b2 = rand()%(max-min+) + min ;
while(a2== || b2==)
{
a2 = rand()%(max-min+) + min ;
b2 = rand()%(max-min+) + min ;
}
if (mul == 'Y')
{
j = rand()% + ;
}
if (mul == 'N')
{
j = rand()% + ;
}
switch(j)
{
case :
cout << "(" << setw() << a1 << "/" << setw() << a2 << ")" << "+" << "(" << setw() << b1 << "/" << setw() << b2 << ")" << "=";
break;
case :
cout << "(" << setw() << a1 << "/" << setw() << a2 << ")" << "-" << "(" << setw() << b1 << "/" << setw() << b2 << ")" << "=";
break;
case :
cout << "(" << setw() << a1 << "/" << setw() << a2 << ")" << "*" << "(" << setw() << b1 << "/" << setw() << b2 << ")" << "=";
break;
case :
while (b1 == )
{
b1 = rand()%(max-min+) + min ;
}
cout << "(" << setw() << a1 << "/" << setw() << a2 << ")" << "*" << "(" << setw() << b1 << "/" << setw() << b2 << ")" << "=";
break;
}
if ( (k+) % num == )
{
cout << endl;
}
else
{
cout << " ";
} }
}
cout << "您是否要继续答题?请输入:(Y(是)or N(否))";
cin >> g;
cout << "*****************************************" << endl;
} cout << "感谢您的使用,再见!";
}

4.运行结果:

5.总结:(1)每一次真正编程序的时候会和自己的预想有很多偏差,主要有以下几点:思路设计的时候想把主函数设计得很简单,然后通过函数调用实现其他功能,但在实现的时候发现把功能实现都涵盖在主函数中也很简单,而且这样思路会变得很清晰;对避免重复题目这一点上,本来想通过三个字符的比较,可是觉得这种方法不够简便,于是采用了srand函数来实现这一功能;再就是在分数的选择上,如果添加函数实现的话,编写测试了好几次都没有成功,于是就在开始的地方设置了一个选择模块使整数和分数的运算区分开来以实现最终的结果。

(2)错误记录:出现的错误有很多,主要有a.由于程序是分块完成的,中间调试的时候出现了错误,if语句中把“==”写成了“= ;

b.在switch语句中,减法和除法的地方由于有判断语句,其中if循环中第一个输出的地方没有加break,虽然没有bug,但是最终运行时总是不对,发现是在条件不满足时就会没有显示该次循环输出结果,加上之后就对了;”;

c.开始实现打印输出设置一行题目数量时用了一个for循环,总是不对,又改成用if判断实现;之后意识到是因为上面的错误造成的而不是这个循环出错了,两种方法皆可;

d.由于数是随机产生的,一位数两位数或三位数都有可能,所以不能保证每一列都是齐的,之后查阅相关资料利用setw()加以纠正即可。

(3)感受:a.之前编写程序的时候我会习惯把相似的一个作为模版去改,从而实现自己所要实现的功能,但是现在突然觉得那是很不明智的,在自己给程序构想出大致框架后一点一点填东西似乎更容易达到预期;

b.编程实现某个功能的时候某种方法行不通时,有必要尽快跳出来,利用查资料或是别的途径看是否有别的简单易行的办法,否则会很耽误时间;在每一次编程中没准都会学到以前没有用过的一些知识点;

c.调试的时候出现的bug要仔细的分析一下,不能太盲目地认为提示行就是错误所在,因为有时候不是;

d.没有错误运行结果却跟自己预期不同或明显有错的时候,要看是哪个错,然后观察相应的程序块加以改正,否则全面找的话会很难找到。

(4)时间表:

Task2 四则运算2的更多相关文章

  1. 介绍一款原创的四则运算算式生成器:CalculateIt2

    家里小朋友读一年级了,最近每天都有一些10以内的加减法口算练习,作为程序员爸爸,自然也是想办法能够偷懒,让电脑出题,给小朋友做些练习.于是,自己在业余时间开发了一个四则运算算式生成器,名为:Calcu ...

  2. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  3. 四则运算appNABCD模型

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  4. 第一章-第一题(小学生四则运算)--By郭青云

    1.项目需求 a) 除了整数以外,还要支持真分数的四则运算. (例如:  1/6 + 1/8 = 7/24) b) 让程序能接受用户输入答案,并判定对错. 最后给出总共 对/错 的数量. c) 逐步扩 ...

  5. 一个简易的四则运算单元...(15.12.15 BUG更新)

    网上找的, 没有作者信息, 只能在这里感谢一下了, 支持标准写法的四则运算 --2015-12-15 修改了一个内存泄漏的BUG - Pop方法没有释放申请的内存 unit Base.Calculat ...

  6. 利用ANTLR4实现一个简单的四则运算计算器

    利用ANTLR4实现一个简单的四则运算计算器 ANTLR4介绍 ANTLR能够自动地帮助你完成词法分析和语法分析的工作, 免去了手写去写词法分析器和语法分析器的麻烦 它是基于LL(k)的, 以递归下降 ...

  7. 【实践】js实现简易的四则运算计算器

    最近看了一个大神推荐的某公司面试程序员的js 面试题,题目是用js 做一个计算器于是跟着大神的思想自己做了一下 ps:功能还没有完善好毕竟自己还是一只菜鸟还在不断学习中. 闲话不多说先上css代码 & ...

  8. HDU 5938 Four Operations(四则运算)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  9. C语言实现四则运算

    学生:宋丹丹 张潇裕 #include<iostream>#include<ctime>using namespace std;void main(){ int x1,x2,a ...

随机推荐

  1. jQuery----操作类样式(依托开关灯案例)

    在网页开发中,元素的样式可以在style标签中定义,但是有很多案例需要添加类样式或者删除类样式,可以获取元素调用css()方法改变元素样式,但是这种方法很繁杂,本文利用开关灯案例,小结使用jquery ...

  2. 克隆虚拟机及配置yum源的步骤及讲解(Hadoop基础)

    1.克隆虚拟机 找一台需要克隆的虚拟机但虚拟机必须在关机下进行,(建议将前期Linux环境 配置完成) 在VMware中右键虚拟机找到克隆的选项.   点击克隆 可以克隆他的快照(提前做快照)或者是克 ...

  3. pandas对excel处理过程中的总结

    在处理excel数据时需要将一组具有相同标签值的数据给按标签抽取出来,同样的标签值对应着同一个类别,这项操作让我对pandas的聚合功能有了更深刻的认识. 所谓聚合groupby,实际上是指将向量或者 ...

  4. STM32 HAL库学习系列第1篇 ADC配置 及 DAC配置

    ADC工作均为非阻塞状态 轮询模式 中断模式 DMA模式 库函数: HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//轮询模式,需放 ...

  5. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  6. 20155212 2016-2017-2 《Java程序设计》第9周学习总结

    20155212 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 Chapter16 数据库本身是个独立运行的应用程序. 应用程序如何呼叫这组链接库? 不同的 ...

  7. C#调整图片亮度和对比度

    BitmapSource bitmap = null; ; ; private void SetBrightness(int degree) { degree = degree * / ; Write ...

  8. 【SQLSERVER】处理一对多标签的语法糖

    数据库表设计的时候,经常会出现一对多的情况,比如标签.明细之类的. 有时,需要在一个查询中,将每个主体的所有标签在一个字段中展示出来,这个时候就可以用 FOR XML PATH 这个语法轻易的实现. ...

  9. 一维码UPC A简介及其解码实现(zxing-cpp)

    UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条  码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. UPC码仅可 ...

  10. 1433: [ZJOI2009]假期的宿舍

    1433: [ZJOI2009]假期的宿舍 链接 分析: 直接网络流,看是否满足即可. S向每个有需要的人连边,有床的向T连边,认识的人之间互相连边. 代码: #include<cstdio&g ...