• 四则运算2


    一、要求:

      1、题目避免重复;

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

      3、可以控制下列参数:

        (1)是否有乘除法;

        (2)是否有括号(最多可以支持十个数参与计算);

        (3)数值范围;

        (4)加减有无负数;

        (5)除法有无余

    二、设计思路

         1为了避免题目重复,定义了三个数组用来分别存放第一,二个数和符号,用if条件语句判断是否重复

         2、定义变量number,在for循环中设定循环次数

         3、(1)switch语句来实现是否有乘除法。“+”“-”“*”“/”,分别用0,1,2,3来代替,if语句来判断进入“+”“-”和“+”“-”“*”“/”

              (2)带有多组括号的功能没有实现,

              (3)数值范围根据随机数求余数,实现它的数值范围t=rand()%range

              (4)加减法中有无结果有无负数,通过if语句中两个数比较大小,执行是否有负数生成

              (5)首先避免分母为0,再用if结构来判断进入有无余数环节

    三、实验代码

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

    四、测试结果

    五、项目计划日志

         周活动总结表

    日期/任务 听课 编写程序 阅读课本 准备考试 日总计
    周一 100 30 30   160
    周二   60     60
    周三   30 60   90
    周四 100   30   130
    周五   30     30
    周六   300 100   400
    周天          
    总结 200 450 220   870

    六、时间记录表:

    学生       景*                                           日期   2016年3月12日 

    教师       王**                                          课程        软件工程      

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     3.7

     16:30

     17:00

     无

    30

    看书 

    构建之法 

     3.8

    20:00

    21:00

     无

    60

    编写程序

    复习C++

     3.9

    19:30

    21:00

    120

    复习,程序

    作业

    3.10

    21:15

    21:45

    30

    看书

    代码之殇

     3.11

    22:10

    22:40

     无

    30

    编写程序

     作业

     3.12

     9:00

     17:00

     120

     360

     编程

     作业

    陷记录日志

    日期 编号 引入阶段 排除阶段 修复时间 修复缺陷
    3.8 1 编码 编译 10 随机循环,除法有无余数,适应的输出
    3.11 2 编码 编译 20 打印方式,不能从文件打出,设定列数,有时会错位
    3.12 3 编码 编译 60 括号功能未实现

    七、实验总结

         这次编程,实在是难受。以前的程序想着简单些,编写困难,这次的程序想着都难,几乎无从下手,平时不编程,现在知道困难了。想起一句话:出来混迟早是要还的。真的,自己实在是差劲,很多情况下对for循环的三层嵌套都弄不清楚,今天用到的最多的就是if语句,很受挫败。即使如此,还有很多功能没有实现,比如括号的功能,负数的功能,还有这只是两个数字的,还未实现多个数字的四则运算。革命尚未成功还需继续努力。

  • 相关阅读:
    作业1-四则运算题目生成程序
    实验四 决策树算法及应用
    实验三朴素贝叶斯算法及应用
    自定义博客园背景
    机器学习 实验二 K-近邻算法及应用
    机器学习 实验一 感知器及其运用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一:软件开发文档与工具的安装与使用
    朴素贝叶斯学习日志——简单案例python计算过程
  • 原文地址:https://www.cnblogs.com/apan008/p/5269520.html
Copyright © 2020-2023  润新知