zoukankan      html  css  js  c++  java
  • 四则运算2完整版

    一、题目要求:

    1、题目避免重复;

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

    3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、

    否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

    二、设计思想

    1、题目避免重复

    (1)调用随机函数发生器,将生成的运算式用数组存储,将新的运算式与已生成式子做比较,若相同则不输出,不同则输出

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

    (1)提示用户输入题目数量,打印方式,从键盘输入

    3、(1)是否有乘除法

    在输入之前提示用户是否有乘除法,若没有,则只输出加减法

    (2)是否有括号

    (3)数值范围

    由用户设置数值范围,如果输入不合法,提示输入错误,请重新输入,在随机生成数中保证随机数在用户设置的数值范围

    (4)加减有无负数

    如果没有负数,比较生成的两个数,保证做减法时被减数不小于减数

    (5)乘除有无余数

    首先判断除数是否为零,若为零则终止,若不为零则继续。对做除法的两个操作数做取余运算,若为零则没有余数

    三、原程序代码

      1 #include<iostream.h>
      2 #include<stdlib.h>
      3 #include<time.h>
      4 void display(int number,int l,int mul,int num,int neg,int remainder)//打印方式控制输出列数
      5 {
      6     int a[1000],b[1000],c[1000];
      7     int m;//控制题目避免重复
      8     int t;//中间变量
      9     for(int i=0;i<number;i++)//随机两个生成运算操作数
     10     {  
     11         m=1;//初始化
     12         a[i]=rand()%num;
     13         b[i]=rand()%num;
     14         if(mul==0)//没有乘除法
     15         {    
     16             c[i]=rand()%2;//随机生成0-1的数字,分别表示加减
     17         }
     18         if(mul==1)//有乘除法
     19         {
     20             c[i]=rand()%4;//随机生成0-3的数字,分别表示加减乘除
     21         }
     22         for(int j=0;j<i;j++)
     23         {
     24             if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])//比较新生成的操作数与原来的是否相同
     25             {
     26                 i=i-1;
     27                 m=0;
     28             }
     29         }
     30         while(m)//若不同则输出
     31         {
     32             switch(c[i])
     33             {
     34             case 0:
     35                 cout<<a[i]<<"+"<<b[i]<<"=";break;
     36             case 1:
     37                 if(neg==0)//减法没有负数
     38                 {
     39                     if(a[i]<b[i])
     40                     {
     41                         t=a[i];
     42                         a[i]=b[i];
     43                         b[i]=t;
     44                     }
     45                     cout<<a[i]<<"-"<<b[i]<<"=";break;
     46                 }
     47                 else
     48                 {
     49                     cout<<a[i]<<"-"<<b[i]<<"=";break;
     50                 }
     51             case 2:
     52                 cout<<a[i]<<"*"<<b[i]<<"=";break;
     53             case 3:
     54                 if(b[i]==0)//分母为零则不计入总数
     55                 {   
     56                     i=i-1;break;
     57                 }
     58                 else if(remainder==0)//除法没有余数
     59                 {
     60                     if(a[i]%b[i]==0)
     61                     {
     62                         cout<<a[i]<<"/"<<b[i]<<"=";break;
     63                     }
     64                     else
     65                     {
     66                         i=i-1;break;
     67                     }
     68                 }
     69                 else if(remainder==1)//除法有余数
     70                 {
     71                     if(a[i]%b[i]!=0)
     72                     {
     73                         cout<<a[i]<<"/"<<b[i]<<"=";break;
     74                     }
     75                     else
     76                     {
     77                         i=i-1;break;
     78                     }
     79                 }
     80             }
     81             if((i+1)%l==0)
     82             {
     83                 cout<<endl;
     84             }
     85             else
     86             {
     87                 cout<<"	"<<"	";
     88             }
     89             break;//跳出循环
     90         }
     91     }
     92 }
     93 void main()
     94 {
     95     int number;//题目数量
     96     int l;//输出的列数
     97     int mul;//乘除法
     98     int num;//数值范围
     99     int neg;//负数
    100     int remainder;//余数
    101     srand((unsigned) time(NULL));//调用随机函数发生器
    102     cout<<"---------------------------------"<<endl;
    103     cout<<"            四则运算             "<<endl;
    104     cout<<"---------------------------------"<<endl;
    105     cout<<"请输入要打印的题目数量:"<<endl;
    106     cin>>number;
    107     cout<<"请输入要输出的列数(1-10):"<<endl;
    108     cin>>l;
    109     cout<<"是否有乘除法(0表示没有;1表示有)"<<endl;
    110     cin>>mul;
    111     if(mul==1)
    112     {
    113         cout<<"除法有无余数(0表示没有;1表示有)"<<endl;
    114         cin>>remainder;
    115     }
    116     cout<<"请输入正整数的数值范围(即最大数):"<<endl;
    117     cin>>num;
    118     cout<<"减法有无负数(0表示没有;1表示有)"<<endl;
    119     cin>>neg;
    120     display(number,l,mul,num,neg,remainder);
    121 }

    四、运行结果截图

    五、日志记录

    六、实验总结  

        在实验过程中遇到了一些困难,首先调用随即函数发生器不会写,通过上网查询自己解决了,在写控制题目避免重复时,while循环的位置总是不对,还是最后缺少了break终止。变量的定义范围掌握不准确。实验程序写的并不完整,是否有括号,是否支持分数、小数等功能没有实现。程序只编写了一个函数,把所有的参数都放在了里面,修改起来不方便,所以还有待改进。

  • 相关阅读:
    oracle如何实现自增?----用序列sequence的方法来实现
    win7旗舰版安装 oracle 10g 不能进入图形界面的问题
    MBA都需要学习哪些课程
    查看Oracle当前用户下的(表视图,同义词...)
    辽宁省全国计算机等级考试 网上报名须知
    大学毕业之后的几年 你能考哪些证书
    plsql启动报 Using filter for all users can lead to poor perform
    hive web界面管理
    hive常用命令
    hive-site.xml
  • 原文地址:https://www.cnblogs.com/czl123/p/4338112.html
Copyright © 2011-2022 走看看