用程序实现用户要求的若干道2年级四则运算题

一、题目

按用户编写若干道2年级四则运算题

1题目避免重复

2可定制(数量/打印方式)

3可以控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数、是否支持分数(真分数,假分数,…)、是否支持小数(精确到多少位)、打印中每行的间隔可调整。

二、设计思想

上次的设计思想是先生成三个随机数,两个数是操作数,第三个控制乘除加减的选择。

这次同样是生成几个随机数,但需要设置一些判断条件,来满足用户出题要求,写一个出题函数,根据用户要求改变其中的变量,循环调用这个函数出题。

一、题目避免重复

因为随机函数是伪随机,只是一个函数,所以只需保证不与上次出的题相同即可。

方法一、把前面生成的题目存到三个数组,以后依次比较。

方法二、控制选择随机产生的第几个数(如前30,再30个等),或控制srand函数的值,是之每次都不同,即可保证随机产生的数不同。

二、可定制(数量/打印方式)

循环变量由用户输入,确定数量,打印方式由变量控制,由用户输入,操作数数量有用户输入(在选择有无括号)

三、可以控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数、是否支持分数(真分数,假分数,…)、是否支持小数(精确到多少位)、打印中每行的间隔可调整。

所有参数一个数组,统一设置内容,每次都由用户输入来设置,然后根据数组的值设置调用的出题函数的参数,来出题。

乘除只需在加减乘除上加两个运算即可。

括号必须是有三个及以上操作数才能有,否则报错,可固定在第二个操作数前和最后面加括号。

数值范围可以用改变随机数,用1+(int)(范围最大值*rand()/(RAND_MAX+1.0))来改变。

加减有无负数可用随机在操作数前加负号。

除法有无余数可以当随机到除号时对出号第二个操作数循环减一知道成为第一个操作数的除数。

是否支持分数可以把两个操作数通过分号合成一个操作数。

是否支持小数精确到多少位可以改变1+(int)(范围最大值*rand()/(RAND_MAX+1.0))使之除以小数位数乘10即可。

打印中每行间隔可以单独设一个输出来输出间隔。

三、源代码

#include<iostream.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int num1,num2,num0,c;
    int limit[8];
    double num3,num4;
    srand((int)time(0));         //  不同的时间,产生不同的随机数,但不保证缩小范围后是不是一样的数,是缺陷
    cout<<"输入题目的数量:";
    cin>>num0;
    cout<<endl;
    cout<<"输入打印中每行的间隔:";
    cin>>limit[0];
    cout<<endl;
    cout<<"输入打印中每行的题目数:";
    cin>>limit[1];                                //每次都输入太麻烦了,这个设置一般是一样的,可否改为设置一次即可
    cout<<endl;
    cout<<"输入操作数的数值范围的最小值和最大值:";
    cin>>limit[2]>>limit[3];
    cout<<endl;
    cout<<"是否有乘除法,有输入1,没有输入0:";
    cin>>limit[4];
    cout<<endl;
    cout<<"加减有无负数,有输入1,没有输入0:";
    cin>>limit[5];
    cout<<endl;
    if(limit[4]==1)
    {
        cout<<"除法有无余数,有输入1,没有输入0:";
        cin>>limit[6];
        cout<<endl;
    }
    if(limit[4]==0)
    {
        cout<<"是否支持小数,有输入1,没有输入0:";
        cin>>limit[7];
        cout<<endl;
        if(limit[7]==1)
        {
            cout<<"若支持小数,精确到多少位:";
            cin>>limit[8];
            cout<<endl;
        }
    }
    for(int i=0;i<num0;i++)              //输出题目的循环
    {
        num1=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0));
        num2=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0));
        c=1+(int)(4*rand()/(RAND_MAX+1.0));
        if(limit[4]==1)
        {
            if(c%4==0)
            {
                if(limit[6]==1)
                {
                    if(num1%num2==0)
                    cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<"    ";
                    else
                    {
                        while(num1%num2!=0)
                        {
                            num2=num2-num1%num2;
                        }
                        cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<"    ";

                    }
                }
            }                                    //输出有无余数的除法
            if(c%4==1) cout<<"第"<<i+1<<"道:"<<num1<<"+"<<num2<<"="<<"    ";
            if(c%4==2) cout<<"第"<<i+1<<"道:"<<num1<<"-"<<num2<<"="<<"    ";
            if(c%4==3) cout<<"第"<<i+1<<"道:"<<num1<<"*"<<num2<<"="<<"    ";
        }                                   //输出有乘除法的题目
        else
        {
            if(limit[7]==1)
            {
                num3=pow(0.1,limit[8])+(int)(0.1*rand()/(RAND_MAX+1.0))+num1;
                num4=pow(0.1,limit[8])+(int)(0.1*rand()/(RAND_MAX+1.0))+num2;
            }
            if(limit[5]==1)
            {
                if(c%2==0) cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"-"<<pow(-1,i+1)*num4<<"="<<"    ";
                if(c%2==1) cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"+"<<pow(-1,i+1)*num4<<"="<<"    ";
            }
            else
            {
                if(c%2==0) cout<<"第"<<i+1<<"道:"<<num3<<"-"<<num4<<"="<<"    ";
                if(c%2==1) cout<<"第"<<i+1<<"道:"<<num3<<"+"<<num4<<"="<<"    ";
            }                                //输出有无负数的加减
        }
        if((i%limit[1])+1==limit[1])     //每行打印的题目数
        for(int k=0;k<=limit[0];k++)
            cout<<endl;                //每行打印的间隔
    }
    return 0;
}

四、实验截图

五、实验总结

经过漫长的努力,终于完成了大部分要求,我基础不大好,这次真的是费了很大劲。。。。

编写时自己没有用类啊,函数啊什么的,全部语句都堆在了主函数里,以后要改正。

如何确保没有重复的题目和如何选择有无括号这两项我没完成,不会弄。。。但时间来不及了,以后问问同学,掌握这两项。

六、psp

一、项目计划总结:

周活动总结表

姓名:李海超                                          日期:2015年3月15日


日期       任务


听课


编写程序


阅读课本


准备考试


日总计


周日


周一


周二


100


30


130


周三


60


10


70


周四


60


10


70


周五


100


60


10


70


周六


60


10


70


周总结


410

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

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


总计


平均


最大


最小

以前各周的累计时间


总计


平均


最大


最小

二、时间记录表:

学生         李海超                                           日期      2015/3/15

教师        王建民                                             课程           PSP


日期


开始时间


结束时间


中断时间


净时间


活动


备注


3.11


12:30


1:10


70


编程看书


3.12


12:30


1:10


70


编程看书


3.13


12:30


1:10


70


编程看书


3.14


12:30


1:10


70


编程看书

三、缺陷记录日志:

学生        李海超

日期     2015/3/15

教员       王建民

程序号      2


日期


编号


类型


引入阶段


排除阶段


修复时间


修复缺陷


3.11


无,但不会使题目不重复,决定跳过这一步


3.12


If中比较时应用==而不是=


3.13


应注意if else格式,用{}包起下面的语句,否则会不清晰


3.14


注意变量类型,是需要double转变成int还是反之。

时间: 2024-10-10 14:14:24

用程序实现用户要求的若干道2年级四则运算题的相关文章

实现用户要求的若干道2年级四则运算题程序测试

测试过程 运行程序,输入不同的控制条件,看结果是否正确. 1测试操作数范围 2测试有无乘除 3测试有无小数 4测试除法有无余数 测试总结 输出是否有小数的时候出错了,位数不是很符合要求,而且有的没输出出来,需要改进.

用程序实现随机编30道2年级四则运算题

问题 源代码 #include<iostream.h>#include<time.h>#include<stdlib.h>int main(){ int a,b,c,d; srand((int)time(0)); for(int i=0;i<30;i++) { a=1+(int)(100*rand()/(RAND_MAX+1.0)); b=1+(int)(100*rand()/(RAND_MAX+1.0)); c=1+(int)(4*rand()/(RAND_MA

编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果

编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果 import javax.swing.JOptionPane; public class Test{ public static void main(String[] args) { int n1=Integer.parseInt(JOptionPane.showInputDialog("Input number 1: ")); int n2=Integer.parseInt(JOptionPane.showInpu

TODO:小程序的用户身份

小程序的用户身份有三种,一个管理员,二十个开发者,四十个体验者 1.管理员,可设置风险操作保护.风险操作提醒等操作. a)修改管理员,需要用到原管理员,新管理员的身份证号码,并且绑定了管理员本人银行卡的微信进行操作,扫描二维码,绑定不会被扣除任何费用.新管理员需要手机短信验证码验证. b)操作很简单,扫描验证身份,可能需要新旧微信号,进行多次扫描才能验证成功,提交的时候也可能出现"系统错误,请稍后常识.",但是管理员意见修改成功了. 2.绑定开发者,项目大了,需要多人同时开发就需要绑定

微信小程序活跃用户破4亿 小程序靠什么能成为实体店引流神器?

2017年12月,以"跳一跳"为代表的微信小游戏让人们认识到了小程序的流量潜力.在微信的流量红利下,小程序生态发展迅速,成为开发者们中炙手可热的新风口.2018年初,小程序做到了日活1.7亿.月活4.3亿,参与开发者100多万. 近日,TalkingData发布2018微信小程序洞察报告--<场景+链接,数据视角下的小程序浪潮>.报告预测,2018年小程序数量将突破250万,数量超越AppStore应用总和. 小程序一季度活跃用户破4亿 游戏类别最"受宠"

微信小程序-获取用户信息和openid,session_key,

1:微信小程序获取用户信息:比如常用的 avatarUrl (用户头像),nickName (用户名称) 等等, (1):获取用户信息调用 wx.getUserInfo 代码如下: 直接请求接口就可以了,随后把数据存放到storage中,下次直接取 就不用再请求接口,, 2:获取 openid (1):请求wx.login 接口,代码如下: url:是微信提供的 appid:是小程序的appid secret:是小程序开发设置的 AppSecret 只要获取到这两项,用户信息可以用于页面,ope

56 java编程思想——创建窗口和程序片 用户接口API

56.java编程思想--创建窗口和程序片 用户接口API Java 1.1 版同样增加了一些重要的新功能,包括焦点遍历,桌面色彩访问,打印"沙箱内"及早期的剪贴板支持. 焦点遍历十分的简单,因为它显然存在于AWT 库里的组件并且我们不必为使它工作而去做任何事.如果我们制造我们自己组件并且想使它们去处理焦点遍历,我们过载isFocusTraversable()以使它返回真值.如果我们想在一个鼠标单击上捕捉键盘焦点,我们可以捕捉鼠标按下事件并且调用requestFocus()需求焦点方法

解决谷歌浏览器无法从该网站添加应用、拓展程序和用户脚本

解决谷歌浏览器无法从该网站添加应用.拓展程序和用户脚本 之前遇到的问题,在网上找到的答案,标记一下. 今天将谷歌浏览器升级到了最新的版本,在安装拓展应用的时候,却发现无法添加应用.拓展程序和用户脚本,让我很是郁闷,现整理解决方法如下: 1.在Google Chrome浏览器的桌面快捷方式上鼠标右键,选择属性(R),进入如下界面 2. 在目标(T)后添加参数   --enable-easy-off-store-extension-install (注意在添加参数之前,要有个空格),添加完之后点击确

chrome无法从该网站添加应用、扩展程序和用户脚本的有效解决方法!

1.情景展示 在安装chrome离线扩展程序时,报错信息如下:无法从该网站添加应用.扩展程序和用户脚本(Apps, extensions, and user scripts cannot be added from this website). 2.解决方案 第一步:新建一个标签页,在地址栏输入:chrome://flags/#extensions-on-chrome-urls并按回车键 将值改为Enabled 重启chrome 第二步:启用开发者模式 刷新该页面 再次添加扩展程序就可以了. 3