计算与软件工程 作业二

作业二

1.预习讲义第二部分

  • 软件开发流程
    软件工程包括了开发,运营,维护软件过程中有很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一
    个体系中,这就叫“软件开发流程”
  • 软件开发流程的目的
    提高软件开发,运营,维护的效率,以及用户的满意度,可靠性和软件的可维护性。
    软件开发流程不光指团队流程,是每一个人在做具体的软件开发、测试、维护等。而个人的流程组织起来就是团队的流程.
  • 所以对于个人软件工程师来说,他需要具备
  1. 一定的编程能力:对具体技术的掌握
  2. 具备对问题领域的知识和经验储备
  3. 通用的软件设计思想
  4. 职业技能,包括自我管理的能力;表达和交流的能力;与人合作的能力;把任务按质按量完成的执行能力。

2.个人程序

  • 题目:写一个能够自动生成小学四则运算题目的命令行“软件”。可以使用C,C++,C#等语言实现
  • 要求:
  • 分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度
  • 要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级
  • 对于三、四、五年级需要支持括号与多个运算符
  • 程序支持判断对错及累计得分与时间
  • 一次可以出100道题目,而且不能重复(比如2+3 与 3+2 算重复的)
  • 充分发挥想象增加满足小学生数学检测需要的功能


代码部分:

#include<cstdlib>
int kuohao[150],N=10;double x[150],y[150],z[150],result[150];char A1[150],A2[150];
char A[4]={'+','-','*','/'};
using namespace std;
/*一年级难度一支持5以内加减法,难度二支持10以内加减法,难度三支持20以内加减法;*/
void yi(int nd){
	int i,j,k,k1,k2,m,bo,xs,count=0,r;
	for(int i1=0;i1<1000;i1++){
		bo=0;xs=0;
		k1=rand()%2;k2=rand()%2;
		if(nd==1){
			i=rand()%6;j=rand()%6;k=rand()%6;
		}
		else if(nd==2){
			i=rand()%11;j=rand()%11;k=rand()%11;
		}
		else{
			i=rand()%21;j=rand()%21;k=rand()%21;
		}
		if(count<N){
			if(k1==1&&i<j){m=i;i=j;j=m;}
			for(int j1=0;j1<count;j1++){
				if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			}
			if(bo==0){
				if(k1==0){r=i+j;xs=1;}
				else{r=i-j;xs=1;}
				if(xs==1){
					x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
				}
			}
		}
		else if(count>=N&&count<100){
			for(int j1=0;j1<count;j1++){
				if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j&&A2[j1-N]==A[k2]&&z[j1-N]==k){bo=1;break;}
			}
			if(bo==0){
				if(k1==0&&k2==0){r=i+j+k;xs=1;}
				else if(k1==0&&k2==1&&i+j>=k){r=i+j-k;xs=1;}
				else if(k1==1&&k2==0&&i-j+k>=0){r=i-j+k;xs=1;}
				else if(k1==1&&k2==1&&i-j-k>=0){r=i-j-k;xs=1;}
				if(xs==1){
					x[count]=i;A1[count]=A[k1];y[count]=j;A2[count-N]=A[k2];z[count-N]=k;result[count++]=r;
				}
			}
		}
		else break;
	}
}
/*二年级难度一支持两位数加减法(100以内)和6以内乘法口诀,难度二支持两位数加减和
9以内乘法口诀,难度三支持两位数加减和10以内乘除混合运算*/
void er(int nd){
	int i,j,k,k1,k2,m,bo,xs,count=0,r;
	for(int i1=0;i1<1000;i1++){
		bo=0;xs=0;
		if(nd==1||nd==2){
			if(count<N){i=rand()%100;j=rand()%100;k1=rand()%2;}
			else if(count>=N&&count<100){
				k1=rand()%2+2;
				if(nd==1){i=rand()%5+1;j=rand()%5+1;}
				else{i=rand()%9+1;j=rand()%9+1;}
			}
			if(k1==1||k1==3){m=i;i=j;j=m;}
			for(int j1=0;j1<count;j1++){
				if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			}
			if(bo==0){
				if(k1==0&&i+j<100){r=i+j;xs=1;}
				else if(k1==1&&i>=j){r=i-j;xs=1;}
				else if(k1==2){r=i*j;xs=1;}
				else if(k1==3&&i%j==0){r=i/j;xs=1;}
				if(xs==1){
					x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
				}
			}
		}
		else{
			if(count<N){
				i=rand()%100;j=rand()%100;k1=rand()%2;
				if(k1==1&&i<j){m=i;i=j;j=m;}
				for(int j1=0;j1<count;j1++){
					if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
				}
				if(bo==0){
					if(k1==0&&i+j<100){r=i+j;xs=1;}
					else if(k1==1&&i>=j){r=i-j;xs=1;}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
					}
				}
			}
			else if(count>=N&&count<100){
				i=rand()%10;j=rand()%10;k=rand()%10;k1=rand()%2+2;k2=rand()%2+2;
				for(int j1=0;j1<count;j1++){
					if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j&&A2[j1-N]==A[k2]&&z[j1-N]==k){bo=1;break;}
				}
				if(bo==0){
					if(k1==2&&k2==2){r=i*j*k;xs=1;}
					else if(k1==2&&k2==3&&k!=0&&i*j%k==0){r=i*j/k;xs=1;}
					else if(k1==3&&k2==2&&j!=0&&k!=0&&i%j==0){r=i/j*k;xs=1;}
					else if(k1==3&&k2==3&&j!=0&&k!=0&&i%j==0&&i/j%k==0){r=i/j/k;xs=1;}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;A2[count-N]=A[k2];z[count-N]=k;result[count++]=r;
					}
				}
			}
			else break;
		}
	}
}
/*三年级难度一支持两位数加减和一位数与两位数的乘除,难度二支持三位数加减和一位数和
三位数的乘除,难度三支持三位数加减和一位数的四则运算*/
void san(int nd){
	int i,j,k,k1,k2,m,bo,xs,count=0,r;
	for(int i1=0;i1<1000;i1++){
		bo=0;xs=0;
		if(nd==1||nd==2){
			if(count<N){
				k1=rand()%2;
				if(nd==1){i=rand()%100;j=rand()%100;}
				else{i=rand()%1000;j=rand()%1000;}
			}
			else if(count>=N&&count<100){
				k1=rand()%2+2;
				if(nd==1){
					i=rand()%100;
					if(i<10)j=rand()%90+10;
					else j=rand()%9+1;
				}
				else{
					i=rand()%1000;
					if(i<10)j=rand()%900+100;
					else j=rand()%9+1;
				}
			}
			if(k1==1&&i<j){m=i;i=j;j=m;}
			for(int j1=0;j1<count;j1++)
				if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			if(bo==0){
				if(k1==0){r=i+j;xs=1;}
				else if(k1==1&&i>=j){r=i-j;xs=1;}
				else if(k1==2){r=i*j;xs=1;}
				else if(k1==3&&i%j==0){r=i/j;xs=1;}
				if(xs==1){
					x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
				}
			}
		}
		else{
			if(count<N){
				i=rand()%1000;j=rand()%1000;k1=rand()%2;
				if(k1==1&&i<j){m=i;i=j;j=m;}
				for(int j1=0;j1<count;j1++){
					if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}}
				if(bo==0){
					if(k1==0){r=i+j;xs=1;}
					else if(k1==1&&i>=j){r=i-j;xs=1;}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
					}
				}
			}
			else if(count>=N||count<100){
				int wz;
				i=rand()%10;j=rand()%10;k=rand()%10;k1=rand()%4;k2=rand()%4;wz=rand()%2+1;
				for(int j1=0;j1<count;j1++){
					if(kuohao[j1-N]==wz&&x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j&&A2[j1-N]==A[k2]&&z[j1-N]==k){bo=1;break;}
				}
				if(bo==0){
					if(wz==1){
						if(k1==0&&k2==2){r=(i+j)*k;xs=1;}
						else if(k1==0&&k2==3&&k!=0&&(i+j)%k==0){r=(i+j)/k;xs=1;}
						else if(k1==1&&k2==2&&i-j>=0){r=(i-j)*k;xs=1;}
						else if(k1==1&&k2==3&&k!=0&&i>=j&&(i-j)%k==0){r=(i-j)/k;xs=1;}
						else if(k1==2&&k2==0){r=(i*j)+k;xs=1;}
						else if(k1==2&&k2==1&&i*j-k>=0){r=(i*j)-k;xs=1;}
						else if(k1==3&&k2==0&&j!=0&&i%j==0){r=i/j+k;xs=1;}
						else if(k1==3&&k2==1&&j!=0&&i%j==0&&i/j-k>=0){r=i/j-k;xs=1;}
					}
					else{
						if(k1==0&&k2==2){r=i+j*k;xs=1;}
						else if(k1==0&&k2==4&&k!=0&&j%k==0){r=i+j/k;xs=1;}
						else if(k1==1&&k2==2&&i-j*k>=0){r=i-j*k;xs=1;}
						else if(k1==1&&k2==3&&k!=0&&j%k==0&&i-j/k==0){r=i-j/k;xs=1;}
						else if(k1==2&&k2==0){r=i*(j+k);xs=1;}
						else if(k1==2&&k2==1&&j-k>=0){r=i*(j-k);xs=1;}
						else if(k1==3&&k2==0&&(j+k)!=0&&i%(j+k)==0){r=i/(j+k);xs=1;}
						else if(k1==3&&k2==1&&j-k>0&&i%(j-k)==0){r=i/(j-k);xs=1;}
					}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;A2[count-N]=A[k2];z[count-N]=k;kuohao[count-N]=wz;result[count++]=r;
					}
				}
			}
		}
		if(count==100)break;
	}
}
/*四年级难度一支持10以内小数加减法和两位数乘除(不全整除),难度二支持100以内小数加减
和两位数四则运算,难度三支持两位数与三位数乘除和千以内四则运算*/
void si(int nd){
	int k,k1,k2,bo,xs,wz,count=0;
	for(int i1=0;i1<1000;i1++){
		bo=0;xs=0;
		if(nd==1){
			double r;double i,j;
			if(count<N){
				i=(rand()%900+100)/(double)100;j=(rand()%900+100)/(double)100;k1=rand()%2;
			}
			else{
				i=(double)(rand()%90+10);j=(double)(rand()%90+10);k1=rand()%2+2;
			}
			for(int j1=0;j1<count;j1++)if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			if(bo==0&&count<100){
				if(count<N&&k1==0){r=i+j;xs=1;}
				else if(count<N&&k1==1&&i>=j){r=i-j;xs=1;}
				else if(count>=N&&k1==2){r=i*j;xs=1;}
				else if(count>=N&&k1==3&&i/j*1000-(int)(i/j*100)*10==0){r=i/j;xs=1;}
				if(xs==1){
					x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
				}
			}
		}
		else if(nd==2){
			double r;double i,j;
			if(count<N){
				if(nd==2){
					i=(rand()%10000)/(double)100;j=(rand()%10000)/(double)100;k1=rand()%2;
					for(int j1=0;j1<count;j1++)if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			        if(bo==0){
					    if(k1==0){r=i+j;xs=1;}
					    else if(k1==1&&i>=j){r=i-j;xs=1;}
					    if(xs==1){
						    x[count]=i;y[count]=j;A1[count]=A[k1];result[count++]=r;
					    }
				    }
				}
				else{
					i=rand()%990+10;k1=rand()%2+2;
					if(i<100){j=rand()%900+100;}
					else{ j=rand()%90+10;}
					for(int j1=0;j1<count;j1++)if(x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j||(x[j1]==j&&A1[j1]==A[k1]&&y[j1]==i)){bo=1;break;}
			        if(bo==0){
						if(k1==2){r=i*j;xs=1;}
						else if(k1==3&&i/j*1000-(int)(i/j*100)*10==0){r=i/j;xs=1;}
						if(xs==1){
							x[count]=i;A1[count]=A[k1];y[count]=j;result[count++]=r;
						}
					}
				}
			}
			else{
				if(nd==2){i=(double)(rand()%90+10);j=(double)(rand()%90+10);k=(double)(rand()%90+10);}
				else{i=(double)(rand()%990+10);j=(double)(rand()%990+10);k=(double)(rand()%990+10);}
				k1=rand()%4;k2=rand()%4;wz=rand()%2+1;
				for(int j1=0;j1<count;j1++){
					if(kuohao[j1-N]==wz&&x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j&&A2[j1-N]==A[k2]&&z[j1-N]==k){bo=1;break;}
				}
				if(bo==0){
					if(wz==1){
						if(k1==0&&k2==2){r=(i+j)*k;xs=1;}
						else if(k1==0&&k2==3){r=(i+j)/k;xs=1;}
						else if(k1==1&&k2==2&&i-j>=0){r=(i-j)*k;xs=1;}
						else if(k1==1&&k2==3&&i>=j){r=(i-j)/k;xs=1;}
						else if(k1==2&&k2==0){r=(i*j)+k;xs=1;}
						else if(k1==2&&k2==1&&i*j-k>=0){r=(i*j)-k;xs=1;}
						else if(k1==3&&k2==0){r=i/j+k;xs=1;}
						else if(k1==3&&k2==1&&i/j-k>=0){r=i/j-k;xs=1;}
					}
					else{
						if(k1==0&&k2==2){r=i+j*k;xs=1;}
						else if(k1==0&&k2==4){r=i+j/k;xs=1;}
						else if(k1==1&&k2==2&&i-j*k>=0){r=i-j*k;xs=1;}
						else if(k1==1&&k2==3&&i-j/k>=0){r=i-j/k;xs=1;}
						else if(k1==2&&k2==0){r=i*(j+k);xs=1;}
						else if(k1==2&&k2==1&&j-k>=0){r=i*(j-k);xs=1;}
						else if(k1==3&&k2==0){r=i/(j+k);xs=1;}
						else if(k1==3&&k2==1&&j-k>0){r=i/(j-k);xs=1;}
					}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;A2[count-N]=A[k2];z[count-N]=k;kuohao[count-N]=wz;result[count++]=r;
					}
				}
			}
		}
		if(count==100)break;
	}
}
/*五年级难度一支持10以内小数乘法及四则运算,难度二支持10以内和20以内小数除法(保留整数),
难度二支持10以内和20以内小数除法(保留两位数)*/
void wu(int nd){
	int k1,k2,m,bo,xs,count=0,r,wz;
	for(int i1=0;i1<1000;i1++){
		double i,j,k;
		bo=0;xs=0;
		if(nd==1){
			if(count<N){
				i=(rand()%900+100)/(double)100;j=(rand()%900+100)/(double)100;
				for(int j1=0;j1<count;j1++)if(x[j1]==i&&y[j1]==j||(x[j1]==j&&y[j1]==i)){bo=1;break;}
				if(bo==0){
					x[count]=i;y[count]=j;result[count++]=i*j;
				}
			}
			else{
				i=(rand()%900+100)/(double)100;j=(rand()%900+100)/(double)100;k=(rand()%900+100)/(double)100;
				wz=rand()%2+1;k1=rand()%4;k2=rand()%4;
				for(int j1=0;j1<count;j1++){
					if(kuohao[j1-N]==wz&&x[j1]==i&&A1[j1]==A[k1]&&y[j1]==j&&A2[j1-N]==A[k2]&&z[j1-N]==k){bo=1;break;}
				}
				if(bo==0){
					if(wz==1){
						if(k1==0&&k2==2){r=(i+j)*k;xs=1;}
						else if(k1==0&&k2==3){r=(i+j)/k;xs=1;}
						else if(k1==1&&k2==2&&i-j>=0){r=(i-j)*k;xs=1;}
						else if(k1==1&&k2==3&&i>=j){r=(i-j)/k;xs=1;}
						else if(k1==2&&k2==0){r=(i*j)+k;xs=1;}
						else if(k1==2&&k2==1&&i*j-k>=0){r=(i*j)-k;xs=1;}
						else if(k1==3&&k2==0){r=i/j+k;xs=1;}
						else if(k1==3&&k2==1&&i/j-k>=0){r=i/j-k;xs=1;}
					}
					else{
						if(k1==0&&k2==2){r=i+j*k;xs=1;}
						else if(k1==0&&k2==4){r=i+j/k;xs=1;}
						else if(k1==1&&k2==2&&i-j*k>=0){r=i-j*k;xs=1;}
						else if(k1==1&&k2==3&&i-j/k>=0){r=i-j/k;xs=1;}
						else if(k1==2&&k2==0){r=i*(j+k);xs=1;}
						else if(k1==2&&k2==1&&j-k>=0){r=i*(j-k);xs=1;}
						else if(k1==3&&k2==0){r=i/(j+k);xs=1;}
						else if(k1==3&&k2==1&&j-k>0){r=i/(j-k);xs=1;}
					}
					if(xs==1){
						x[count]=i;A1[count]=A[k1];y[count]=j;A2[count-N]=A[k2];z[count-N]=k;kuohao[count-N]=wz;result[count++]=r;
					}
				}
			}
		}
		else{
			if(nd==2&&count<N){i=(rand()%1000)/(double)100;j=(rand()%1000)/(double)100;}
			else if(nd==2&&count>=N){i=(rand()%2000)/(double)100;j=(rand()%900+100)/(double)100;}
			else if(nd==3&&count<N){i=(rand()%1000)/(double)100;j=(rand()%1000)/(double)100;}
			else if(nd==3&&count>=N){i=(rand()%2000)/(double)100;j=(rand()%900+100)/(double)100;}
			for(int j1=0;j1<count;j1++)if(x[j1]==i&&y[j1]==j||(x[j1]==j&&y[j1]==i)){bo=1;break;}
			if(bo==0){
				if(nd==2){
					if(count<N)r=(int)(i/j);
					else r=((int)(i/j*100))/(double)100;
					xs=1;
				}
				else{
					if(count<N)r=(int)(i/j);
					else r=((int)(i/j*100))/(double)100;
					xs==1;
				}
				if(xs==1){x[count]=i;y[count]=j;result[count++]=r;}
			}
		}
	if(count==100)break;
	}
}
void show(int grade,int nd){
	int error[100],count=0;double js;
	cout<<"计算开始:
";
	if(grade==1){
		for(int i=0;i<100;i++){
			if(i<N){
				cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<"=";cin>>js;
				if(js!=result[i])error[count++]=i;
			}
			else{
				cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<A2[i-N]<<z[i-N]<<"=";cin>>js;
				if(js!=result[i])error[count++]=i;
			}
		}
	}
	else if(grade==2||grade==3){
		if(nd==1||nd==2){
			for(int i=0;i<100;i++){
				cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<"=";cin>>js;
				if(js!=result[i])error[count++]=i;
			}
		}
		else{
			for(int i=0;i<100;i++){
				if(i<N){
					cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<"=";cin>>js;
					if(js!=result[i])error[count++]=i;
				}
				else if(i>=N&&i<100){
				    if(grade!=2){
					    if(kuohao[i-N]==1)cout<<i+1<<"、("<<x[i]<<A1[i]<<y[i]<<")"<<A2[i-N]<<z[i-N]<<"=";
						else cout<<i+1<<"、"<<x[i]<<A1[i]<<"("<<y[i]<<A2[i-N]<<z[i-N]<<")=";
					}
					else cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<A2[i-N]<<z[i-N]<<"=";
					cin>>js;
					if(js!=result[i])error[count++]=i+1;
				}
			}
		}
	}
	else if(grade==4){
		if(nd==1){
			for(int i=0;i<100;i++){
				cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<"=";cin>>js;
				if(result[i]!=js)error[count++]=i;
			}
		}
		else{
			for(int i=0;i<100;i++){
				if(i<N){
					cout<<i+1<<"、"<<x[i]<<A1[i]<<y[i]<<"=";
				}
				else{
					if(kuohao[i-N]==1)cout<<i+1<<"、("<<x[i]<<A1[i]<<y[i]<<")"<<A2[i-N]<<z[i-N]<<"=";
					else cout<<i+1<<"、"<<x[i]<<A1[i]<<"("<<y[i]<<A2[i-N]<<z[i-N]<<")=";
				}
				cin>>js;
				if(js!=result[i])error[count++]=i;
			}
		}
	}
	else{
		if(nd==1){
			for(int i=0;i<100;i++){
				if(i<N){
					cout<<i+1<<"、"<<x[i]<<"*"<<y[i]<<"=";
				}
				else{
					if(kuohao[i-N]==1)cout<<i+1<<"、("<<x[i]<<A1[i]<<y[i]<<")"<<A2[i-N]<<z[i-N]<<"=";
					else cout<<i+1<<"、"<<x[i]<<A1[i]<<"("<<y[i]<<A2[i-N]<<z[i-N]<<")=";
				}
				cin>>js;
				if(js!=result[i])error[count++]=i;
			}
		}
		else{
			for(int i=0;i<100;i++){
				cout<<i+1<<"、"<<x[i]<<"/"<<y[i]<<"=";cin>>js;
				if(result[i]!=js)error[count++]=i;
			}
		}
	}
	cout<<"共"<<100-count<<"分,其中,第";
	for(int i=0;i<count;i++)cout<<error[i]<<"、";cout<<"有误!";
}
void main(){
	int grade=0,nd=0;
	//start(grade,nd);
	cout<<"选择年级:
"<<"1、一年级
"<<"2、二年级
"<<"3、三年级
"<<"4、四年级
"<<"5、五年级
";
	cin>>grade;
	cout<<"请选择难度:
"<<"1、难度一
"<<"2、难度二
"<<"3、难度三
";
	cin>>nd;
	if(grade==1){yi(nd);}
	else if(grade==2){er(nd);}
	else if(grade==3){san(nd);}
	else if(grade==4){si(nd);}
	else if(grade==5){wu(nd);}
	show(grade,nd);
	system("pause");
} 

作业二

  • 根据讲义给的链接进官网下载安装git时,下载速度贼慢,后下载了迅雷,解决了下载git的问题。

作业一的代码链接如下
四则运算

原文地址:https://www.cnblogs.com/xinxiyujisuan/p/12400454.html