一.设计思路
1.设计要求
1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
2.设计思路
1.数量可以用控制循环次数来控制;
2.可定制n列的,当循环n的倍数时,回车;
3.控制输出结果switch(n)中n的大小来控制,如果为2,或3,n-1就可以把乘除转换为加减;
4.数值范围用rand函数控制;
5.加减有无负数,如果有负数,(-1)^n(n为随机的0或1)乘以加减数,写入表达式,其中需要控制当被减数为负数的时候,加括号;
6.其中许多的条件需要灵活的进行控制用一些简单的思路让题目更加简单。
二.程序
#include<iostream.h>
#include<stdlib.h>
void size(int X,int Y)
{
int d,n,a,i,j,b,c1,c2,z,e,x,y,m,h,t;
cout<<" "<<"1.题目的数量:";
cin>>m;
cout<<endl;
cout<<" "<<"2.题目的列数:";
cin>>h;
cout<<endl;
cout<<" "<<"3.打印间隔:";
cin>>t;
cout<<endl;
cout<<" "<<"4.数值最大为多少:";
cin>>b;
cout<<endl;
cout<<" "<<"5.式内是否有乘除(有:1;无:非1整数):";
cin>>a;
cout<<endl;
cout<<" "<<"6.加减数有无负数(有:1;无:非1整数):";
cin>>z;
cout<<endl;
cout<<"***********"<<"以下是题目"<<"*****************"<<endl;
for(i=0;i<m;i++)
{
X=rand()%b;
Y=rand()%b;
d=rand();
e=rand();
c1=d%2;
c2=e%2;
n=d%4;
//------------------------------------有无乘除
switch(a)
{
case 0:
if(n>1)
{
n=n-2;
};break;
case 1: break;
default:cout<<"输入的乘除控制条件错误!";
}
//------------------------------------加减有无负数
switch(z)
{
case 0:break;
case 1: x=(-1)^c1*X;
y=(-1)^c2*Y;break;
default:cout<<"输入的加减控制条件错误!";
}
//----------------------------------控制括号和输出
switch(n)
{
case 0:if(z>0)
{
cout<<x<<"+"<<"("<<y<<")"<<"="<<" ";
}
else
{
cout<<X<<"+"<<Y<<"="<<" ";
};break;
case 1:if(z>0)
{
cout<<x<<"-"<<"("<<y<<")"<<"="<<" ";
}
else
{
cout<<X<<"-"<<Y<<"="<<" ";
};break;
case 2:cout<<X<<"*"<<Y<<"="<<" ";break;
case 3:cout<<X<<"/"<<Y<<"="<<" ";break;
}
//----------------------------------------控制列数,和两行间隔数
if((i+1)%h==0)
{
for(j=0;j<t;j++)
{
cout<<endl;
}
}
}
cout<<endl;
}
//--------------------------主函数
int main()
{
int a;
int b;
cout<<"***********"<<"四则运算题目定制:"<<"************"<<endl<<endl;
size(a,b);
return 0;
}
四.实验总结
开始的时候一点思路都没有,觉得这个程序非常复杂,马上对自己失去了信心。但是,听老师一直说要把程序分开了实现,将大程序分成一个一个自己能解决的。这真的是可以的,单步的思考程序的要求是可以实现的,然后将这些断断续续的要求整合起来,组成了自己不能相信的程序,很高兴。这节让我收获最大的是,学会了程序的分布思考和编写,更重要的是对自己有了信心。
五.第2 周的学习记录
学生: | 付东 | 日期: | 3月10日 | |||
教师: | 王建民 | 课程: | 软件工程 | |||
日期 | 开始时间 | 结束时间 | 中断时间 | 净时 | 活动 | 备注 |
3月10日 | 12:30 | 1:00 | 30 | 编程 | 四则修改思路 | |
3月11日 | 10:15 | 10:30 | 15 | 阅读 | 第一章 | |
3月13日 | 12:30 | 12:50 | 20 | 编程 | 四则运算正负数和换行问题 | |
9:00 | 9:40 | 40 | 编程 | 换行问题,负数加括号 | ||
3月14日 | 9:00 | 11:30 | 20 | 70 | 编程 | 编程,聊天,玩手机 |
2:00 | 3:00 | 10 | 50 | 编程 | 编程,收快递 | |
4:00 | 4:30 | 30 | 读书 | 第二三章 | ||
2 | 周活动总结表 | |||||||
姓名: | 付东 | 日期: | 3.14 | |||||
日期\任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | |||
周日 | ||||||||
周一 | ||||||||
周二 | 300 | 30 | 0 | 330 | ||||
周三 | 100 | 0 | 15 | 115 | ||||
周四 | 400 | 0 | 0 | 400 | ||||
周五 | 200 | 60 | 0 | 260 | ||||
周六 | 0 | 120 | 30 | 150 | ||||
周总计 | 1000 | 210 | 45 | 1255 | ||||
阶段时间和效率 | 周数: | 2 | ||||||
不包括上一周在内的累计时间 | ||||||||
总计 | ||||||||
平均 | ||||||||
最大 | ||||||||
最小 | ||||||||
以前各周的累计时间 | ||||||||
总计 | 1200 | 210 | 45 | 1455 | ||||
平均 | 1200 | 210 | 45 | 1455 | ||||
最大 | 1200 | 210 | 45 | 1455 | ||||
最小 | 1200 | 210 | 45 | 1455 | ||||
学生: | 付东 | |||||
日期: | 3月14日 | |||||
教员: | 王建民 | |||||
程序: | 四则运算 | |||||
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月13日 | 1 | 编码 | 编码 | 0.2min | ||
缺少头文件 | ||||||
2 | 编码 | 运行 | 3min | |||
重复使用变量i,导致无限运行 | ||||||
3月14日 | 3 | 编码 | 编译 | 1min | ||
if条件中用了“=”运算符 | ||||||
4 | 编码 | 编译 | 1min | |||
switch的case中缺少了break | ||||||
5 | 编码 | 编译 | 0.2min | |||
for的结尾再次使用i++,导致i加了两次 |