计算与软件工程作业二
计算与软件工程作业二
一、作业要求
作业一
1.预习 阅读讲义<https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html >第二部分内容 2.个人开发技术
2.个人程序(本作业内容来源于网址:https://www.cnblogs.com/xinz/p/7417960.html,与 <https://www.cnblogs.com/jiel/p/4810756.html >)像《构建之法》的 人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。 可以使用C,C++,或者C#等语言实现。
- 分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度
- 要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级
- 对于三、四、五年级需要支持括号与多个运算符
- 程序支持判断对错及累计得分与时间
- 一次可以出100道题目,而且不能重复(比如2+3 与 3+2 算重复的)
- 充分发挥想象增加满足小学生数学检测需要的功能
作业二
-
git学习与码云代码托管平台gitee阅读网址如下关于git的使用https://www.liaoxuefeng.com/wiki/896043488029600或https://gitee.com/help/categories/43通过之前已经注册的码云账号,学会简单的使用将作业1所写代码托管到gitee平台上个人仓库
-
在博客园给出作业并包括所写的代码,同时给出托管于gitee上的链接
具体链接https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10402
二、代码
#include <iostream>
using namespace std;
class Calcution{
public:
Calcution();
char getSignal();
void addsub(int n);
void muldiv(int n);
void decial(int n);
void fraction(int n);
void mixed(int n);
void Gradeone(int n);
void Gradetwo(int n);
void Gradethree(int n);
void Gradefour(int n);
void Gradefive(int n);
private:
int n;
};
Calcution::Calcution():n(0){};
//随机获得运算符
char Calcution::getSignal(){
char signal[]={'+','-','*','/'};
srand((unsigned)time(NULL));
return signal[rand()%4];
}
//整数加减
void Calcution::addsub(int n){
int a,b,c;
a=rand()%n+1;
b=rand()%n+1;
if(a+b>=n){
a=rand()%n+1;
b=rand()%n+1;
}
c=rand()%2;
switch(c){
case(0):
cout<<a<<"+"<<b<<"="<<endl;break;
case(1):
if(a<b){
int tmp=0;
tmp=a;
a=b;
b=tmp;
cout<<a<<"-"<<b<<"="<<endl;break;
}
}
}
//整数乘除
void Calcution::muldiv(int n){
int a,b,c;
a=rand()%n+1;
b=rand()%n+1;
if(a*b>=n){
a=rand()%n+1;
b=rand()%n+1;
}
c=rand()%2;
switch(c){
case(0):
cout<<a<<"*"<<b<<"="<<endl;break;
case(1):
if(b==0){
b=rand()%n;
}
cout<<a<<"÷"<<b<<"="<<endl;break;
}
}
//小数加减乘除
void Calcution::decial(int n){
double a,b;
a=(double)(rand()%n+1)/1000;
b=(double)(rand()%n+1)/1000;
cout<<a<<getSignal()<<b<<"="<<endl;
}
//分数加减乘除
void Calcution::fraction(int n){
int mole1,deno1,mole2,deno2;
mole1=rand()%10;
deno1=rand()%10+1;
mole2=rand()%10;
deno2=rand()%10+1;
//a=rand()%4;
while(mole1>deno1 || mole2>deno2){
mole1=rand()%10;
deno1=rand()%10;
mole2=rand()%10;
deno2=rand()%10;
}
cout<<mole1<<"/"<<deno1<<getSignal()<<mole2<<"/"<<deno2<<"="<<endl;
}
void Calcution::mixed(int n){
int a,b,c,d;
a=rand()%n+1;
b=rand()%n+1;
c=rand()%n+1;
d=rand()%2;
if(d==0)
cout<<"("<<a<<getSignal()<<b<<")"<<getSignal()<<c<<"="<<endl;
if(d==1)
cout<<a<<getSignal()<<"("<<b<<getSignal()<<c<<")"<<"="<<endl;
}
//一年级加减法,难中易分别对应100,50,10以内的运算
void Calcution::Gradeone(int n){
for(int i=0;i<100;i++){
addsub(n);
}
}
//二年级在一年级的基础上加入乘除法,难中易分别对应100,50,10以内的运算
void Calcution::Gradetwo(int n){
for(int i=0;i<100;i++){
int a=rand()%3;
if(a==0)
addsub(n);
if(a==1 || a==2)
muldiv(n);
}
}
//三年级在一二年级的基础上加入分数,难中易分别对应100,50,10以内的运算
void Calcution::Gradethree(int n){
for(int i=0;i<100;i++){
int a=rand()%4;
if(a==0)
addsub(n);
if(a==1)
muldiv(n);
if(a==2 || a==3)
fraction(n);
}
}
//四年级在一二三年级基础上加入分数计算,难中易分别对应100,50,10以内的运算
void Calcution::Gradefour(int n){
for(int i=0;i<100;i++){
int a=rand()%5;
if(a==0)
addsub(n);
if(a==1)
muldiv(n);
if(a==2)
fraction(n);
if(a==3 || a==4)
decial(n);
}
}
//五年级在一二三四年级基础上加入混合运算,难中易分别对应100,50,10以内的运算
void Calcution::Gradefive(int n){
for(int i=0;i<100;i++){
int a=rand()%6;
if(a==0)
addsub(n);
if(a==1)
muldiv(n);
if(a==2)
decial(n);
if(a==3)
fraction(n);
if(a==4 || a==5)
mixed(n);
}
}
int main(){
Calcution cal;
int a;
cout<<"请输入年级:1~5年级 (输入对应的年级数即可)"<<endl;
cin>>a;
switch(a){
case(1):
int o;
cout<<"请选择难度: 1、易 2、中 3、难 (输入前面数字)"<<endl;
cin>>o;
if(o==1)
cal.Gradeone(10);
if(o==2)
cal.Gradeone(50);
if(o==3)
cal.Gradeone(100);
break;
case(2):
int t;
cout<<"请选择难度: 1、易 2、中 3、难(输入前面数字)"<<endl;
cin>>t;
if(t==1)
cal.Gradetwo(10);
if(t==2)
cal.Gradetwo(50);
if(t==3)
cal.Gradetwo(100);
break;
case(3):
int h;
cout<<"请选择难度: 1、易 2、中 3、难(输入前面数字)"<<endl;
cin>>h;
if(h==1)
cal.Gradethree(10);
if(h==2)
cal.Gradethree(50);
if(h==3)
cal.Gradethree(100);
break;
case(4):
int f;
cout<<"请选择难度: 1、易 2、中 3、难(输入前面数字)"<<endl;
cin>>f;
if(f==1)
cal.Gradefour(10);
if(f==2)
cal.Gradefour(50);
if(f==3)
cal.Gradefour(100);
break;
case(5):
int v;
cout<<"请选择难度: 1、易 2、中 3、难(输入前面数字)"<<endl;
cin>>v;
if(v==1)
cal.Gradefive(10);
if(v==2)
cal.Gradefive(50);
if(v==3)
cal.Gradefive(100);
break;
}
return 0;
}
总结:程序中括号混合运算等都是简单的直接输出,缺少判重以及答案,数据结构知识正在重新学习中……