四则运算2
1.设计思想
题目避免重复:
利用数组,将利用随机数函数产生的,表示第一个数的随机数与表示第二个书的随机数还有控制运算符号的第三个随机数求和,并与之前已存入的数字比较,若相同,则重新生成随机数。若不同则存入数组中,依次判断要输出的表达式是否与之前输出的表达式重复。
可定制(数量/打印方式)
通过为输出函数设置参数的方法控制,输出四则运算表达式的数量和每张纸上打印表达式的数量。
控制数值范围
将表示数字的随机数除以范围的最大值取余,得到的数字就是规定范围内的数字。
是否有乘除法
将控制运算符的随机数除以4,根据余数,运算符依次取+ - * /
加减是否有负数
通过随机数除以2取余,依次控制是否有负号
除法是否有余数
判断表达式是否可以整除,若能整除直接通过,否则将除数减去余数。
2.源程序代码
#include<iostream>
using namespace std;
//是否发生重复
void chongfu(int c,int j,int ku[])
{
int a1,a2,a3;
ku[0]=c;
for(int p=1;p<10000;p++)
{
if(ku[0]==ku[p])
{
a1=rand();
a2=rand();
a3=rand();
c=a1+a2+a3;
ku[j]=c;
chongfu(c,j,ku);
}
else
{
ku[j]=c;
break;
}
}
}
//算式表括达式的输出
void suanshi(int zdz,int cc,int ysh,int fs)
{
int a1,a2,a3,b1,b2,c,j=0,ku[10000];
char ch;
a1=rand();
a2=rand();
a3=rand();
c=a1+a2+a3;
chongfu(c,j,ku);
j++;
//控制数值范围
a1=a1%zdz;
a2=a2%zdz;
//有无负数
if(fs==2)
{
b1=(a1+a3)%2;
b2=(a2+a3)%2;
if(b1==0)
a1=-a1;
if(b2==1)
a2=-a2;
}
//有无乘除法
if(cc==2)
{
if(a3%4==0)
ch='+';
else if(a3%4==1)
ch='-';
else if(a3%4==2)
ch='*';
else
{
ch='/';
if(a2==0)
do
{
a2=rand();
a2=a2%zdz;
}
while(a2==0);
//除法有无余数之无余数
if(ysh==1)
{
int temp,tem;
if(abs(a1)<abs(a2))
{
temp=a1;
a1=a2;
a2=temp;
}
tem=a1%a2;
a2=a2%(zdz/3);
temp=rand();
temp=temp%3;
if(a1+a2*temp<=zdz)
a1=a1+a2*temp;
a1=a1-tem;
}
}
}
else
{
if(a3%2==0)
ch='+';
else
ch='-';
}
//输出算式
if(a2<0)
cout<<a1<<ch<<"("<<a2<<")"<<"="<<endl;
else
cout<<a1<<ch<<a2<<"="<<endl;
}
//定制题目数量打印方式
void dingzhi()
{
int sl,zl,zdz,cc,ysh,fs;
do
{
cout<<"请依次输入出题数量和每页的题量:"<<endl;
cout<<"请输入出题的数量:";
cin>>sl;
cout<<"请输入每页的题量:";
cin>>zl;
cout<<"请指定算式的范围:";
cin>>zdz;
cout<<"加减是否有负数 1.没有负数 2.有负数 请选择:";
cin>>fs;
cout<<"算式是否有乘除法 1.无乘除法 2.有乘除法 请选择:";
cin>>cc;
if(cc==2)
{
cout<<"除法是否有余数 1.没有余数 2.有余数 请选择:";
cin>>ysh;
}
else
ysh=1;
cout<<endl;
}while(sl<=0||zl<=0);
int ys=1;
for(int i=1;i<sl+1;i++)
{
suanshi(zdz,cc,ysh,fs);
cout<<endl;
if(i==zl*ys)
{
cout<<" 页数 "<<ys<<endl;
cout<<"--------------------------------------------------------------"<<endl;
ys++;
}
if(i==sl&&i!=zl*(ys-1))
{
cout<<" 页数 "<<ys<<endl;
cout<<"--------------------------------------------------------------"<<endl;
}
}
}
void main()
{
cout<<" "<<"****************************************"<<endl;
cout<<" *"<<" 四则运算 *"<<endl;
cout<<" *"<<" 作者:张欢龙 *"<<endl;
cout<<" *"<<" 日期:2015.3.19 *"<<endl;
cout<<" "<<"****************************************"<<endl<<endl;
dingzhi();
}
3.运行结果截图
4.编程总结
这次的编程题目比较熟悉,所以感觉比较简单,自我评价:这次编程用条件进行判断时,注意了if……else if……else……的运用,程序应该更强健;但是我已经学过java用户界面的编程,但是自己不熟悉,所以有逃避之嫌
5.时间记录日志
学生:张欢龙 日期:2015/3/19
教师:王建民 课程:软件工程概论
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
事件 |
备注 |
2015/3/13 |
-- |
-- |
-- |
-- |
上课 |
编程准备中 |
2015/3/14 |
-- |
-- |
-- |
-- |
周末 |
编程准备中 |
2015/3/15 |
-- |
-- |
-- |
-- |
周末 |
编程准备中 |
2015/3/16 |
-- |
-- |
-- |
-- |
上课 |
编程准备中 |
2015/3/17 |
-- |
-- |
-- |
-- |
上课 |
编程准备中 |
2015/3/18 |
-- |
-- |
-- |
-- |
上课 |
编程准备中 |
2015/3/19 |
16:00 |
21:22 |
18:00 |
6个半小时 |
写作业 |
编程中 |
总结:
这一部分,由于上课完成,故此处无需总结上课没有完成的原因。
另外,该题的编程较为基础,主要为数字的简单操作,完成此题后,唯一的遗憾就是打印方式感觉做的不好。