标签:
根据课上思路的继续,将四则运算升级。我感觉要将所有的要求都实现有些难度,因此选择实现几个简单的功能。
二次思路:
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<<"="<<"\t\t"; //加 63 break; 64 case 1: 65 cout<<value1<<" - "<<value2<<"="<<"\t\t"; //减 66 break; 67 case 2: 68 cout<<value1<<" x "<<value2<<"="<<"\t\t"; //乘 69 break; 70 case 3: 71 cout<<value1<<" ÷ "<<value2<<"="<<"\t\t"; //除 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<<"="<<"\t\t"; //加 104 break; 105 case 1: 106 cout<<value1<<" - "<<value2<<"="<<"\t\t"; //减 107 break; 108 case 2: 109 cout<<value1<<" x "<<value2<<"="<<"\t\t"; //乘 110 break; 111 case 3: 112 cout<<value1<<" ÷ "<<value2<<"="<<"\t\t"; //除 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<<"="<<"\t\t"; //加 156 break; 157 case 1: 158 cout<<value1<<" - "<<value2<<"="<<"\t\t"; //减 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<<"="<<"\t\t"; //加 191 break; 192 case 1: 193 cout<<value1<<" - "<<value2<<"="<<"\t\t"; //减 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 |
|
描述:出现中文“;” |
标签:
原文地址:http://www.cnblogs.com/mumulucky/p/4337941.html