四则运算终结版

一、题目

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

选择1

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

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

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

三、源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
#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,所以超过边界值就会出现溢出状况,会出现乱码

 第四,次程序存在一定的问题,还需继续改进。

六、

项目计划总结

周活动总结表

姓名:张瑶                                                       日期:2016/3/19

任务

日期

听课

编程

阅读课外数目

锻炼身体

写老师留得作业

业余活动

日总计

(分钟)

周日

 

180

 

120

 

300

600

周一

120

 

60

 

60

 

240

周二

0

 

30

120

 

 

150

周三

0

60

30

 

 

240

330

周四

120

30

30

120

 

 

300

周五

0

100

30

 

120

 

250

周六

 

400

 

 

 

 

400

 

2,时间记录日志:

学生:张瑶                                                                     日期:2016/3/18

老师:王建民                                                                      课程:PSP

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/17

08:00

12:00

40

200

上课

 

14:30

18:30

 

240

上网娱乐

哈哈

19:00

20:00

 

60

写作业

 

22:00

22:30

 

30

读梦断代码

 

3/20

08:00

10:00

20

100

听课

 

11:00

12:00

 

60

在吃饭的路上和吃饭ing

 

15:00

19:00

 

180

肖申克的救赎

 

22:00

22:30

 

30

读梦断代码

 

3/18

10:00

12:00

20

100

听课

 

15:00

18:30

 

270

构思,编程

 

19:00

20:00

 

60

写作业

 

21:00

21:30

 

30

读梦断代码

 

3/19

08:00

12:00

 

200

编程

 

14:00

15:40

 

100

改进代码

 

21:00

21:30

 

30

读梦断代码

 

3,缺陷记录日志:

学生:张瑶                                                                    日期:2016/3/18

老师:王建民 

 

 

 

 

 

 

日期

编号

类型

引入阶段

排除阶段

修复阶段

修复缺陷

3/21

1

结果的存储

 

 

20min

 

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

1

依然是存数的问题

 

 

2min

 

商和余数定义成两个数组

3/22

2

程序结果不稳定

 

 

未解决

 

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

 

 

 

 

 

 

 

                                                                我的结对伙伴:鲁鑫 http://home.cnblogs.com/u/luxin123/

posted on 2016-03-19 13:35  张瑶  阅读(146)  评论(1编辑  收藏  举报

导航