代码改变世界

四则运算-终结版

2016-03-19 14:44  LUXIN123  阅读(171)  评论(1编辑  收藏  举报

---恢复内容开始---

一、题目

每个同学选一个方向,把程序扩展一下:
1、让程序能接受用户输入答案,并判定对错。并输出正确的错题数
2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。
3、把程序变成一个Windows 图形界面的程序。
4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)
5、选一个你从来没有学过的编程语言,试一试实现基本功能。

选择1

二、思路:1 用一个数组把结果存到里面去,用以计算结果

         2 用户输入的结果与正确答案相比对,给出提示信息并输出正确答案。

         3 有余数的情况是,先判断是否是除法,然后是的话就输入两个数,一个是商,一个是余数,判断答案是否正确。

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
 
 void main( )
 {
     srand(time(NULL));//避免题目重复
     int i,j, x,y,t[100],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];
     
     int result[100],resulty[100]={0},daan[100],yushu[100]={0};
    for(i=0;i<a[0];i++)
    {
        if(a[1]==1)//有乘除法的运算
        {
            t[i]=rand()%4;
        }
        else//无乘除法的运算
        {
            t[i]=rand()%2;
        }
        x=rand()%a[2]+1;
        y=rand()%a[2]+1;
        if(t[i]==0)//加法
        {
             
           
           if((i+1)%a[5]==0)//判断是否换行
           {
               cout<<i+1<<"·"<<x<<"+"<<y<<"=";
               result[i]=x+y;
           if(a[6]!=0)
           {
               for(j=0;j<a[6];j++)
               {
                  cout<<endl;
               }
           }
           }
           else
           {
           cout<<i+1<<"·"<<x<<"+"<<y<<"="<<'\t';
            
           }
            
        }
        if(t[i]==1)//减法,考虑是否存在负数
        {
            if(a[3]==0)//不存在结果负数
            {
                b=x;
                x=y;
                y=b;
 
            }
            if(a[3]==1)//存在结果是负数
            {
 
            }
             
             
             if((i+1)%a[5]==0)//判断是否换行
             {
                 cout<<i+1<<"·"<<x<<"-"<<y<<"=";
                 result[i]=x-y;
              
                
               if(a[6]!=0)//如果间隔数不是零
               {
 
                   for(j=0;j<a[6];j++)
                   {
                       cout<<endl;
                   }
               }
             }
             else
             {
             cout<<i+1<<"·"<<x<<"-"<<y<<"="<<'\t';
 
             }
        }
        if(t[i]==2)//乘法
        {
             
             
             if((i+1)%a[5]==0)//判断是否换行
           {
              cout<<i+1<<"·"<<x<<"*"<<y<<"=";
              result[i]=x*y;
               if(a[6]!=0)
               {
                    
                
                   for(j=0;j<a[6];j++)
                   {
                       cout<<endl;
                   }
               }
             }
             else
             {
             cout<<i+1<<"·"<<x<<"*"<<y<<"="<<'\t';
             }
 
        }
        if(t[i]==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<<i+1<<"·"<<x<<"/"<<y<<"=";
                result[i]=x/y;
                resulty[i]=x%y;
               if(a[6]!=0)
               {
                   for(j=0;j<a[6];j++)
                   {
                       cout<<endl;
                   }
               }
             }
             else
             {
        cout<<i+1<<"·"<<x<<"/"<<y<<"="<<'\t';
             }
        }
    }
    cout<<"请输入解题答案"<<endl;
    for(i=0;i<a[0];i++)
    {
        cout<<i+1<<".";
        if(t[i]==3)
        {
            cout<<"请输入商:";
            cin>>daan[i];
            cout<<"请输入余数:";
            cin>>yushu[i];
        }
        else
        {
            cin>>daan[i];
        }
        if(t[i]==3)
        {
            if(daan[i]==result[i]&&yushu[i]==resulty[i])
            {
                cout<<"答案正确,请输入下一题答案"<<endl;
            }
            else
            {
                cout<<"答案错误,正确答案为:"<<result[i]<<"  "<<resulty[i]<<endl;
            }
        }
        else
        {
            if(daan[i]==result[i])
            {
                cout<<"答案正确"<<endl;
            }
            else
            {
                cout<<"答案错误,正确答案为:"<<result[i]<<endl;
            }
        }
    }
    cout<<"结束,欢迎使用"<<endl;
}

 四、结果

五、实验总结

通过此次实验我收获颇多。第一,首先考虑结果的存放,我把她放到一个整形数组里,但是结果可能是有余数的,所以我就定义了两个数组一起作为结果

第二,然后我又想,只有除法的时候需要用到两个结果,一个用来存商,一个用来存余数,所以还得判断题目是否为除法。

第三,我们定义的程序有些不完整,因为我定义的数组为100,所以超过边界值就会出现溢出状况,会出现乱码

还有 通过两人合组,我能和我的小伙伴能够互补合作,编程的效率更高。

五、日志

               项目记录 日志:

 

听课

编写程序

阅读相关书籍

网上查找资料

日总计

周一

2

0

1

0

3

周二

0

1

0.5

1

2.5

周三

0

3

0.5

1

4.5

周四

2

0.5

0.5

0

3

周五

0

3

0.5

1

4.5

周六

0

6

0.5

1

7.5

周日

 

 

 

 

 

周总计

4

13.5

3.5

4.5

25

时间记录日志

日期

开始 时间

结束时间

中断时间

净时间

活动

备注

星期一

1400

1600

10

100

上课

软件工程

 

1800

1900

0

60

阅读书籍

梦断代码

星期二

1600

1700

0

60

编程

四则运算

 

1900

2000

0

120

阅读书籍 

上网

查找相关函数 

星期三

1300

1700

60

180

编程

四则运算

 

1900

2100

30

120

阅读书籍

构建之法

星期四

1400

1600

10

100

上课

软件工程

 

1900

2000

0

60

编程 查找资料

四则运算

星期五

1300

1700

60

180

编程

四则运算

 

1700

18:00

0

60

上网

查资料 

星期六

900

1100

30

120

编程

四则运算

 

1300

1800

30

270

编程

四则运算

       缺陷记录日志:

                                     

日期

编号

类型

引入阶段

排除阶段

修复阶段

修复缺陷

3/18

1

结果的存储

 

 

20min

 

考虑到除法出现小数,不造怎么存,后来写成商和余数的形式,都是整数

1

依然是存数的问题

 

 

2min

 

商和余数定义成两个数组

3/29

2

程序结果不稳定

 

 

未解决

 

有时候正确结果出现乱码,考虑是结果溢出

 

 

 

 

 

 

 

 

 

 

 

 

我的伙伴 张瑶:http://www.cnblogs.com/zhangyao999/