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. undefined reference to `sqrt'的问题

    主要问题是math.h这个头文件虽然在/lib/include 下有定义,但是该文件内并没有sqrt()的定义.解决的办法是:在编译的时候在后面加上-lm,意思是链接到math函数库. 在gcc下用到 ...

  2. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...

  3. angularJs实现星星等级评分

    星期六加班,教育后台也要有星级评分等级的需求,醉了……基本知道些怎么做,网上也随便找了找,没什么合意的,毕竟需求不同,也不能完全一样不是.学习之,改之╮(╯▽╰)╭ Directive angular ...

  4. leetcode之转置矩阵

    转置矩阵 题目描述: 给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引. 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] ...

  5. python,使用枚举类,面向对象高级编程

    python #针对常量 #枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例. from enum import Enum Month = Enum('Month', ('J ...

  6. JavaWeb基础—Servlet重要对象

    一.ServletConfig对象 当servlet配置了初始化参数后(<init-param> <param-name> <param-value>),web容器 ...

  7. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  8. jQuery学习- 子选择器与可见性选择器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. python基础学习1-正则表达式

    #!/usr/bin/env python # -*- coding:utf-8 -*- import re print(re.findall('alex','yyyyabbblalexrrreooo ...

  10. 【SHOI2016】黑暗前的幻想乡

    题面 题解 如果没有建筑公司的限制,那么就是个\(\mathrm{Matrix\;tree}\)板子 其实有了也一样 发现\(n\leq 17\),考虑容斥 每次钦定一些建筑公司,计算它们包含的边的生 ...