根据课上思路的继续,将四则运算升级。我感觉要将所有的要求都实现有些难度,因此选择实现几个简单的功能。
二次思路:
1、在前面出30道两个随机产生的二位数四则运算的基础上,先解决避免题目中出现重复,与同学们讨论调用函数解决。
2、之前是规定30道题,提示用户定制题目数量,在for语句循环显示题目前进行手动输入,输出至符合要求的题目数量时停止;打印方式同样通过给出提示,用户进行输入来选择实现每行显示多少道题目。
3、关于几个运算条件,我想按照是否有乘除法、是否负数及参与运算数值的取值范围这样的顺序,用多个层次嵌套的方法来实现。例如说是否有乘除法,通过屏幕提示进行选择,出现两个分支,0是有乘除法的四则运算,1则只用考虑加减法;在选择0有乘除法后,继续进行选择运算中是否有负数,也是两个分支,同理0是有负数参与,1是没有负数(即全为正数);再在选择0有负数的情况下讨论数值范围、在选择1有负数的情况下讨论数值范围......就是分支上再分支。
1 #include<iostream.h>
2 #include<stdlib.h>
3 #include<time.h>
4
5 int main()
6 {
7 srand(time(NULL)); //题目避免重复
8 int value1,value2,op; //两个整数,运算符
9 int amount,mount; //题目数量
10 int erji; //二级运算,即乘除法
11 int number; //正负数
12 int range; //数值范围
13
14 cout<<"请定制题目的数量(填一个>0的整数):";
15 cin>>amount;
16 while(amount<=0)
17 {
18 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
19 cin>>amount;
20 }
21
22 cout<<"题目中是否有乘除法(填0为是,1为否):";
23 cin>>erji;
24 while(erji!=0 && erji!=1)
25 {
26 cout<<"不合法!"<<endl<<"请重新输入(填0为有乘除法,1为无乘除法):";
27 cin>>erji;
28 }
29 if(erji==0)
30 {
31
32 cout<<"题目中是否有负数(填0为是,1为否):";
33 cin>>number;
34 while(number!=0 && number!=1)
35 {
36 cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";
37 cin>>number;
38 }
39 if(number==0)
40 {
41
42 cout<<"请输入数值的最小边界(填一个<0的整数):";
43 cin>>range;
44 while(range>=0)
45 {
46 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";
47 cin>>range;
48 }
49 cout<<"每行打印题目的数量(每行):";
50 cin>>mount;
51
52 cout<<endl<<"共"<<amount<<"道包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;
53 for(int i=0;i<amount;i++)
54 {
55 cout<<"("<<i+1<<")";
56 value1=rand()%range+range/2;
57 value2=rand()%range+range/2;
58 op=rand()%4;
59 switch(op)
60 {
61 case 0:
62 cout<<value1<<" + "<<value2<<"="<<" "; //加
63 break;
64 case 1:
65 cout<<value1<<" - "<<value2<<"="<<" "; //减
66 break;
67 case 2:
68 cout<<value1<<" x "<<value2<<"="<<" "; //乘
69 break;
70 case 3:
71 cout<<value1<<" ÷ "<<value2<<"="<<" "; //除
72 break;
73 }
74 if((i+1)%mount==0)
75 {
76 cout<<endl;
77 }
78 }
79 }
80 else
81 {
82
83 cout<<"请输入数值的最大边界(填一个>0的整数):";
84 cin>>range;
85 while(range<0)
86 {
87 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
88 cin>>range;
89 }
90 cout<<"每行打印题目的数量(每行):";
91 cin>>mount;
92
93 cout<<endl<<"共"<<amount<<"道包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;
94 for(int i=0;i<amount;i++)
95 {
96 cout<<"("<<i+1<<") ";
97 value1=rand()%range;
98 value2=rand()%range;
99 op=rand()%4;
100 switch(op)
101 {
102 case 0:
103 cout<<value1<<" + "<<value2<<"="<<" "; //加
104 break;
105 case 1:
106 cout<<value1<<" - "<<value2<<"="<<" "; //减
107 break;
108 case 2:
109 cout<<value1<<" x "<<value2<<"="<<" "; //乘
110 break;
111 case 3:
112 cout<<value1<<" ÷ "<<value2<<"="<<" "; //除
113 break;
114 }
115 if((i+1)%mount==0)
116 {
117 cout<<endl;
118 }
119 }
120 }
121 }
122 else
123 {
124
125 cout<<"题目中是否有负数(填0为是,1为否):";
126 cin>>number;
127 while(number!=0 && number!=1)
128 {
129 cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";
130 cin>>number;
131 }
132 if(number==0)
133 {
134
135 cout<<"请输入数值的最小边界(填一个<0的整数):";
136 cin>>range;
137 while(range>=0)
138 {
139 cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";
140 cin>>range;
141 }
142 cout<<"每行打印题目的数量(每行):";
143 cin>>mount;
144
145 cout<<endl<<"共"<<amount<<"道不包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;
146 for(int i=0;i<amount;i++)
147 {
148 cout<<"("<<i+1<<") ";
149 value1=rand()%range+range/2;
150 value2=rand()%range+range/2;
151 op=rand()%2;
152 switch(op)
153 {
154 case 0:
155 cout<<value1<<" + "<<value2<<"="<<" "; //加
156 break;
157 case 1:
158 cout<<value1<<" - "<<value2<<"="<<" "; //减
159 break;
160 }
161 if((i+1)%mount==0)
162 {
163 cout<<endl;
164 }
165 }
166 }
167 else
168 {
169
170 cout<<"请输入数值的最大边界(填一个>0的整数):";
171 cin>>range;
172 while(range<0)
173 {
174 cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";
175 cin>>range;
176 }
177 cout<<"每行打印题目的数量(每行):";
178 cin>>mount;
179
180 cout<<endl<<"共"<<amount<<"道不包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;
181 for(int i=0;i<amount;i++)
182 {
183 cout<<"("<<i+1<<") ";
184 value1=rand()%range;
185 value2=rand()%range;
186 op=rand()%2;
187 switch(op)
188 {
189 case 0:
190 cout<<value1<<" + "<<value2<<"="<<" "; //加
191 break;
192 case 1:
193 cout<<value1<<" - "<<value2<<"="<<" "; //减
194 break;
195 }
196 if((i+1)%mount==0)
197 {
198 cout<<endl;
199 }
200 }
201 }
202 }
203 return 0;
204 }
总结:
程序是选择最容易想到但很繁琐的方式实现的,敲完全部代码下来发现有很多一样或类似的,以后可以尝试调用函数,这样会简单很多。
1、最简单的错误:在判断输入的数是否符合要求时全部都用if结构,结果第一次不符合要求会提示,而连续输错两次就继续另一个要求的选择,后来改用while实现。
2、在负数的输出上,开始在程序中限制了两个数其中一个为负数或者两个都为负数:value=rand()%range+range,后来我想了想改成了value=rand()%range+range/2,这样就能使随机产生正负数了,同时又出现另一个局限没解决,产生数的范围是我想要输出数值范围的一半。
这次程序感受很深,以前没有好好学,参考别的同学的代码包含数据结构、链表的都看不太懂,只能用最麻烦的方法实现几个简单的功能了。
项目计划总结 周活动总结表 姓名:林彦汝 日期:3/14/2015 |
|||||||
任务 日期 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
|
|
|
|
|
|
|
周三 |
100 |
60 |
60 |
|
|
|
220 |
周四 |
200 |
50 |
30 |
|
|
|
280 |
周五 |
200 |
125 |
30 |
|
|
|
355 |
周六 |
|
120 |
100 |
|
|
|
220 |
周总计 |
|
|
|
|
|
|
|
阶段时间和效率 周数:1 |
|||||||
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间 |
|||||||
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
时间记录日志 学生:林彦汝 日期:3/14/2015 课程:软件工程 |
||||||||
日期 |
开始 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/11 |
8:00 |
9:50 |
10 |
100 |
上课 |
《计算机网络》 |
|
|
|
12:40 |
13:00 |
|
20 |
找资料 |
C/C++ |
|
|
|
16:00 |
17:00 |
|
60 |
编程 |
四则运算 |
|
|
|
22:30 |
23:00 |
|
30 |
阅读 |
《梦断代码》 |
|
|
3/12 |
18:00 |
20:00 |
5 |
50 |
作业 |
休息 |
|
|
|
20:20 |
21:00 |
|
50 |
编程 |
四则运算 |
|
|
|
22:30 |
23:00 |
|
30 |
阅读 |
《梦断代码》 |
|
|
3/13 |
18:30 |
21:00 |
10+10+5 |
125 |
编程 |
四则运算 |
|
|
|
22:30 |
23:00 |
|
30 |
阅读 |
《梦断代码》 |
|
|
3/14 |
9:00 |
10:00 |
|
120 |
编程 |
四则运算 |
|
|
|
10:30 |
11:30 |
|
60 |
作业 |
|
|
|
|
14:00 |
16:00 |
10+10 |
100 |
写报告 |
|
|
|
缺陷记录日志 学生: 林彦汝 日期: 3/14/2015 教员: 王老师 程序号: 2 |
||||||
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/12 |
1 |
|
设计 |
编译 |
2min |
|
描述:不能连续用if判断输入的数是否合法,改成while结构。 |
||||||
3/14 |
2 |
|
编码 |
编译 |
0.5min |
|
描述:出现中文“;” |