zoukankan      html  css  js  c++  java
  • 四则运算2代码

    一、问题描述:

    一、要求:
        1、题目避免重复
        2、可定制(数量/打印方式)
        3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),

             是否支持小数(精确到多少位),打印中每行的间隔。

    二、问题分析:

      问题一:题目避免重复

        srand(time(NULL))函数;
      问题二:可定制(数量/打印方式)

        数量:将题目数量以数组的形式让用户输入;
        打印方式:以用户的输入数字来选择打印方式,几行几列...;

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

        在选则有无上述各种数,用数字0,1表示有无。

    三、源代码:

    #include<iostream.h>
    #include<stdlib.h>
    #include<time.h>

     void main( )
     {
         srand(time(NULL));//避免题目重复
         int i,j, x,y,t,b;//x,y表示两个数随机数,i表示题目的数量,t,b是在两个数相减中保证结果为正定义的变量
         int a[7];
          cout<<"请输入要打印的题目数:"<<endl;  
          cin>>a[0];
          while(a[0]<=0)  //题目数必须为正数
          {
              cout<<"请重新输入有效的题目数:"<<endl;
              cin>>a[0];
          };
          cout<<"请选择否有乘除法(是1;否0):"<<endl;
          cin>>a[1];
          while((a[1]!=1)&&(a[1]!=0)) //只能选择1或0
          {
              cout<<"请重新输入有效的数值:"<<endl;
              cin>>a[1];
          };
          cout<<"请输入运算数的范围:"<<endl;
          cin>>a[2];
          while(a[2]<=0)  //运算数必须为正数
          {
              cout<<"请重新输入有效的范围:"<<endl;
              cin>>a[2];
          };
         cout<<"请选择结果有无负数(是1;否0):"<<endl;
         cin>>a[3];
         while((a[3]!=1)&&(a[3]!=0))  //只能选择1或0
         {
             cout<<"请重新输入有效的数值:"<<endl;
             cin>>a[3];
         };
         cout<<"请选择结果有无余数(是1;否0):"<<endl;
         cin>>a[4];
         while((a[4]!=1)&&(a[4]!=0))  //只能选择1或0
         {
             cout<<"请重新输入有效的数值:"<<endl;
             cin>>a[4];
         };
         cout<<"请输入要打印的列数: "<<endl;
         cin>>a[5];
         while(a[5]<=0)
         {
             cout<<"请重新输入有效列数:  "<<endl;
             cin>>a[5];
         };
         cout<<"请输入每行间隔数: "<<endl;
         cin>>a[6];
       

        for(i=0;i<a[0];i++)
        {
            if(a[1]==1)//有乘除法的运算
            {
                t=rand()%4;
            }
            else//无乘除法的运算
            {
                t=rand()%2;
            }
            x=rand()%a[2]+1;
            y=rand()%a[2]+1;
            if(t==0)//加法
            {
               
             
               if((i+1)%a[5]==0)//判断是否换行
               {
                   cout<<endl;
               if(a[6]!=0)
               {
                   for(j=0;j<a[6];j++)
                   {
                       cout<<' ';
                   }
               }
               }
               cout<<i+1<<"·"<<x<<"+"<<y<<"="<<endl;
              
            }
            if(t==1)//减法,考虑是否存在负数
            {
                if(a[3]==0)//不存在结果负数
                {
                    b=x;
                    x=y;
                    y=b;

                }
                if(a[3]==1)//存在结果是负数
                {

                }
               
               
                 if((i+1)%a[5]==0)//判断是否换行
                 {
                     cout<<endl;
                
                  
                   if(a[6]!=0)//如果间隔数不是零
                   {

                       for(j=0;j<a[6];j++)
                       {
                           cout<<' ';
                       }
                   }
                 }
                 cout<<i+1<<"·"<<x<<"-"<<y<<"="<<endl;
            }
            if(t==2)//乘法
            {
               
               
                 if((i+1)%a[5]==0)//判断是否换行
               {
                 
                   if(a[6]!=0)
                   {
                       cout<<endl;
                  
                       for(j=0;j<a[6];j++)
                       {
                           cout<<' ';
                       }
                   }
                 }
                 cout<<i+1<<"·"<<x<<"*"<<y<<"="<<endl;

            }
            if(t==3)//除法,考虑结果是否有余数
            {
                if(a[4]==1)//结果有余数
                {}
                else
                {
                    while(x%y!=0)//不能整除,重新生成随机函数
                    {
                        x=rand()%a[2]+1;
                        y=rand()%a[2]+1;
                    };

                }
           
               
                 if((i+1)%a[5]==0)//判断是否换行
               {
                   cout<<endl;
                
                   if(a[6]!=0)
                   {
                       for(j=0;j<a[6];j++)
                       {
                           cout<<' ';
                       }
                   }
                 }
            cout<<i+1<<"·"<<x<<"/"<<y<<"="<<endl;
            }
        }
        cout<<"结束,欢迎下次使用"<<endl;
    }

             
             
            
     
       


    运行结果截图:

    五、总结

      在本次编程中,有很多小的问题,但是确实我们平时不注意的问题,本来最初的想法是一层一层函数的调用,但是调用函数学的不是很明白,所以造成很多错误,后来又想用if或者switch语句各种嵌套,但是又出现很多代码重复,虽然思路不难,但是没什么技术含量,最后我又分情况讨论,把各种限制条件加到加减乘除每种情况下,这样只是打印输出需要重复写,其余的限制条件就不必了。所以我知道每次编写程序前,必须做到胸中有沟壑,并把详情仔细的过滤下,从中找到最好的解决方案。

    还有一点要改进当然地方是,列数总是输出不对,我就不截图了,以后会改进。

    六、周活动总结表

    项目计划总结

    周活动总结表

    姓名:唐仙迪                                                       日期:2015/3/15

    任务

    日期

    听课

    编程

    阅读课外数目

    锻炼身体

    写老师留得作业

    业余活动

    日总计

    (分钟)

    周日

    100

    30

    130

    周一

    400

    30

    430

    周二

    200

    30

    60

    290

    周三

    100

    60

    30

    60

    120

    370

    周四

    200

    30

    30

    40

    300

    周五

    200

    100

    30

    40

    370

    周六

    40

    30

    40

    120

    230

    阶段时间和效率

    周数:1

    总计

    60

    415

    410

    370

    420

    490

    230

    平均

    30

    69

    68

    61

    70

    67

    46

    最大

    30

    400

    200

    100

    200

    200

    60

    最小

    30

    15

    30

    30

    30

    30

    2,时间记录日志:

    学生:唐仙迪                                                                     日期:2015/3/15

    老师:王建民                                                                      课程:PSP

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    3/10

    08:00

    12:00

    40

    200

    上课

    14:30

    15:30

    60

    构思程序

    16:00

    17:00

    60

    写作业

    21:00

    21:30

    30

    读梦断代码

    3/11

    08:00

    10:00

    20

    100

    听课

    11:00

    12:00

    60

    编程

    14:00

    15:00

    60

    写作业

    21:00

    21:30

    30

    读梦断代码

    3/12

    10:00

    12:00

    20

    100

    听课

    14:00

    14:30

    30

    编程

    15:00

    16:00

    60

    写作业

    21:00

    21:30

    30

    读梦断代码

    3/13

    08:00

    12:00

    40

    200

    听课

    14:00

    15:40

    100

    编程

    21:00

    21:30

    30

    读梦断代码

    3,缺陷记录日志:

    学生:唐仙迪                                                                    日期:2015/3/15

    老师:王建民 

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复阶段

    修复缺陷

    3/10

    1

    001

    编程

    编译

    15min

    描述:函数定义错误

    2

    002

    编程

    编译

    10min

    描述:函数调用出现错误

    3/11

    3

    003

    编程

    编译

    2

    描述:switch语句掌握不好

    4

    004

    编程

    编译

    10min

    描述:输入时换行,导致错误

    3/12

    5

    005

    编程

    编译

    5min

    描述:输出混乱

    3/13

    6

    006

    编程

    编译

    5min

    描述:

    在运行时,输出的格式不是按要求的输出的,原因是if语句插入的位置不正确

                                                                    

  • 相关阅读:
    Spring视频学习笔记(一)
    枚举(enum)与类的静态成员(static)
    Java的继承模式
    HTML锁定Table中某一列
    Winform 中的KeyDown
    我的WebService入门
    获取键盘或鼠标多久没有对屏幕进行操作了
    从DB输出值到DataTable时,字段值为NULL时报错相关信息;
    Data层相关问题 & JS循环取值
    字符串String的trim()方法
  • 原文地址:https://www.cnblogs.com/tangxiandi/p/4339581.html
Copyright © 2011-2022 走看看