标签:
30道四则运算题目
用C++编写程序,打印30道四则运算题目;
要求:1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数: 是否有乘除法、是否有括号、
数值范围、加减有无负数、除 法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
要求1:题目避免重复
C++中用函数srand()能够避免生成重复的随机数,一定的数值范围只能生成一定数量的随机运算题目:满足一个关系:num>(4*(num2-num1)^2)即:题目数应小于4倍的可用整数的平方。满足这个条件才能不重复。
要求2:可定制(数量/打印方式);
For()循环中的30这个数字,变成一个从键盘输入的参数num;
打印方式:在循环的过程中要根据用户输入的每行几个式子,间距进行打印。
要求3:
A、是否有乘除法
把参数c进行控制:除法c=0;加法c=1;减法c=2;乘法c=3;
用if控制用户输入的是否要乘法、除法
Rand()随机生成c。
B、是否有括号
程序要改进成混合运算;if 0 cout<<;else cout<<
C、数值范围
提示语句;新参数
参数a、b进行控制,新参数作为随机函数后面的控制条件;
D、加减有无负数
控制case 2的内容;a>b或者 a<b;
E、除法余数
如果用户输入的结果判断出需要除法式子,则进行判断是不是要能够整除。
不要求整除的话,判断除数是否为0,若为0,a、b颠倒位置输出即可;
若要求整除,重新生成a、b,直到生成合适a、b为止,此处用到while循环。
F是否支持分数(真分数,假分数)
输入提示语句
真分数:结果输出形式a/b原样输出
G是否支持小数
输入提示语句;
H打印中每行的间隔可调整?
在每道题目输出的时候,判断i与k是否是整除关系。是对话输出回车,进行排版。
1 /** 2 作者:程鹏远 3 题目:30道2年纪四则运算题目 4 */ 5 #include <iostream.h> 6 #include <stdlib.h> 7 #include <conio.h> 8 int main() 9 { 10 //初始化 11 int a,b,c; 12 int num1,num2; 13 int num; 14 int chufa; 15 int k,jiange; 16 int zhengchu; 17 int j=0; 18 int chengfa; 19 int con; 20 //请输入数的范围,中间用空格隔开: 21 cout<<"请输入数的范围,中间用空格隔开:"; 22 cin>>num1>>num2; 23 24 //控制题目的个数,num 25 cout<<"其输入要出多少道题目:"; 26 cin>>num; 27 28 if(num>(4*(num2-num1)^2)) 29 { 30 cout<<"您输入的题目数量太多,会造成重复,请重新输入数目:"; 31 cin>>num; 32 } 33 34 //打印格式 35 cout<<"一行几道题,行间距是几,中间空格:"; 36 cin>>k>>jiange; 37 if(jiange>=5||jiange<0) 38 { 39 cout<<"您输入的间距太大或为负数,请重输:"; 40 cin>>jiange; 41 } 42 43 //是否要除法 44 cout<<"是否要除法?是输入1,否输入0:"; 45 cin>>chufa; 46 if(chufa==1) 47 { 48 cout<<"是否要有余数,是输入1,否输0:"; 49 cin>>zhengchu; 50 } 51 52 //是否要乘法 53 cout<<"是否要乘法,是输入1,否输入0:"; 54 cin>>chengfa; 55 56 cout<<endl; 57 for(int i=0;i<num;i++) 58 { 59 cout<<i+1<<"、"; 60 a=(rand()%(num2-num1+1))+num1; 61 b=(rand()%(num2-num1+1))+num1; 62 63 if(chufa==1) 64 { 65 if(chengfa==1) 66 { 67 c=rand()%4;//0-3 68 } 69 else 70 { 71 c=rand()%3;//0-2 72 } 73 } 74 else 75 { 76 if(chengfa==1) 77 { 78 c=rand()%3+1;//1-3 79 } 80 else 81 { 82 c=rand()%2+1;//1-2 83 } 84 } 85 86 switch (c) 87 { 88 case 1: 89 cout<<a<<"+"<<b<<"="<<"\t"; 90 break; 91 case 2: 92 if(a>b) 93 { 94 cout<<a<<"-"<<b<<"="<<"\t"; 95 } 96 else 97 { 98 cout<<b<<"-"<<a<<"="<<"\t"; 99 } 100 break; 101 case 3: 102 cout<<a<<"*"<<b<<"="<<"\t"; 103 break; 104 case 0://除法 105 if(zhengchu==1)//有余数 106 { 107 if(b==0) 108 { 109 cout<<b<<"/"<<a<<"="<<"\t"; 110 } 111 else 112 { 113 cout<<a<<"/"<<b<<"="<<"\t"; 114 } 115 116 117 } 118 else 119 { 120 while((j<100000)&&(a!=0)&&(b!=0)&&(a%b==0)) 121 { 122 cout<<a<<"/"<<b<<"="<<"\t"; 123 j++; 124 } 125 if((a!=0)&&(b!=0)&&(a%b==0)) 126 { 127 cout<<a<<"/"<<b<<"="<<"\t"; 128 //i++; 129 } 130 else 131 { 132 int j=0; 133 while(j<100000) 134 { 135 a=(rand()%(num2-num1+1))+num1; 136 b=(rand()%(num2-num1+1))+num1; 137 if((a!=0)&&(b!=0)&&(a%b==0)) 138 { 139 cout<<a<<"/"<<b<<"="<<"\t"; 140 //i++; 141 j=100000; 142 j++; 143 } 144 else 145 { 146 j++; 147 } 148 } 149 } 150 } 151 break; 152 } 153 154 155 if((i+1)%k==0) 156 { 157 cout<<endl; 158 for(int m=0;m<jiange;m++) 159 { 160 cout<<endl; 161 } 162 } 163 164 } 165 //继续吗? 166 cout<<"继续吗?是输入1,否输入0:"<<endl; 167 cin>>con; 168 if(con==1) 169 { 170 cout<<endl; 171 main(); 172 } 173 else 174 { 175 return 0; 176 } 177 getch(); 178 return 0; 179 }
1.遇到问题:
Rand()获取随机数,他的范围问题,是不是包括边界值;
一定数目的题目才能够在满足数字的范围内不重复,运用高中排列组合知识进行讨论解决;
这么多要求,这些要求是有顺序的,例如,必须先有判断是不是有除法,才能继续判断是不是要余数,如果没有除法,就不用判断是不是要余数,避免用户的困惑;
要求无余数,一次循环过来的a、b是不满足条件的,需要对while循环熟练使用才能快速生成有用的a、b;
For循环内部是包括自加1机制的,不用在循环的最后加1;
2.收获
一个软件的编写一定是从简单的小模块到大的模块,是从小到要求实现,到全部的要求实现。开始看见题目不要太着急,先对题目进行分解,慢慢就能做出完整的题目。
3.体会
先对题目要有一个自己的设计思路,思路成熟后才进行编写代码环节。编写的时候遇到小问题,可以百度相应的知识点,也可以问经验丰富的同学。
一、项目计划总结:
周活动总结表
姓名:程鹏远 日期:3月15日
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
日总计 |
周日 |
|
205 |
|
|
205 |
周一 |
|
|
|
|
|
周二 |
|
|
|
|
|
周三 |
|
|
|
|
|
周四 |
|
|
|
|
|
周五 |
|
105 |
|
|
105 |
周六 |
|
|
|
|
|
周总结 |
|
|
|
|
|
阶段时间和效率 第2 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间
总计 |
310 |
|
|
|
|
|
|
平均 |
155 |
|
|
|
|
|
|
最大 |
205 |
|
|
|
|
|
|
最小 |
105 |
|
|
|
|
|
|
二、时间记录表:
学生 程鹏远 日期 3月15日
教师 王建民 课程 软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/15 |
1:00 |
4:37 |
12min |
3小时25分钟 |
编写30道四则运算题目 |
|
三、缺陷记录日志:
学生 程鹏远
日期 3月15日
教员 王建民
程序号 1
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/15 |
01 |
20 |
编码 |
编码 |
1分钟 |
|
描述:不会用rand()函数; |
||||||
|
02 |
制表符”\t” |
编码 |
编译 |
2分钟 |
|
描述:不会用制表符“\t” |
||||||
|
03 |
For() |
编码 |
编译 |
7分钟 |
|
描述:for循环内部多层嵌套,内部放入了i++; |
||||||
|
|
|
|
|
|
|
|
标签:
原文地址:http://www.cnblogs.com/zhaixing/p/4340030.html