随机生成四则运算式2
- 题目避免重复
- 可定制(数量/打印方式)
- 可以控制下列参数
- 是否有乘除法
- 是否有括号(最多可以支持十个数参与运算)
- 数值范围
- 加减有无负数
- 除法有无余数
- 设计思路:这次我用了很多子函数,比如操作数和算符以及结果的输出,这样来说方便了许多。
#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
srand((int)time(NULL));
void peizhi(bool&p1, bool&p2, bool&p3, bool&p4);
int sfys1();//生成算符余数函数(有乘除)
int sfys2();//生成算符余数函数(无乘除)
int czs();//生成操作数
char suanfu1(int sfys1);//根据算符余数,给出算符的函数(有乘除)
char suanfu2(int sfys2);//根据算符余数,给出算符的函数(无乘除)
void kuohao1();//无乘除的括号
void kuohao2();//有乘除的括号
void sc1();//输出类型1,无乘除法
void sc2();//输出类型2,有乘除法
void sc3();//输出类型3,加减无负数
void sc4();//输出类型4,除法无余数bool pz1, pz2, pz3, pz4;
peizhi(pz1, pz2, pz3, pz4);
//无乘除法无括号加减有负数的表达式
if (pz1==0&&pz2==0&&pz3==1)
{
for (int i = 0; i < 30; i++)
{
sc1();
}
}//无乘除法无括号加减无负数的表达式
else if (pz1==0&&pz2==0&&pz3==0)
{
for (int i = 0; i < 30; i++)
{
sc3();
}
}//无乘除法有括号加减有负数的表达式
else if (pz1 == 0 && pz2 == 1&&pz3==1)
{
int bianhuan1;
bianhuan1= (int)(rand() * 2) / RAND_MAX;
for (int i = 0; i < 30; i++)
{
bianhuan1 = (int)(rand() * 2) / RAND_MAX;
if (bianhuan1 == 0)
{
sc1();
}
else
{
kuohao1();
}
}
}//无乘除法有括号加减无负数的表达式
else if (pz1 == 0&& pz2 == 1&&pz3==0)
{
int bianhuan1;
bianhuan1 = (int)(rand() * 2) / RAND_MAX;
for (int i = 0; i < 30; i++)
{
bianhuan1 = (int)(rand() * 2) / RAND_MAX;
if (bianhuan1 == 0)
{
sc3();
}
else
{
kuohao1();
}
}
}//有乘除法无括号有负数有余数
else if (pz1 == 1 && pz2 == 0 && pz3 == 1 && pz4 == 1)
{
for (int i = 0; i < 30; i++)
{
sc2();
}
}//有乘除法无括号无负数有余数
else if (pz1 == 1 && pz2 == 0 && pz3 == 0 && pz4 == 1)
{
for (int i = 0; i < 30; i++)
{sc3();
}
}//有乘除法无括号无负数无余数
else if (pz1 == 1&& pz2 == 0 && pz3 == 0 && pz4 == 0)
{
for (int i = 0; i < 30; i++)
{sc4();
}
}
//有乘除法有括号无负数无余数
else if (pz1 == 1&& pz2 == 1 && pz3 == 0 && pz4 == 0)
{
int bianhuan1;
bianhuan1 = (int)(rand() * 2) / RAND_MAX;
for (int i = 0; i < 30; i++)
{
bianhuan1 = (int)(rand() * 2) / RAND_MAX;
if (bianhuan1 == 0)
{
sc4();
}
else
{
kuohao2();
}
}
}
}
void peizhi(bool&p1, bool&p2, bool&p3, bool&p4)
{
cout << "请选择设置:0/1"<<endl;
cout << "是否有乘除法?" << endl;
cin >> p1;
cout << endl;
cout << "是否有括号(最多可以支持十个数参与运算)" << endl;
cin >> p2;
cout << endl;
cout << "加减有无负数" << endl;
cin >> p3;
cout << endl;
cout << "除法有无负数" << endl;
cin >> p4;
cout << endl;}
//根据算符余数,给出算符的函数(有乘除)
char suanfu1(int sfys1)
{switch (sfys1)
{
default:
break;
case 0:
return '+'; break;
case 1:
return '-'; break;
case 2:
return'*'; break;
case 3:
return'/'; break;
}
}//生成算符余数函数(有乘除)
int sfys1()
{
int suanfuNum;
suanfuNum = (rand() * 100) / RAND_MAX;
int suanfu = suanfuNum % 4;
return suanfu;
}//根据算符余数,给出算符的函数(无乘除)
char suanfu2(int sfys2)
{switch (sfys2)
{
default:
break;
case 0:
return '+'; break;
case 1:
return '-'; break;
}
}//生成算符余数函数(无乘除)
int sfys2()
{
int suanfuNum;
suanfuNum = (rand() * 100) / RAND_MAX;
int suanfu = suanfuNum % 2;
return suanfu;
}//生成操作数
int czs()
{
int czsNum;
czsNum = (rand() * 100) / RAND_MAX;
return czsNum;
}//生成括号运算式(无乘除)
void kuohao1()
{
cout << '(' << czs() << suanfu2(sfys2()) << czs() << ')' << suanfu2(sfys2()) << czs()<<"="<<endl;
}//生成括号运算式(有乘除)
void kuohao2()
{
cout << '(' << czs() << suanfu1(sfys1()) << czs() << ')' << suanfu1(sfys1()) << czs()<<"=" << endl;
}//输出类型1
void sc1()
{
cout << czs() << suanfu2(sfys2()) << czs() << "="<<endl;
}//输出类型2
void sc2()
{
int opNum1 = czs(), opNum2 = czs();
char op = suanfu1(sfys1());
if (op == '/')
{
while (opNum2== 0)
{
opNum1 = czs();
opNum2 = czs();
}
cout << opNum1 << op << opNum2 << "=" << endl;
}
else
{
cout << opNum1 << op << opNum2 << "=" << endl;
}
}//输出类型3,加减无负数
void sc3()
{
int opNum1 = czs(), opNum2 = czs();
char op = suanfu2(sfys2());
if (op == '-')
{
while (opNum1 - opNum2 < 0)
{
opNum1 = czs();
opNum2 = czs();
}
cout << opNum1 << op << opNum2 << "=" << endl;
}
else
{
cout << opNum1 << op << opNum2 << "=" << endl;
}
}//输出类型4,除法无余数
void sc4()
{
int opNum1 = czs(), opNum2 = czs();
char op = suanfu1(sfys1());
if (op == '-')
{
while (opNum1 - opNum2 < 0)
{
opNum1 = czs();
opNum2 = czs();
}
cout << opNum1 << op << opNum2 << "=" << endl;
}
else if (op == '/')
{
while (opNum1%opNum2 != 0||opNum2==0)
{
opNum1 = czs();
opNum2 = czs();
}
cout << opNum1 << op << opNum2 << "=" << endl;
}
else
{
cout << opNum1 << op << opNum2 << "=" << endl;
}
} -
总结:这次的实验对于我来说真的是很有难度,自己也花了很长时间,但还是对自己不满意,对于编程中的一些东西我还是要认真再学习。
项目计划总结:
日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料 日总计 周一 2 1 2 2 5 周二 3 1 4 周三 周四 2 2 周五 5 1 1 周六 2 2 周日 2 周总计 4 14 7 4 6 时间记录日志:
日期 开始时间 结束时间 中断时间 净时间 活动 备注 3/7 14:00 15:50 10 100 听课 软件工程上课 16:00 18:20 140 编写程序 编写老师布置的作业 19:00 21:00 10 110 阅读书籍 《构建之法》 21:00 24:00 20 160 网上查找资料,编程 作业2,讨论问题 3/8 16:00 18:00 10 110 查资料,编写程序 作业2 21:00 21:50 50 阅读书籍 《构建之法》 3/9 3/10 14:00 15:50 10 100 听课 软件工程上课 19:00 21:20 20 100 查资料,编写程序 休息,聊天,作业2 3/11 8:00 10:05 5 120 写博客 发表本周博客 16:10 18:30 10 140 修改程序,写博客 测试程序,发表博客 19:00 19:40 40 阅读书籍 《构建之法》 19:45 21:45 10 110 写博客,修改程序 休息,聊天,发表博客 3/12 9:00 9:30 30 阅读书籍 计划阅读《构建之法》 3/13 19:00 19:30 30 阅读书籍 缺陷记录日志:
还有一些功能没有实现,还是自己水平不够。