软件工程个人作业03
设计思路:(1)直接输出整数加减乘除的答案。然后取余余数用括号括起来。
(2)分数先通分(将分母相乘通分),最后答案找分子分母的最小公约数来约分。
程序源代码:
#include<iostream> #include<stdlib.h> #include<conio.h> using namespace std; void DealAddAndSubtract1(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*无负数*/ { for(int p=0;p<m;p++) { int x,y; int a=(int)rand()%n; int b=(int)rand()%n; if(b>a) { int c; c=b; b=a; a=c; } int i=(int)rand()%n; int j=(int)rand()%n; for(;;) { if(i<=j&&j!=0) break; i=(int)rand()%n; j=(int)rand()%n; } int c=(int)rand()%n; int d=(int)rand()%n; for(;;) { if(c<=d&&d!=0) break; c=(int)rand()%n; d=(int)rand()%n; } if(c*j<d*i) { int e,f; e=i; i=c; c=e; f=j; j=d; d=f; } for(x=d*j;x>=1;x--) { if((c*j-d*i)%x==0&&d*j%x==0) break; } for(y=d*j;y>=1;y--) { if((c*j+d*i)%y==0&&d*j%y==0) break; } int k=(int)rand()%4; switch(k) { case 0: { cout<<a<<"+"<<b<<"="<<a+b; break; } case 1: { cout<<a<<"-"<<b<<"="<<a-b; break; } case 2: { cout<<"("<<c<<"/"<<d<<")"<<"+"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j+i*d)/y<<"/"<<(d*j)/y; break; } case 3: { cout<<"("<<c<<"/"<<d<<")"<<"-"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j-i*d)/x<<"/"<<(d*j)/x; break; } } if (p%3==2) { cout<<endl; } else { cout<<'\t'; } } } void DealAddAndSubtract2(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*有负数*/ { for(int p=0;p<m;p++) { int x,y; int a=(int)rand()%n; int b=(int)rand()%n; int i=(int)rand()%n; int j=(int)rand()%n; for(;;) { if(i<=j&&j!=0) break; i=(int)rand()%n; j=(int)rand()%n; } int c=(int)rand()%n; int d=(int)rand()%n; for(;;) { if(c<=d&&d!=0) break; c=(int)rand()%n; d=(int)rand()%n; } for(x=d*j;x>=1;x--) { if((c*j-d*i)%x==0&&d*j%x==0) break; } for(y=d*j;y>=1;y--) { if((c*j+d*i)%y==0&&d*j%y==0) break; } int k=(int)rand()%4; switch(k) { case 0: { cout<<a<<"+"<<b<<"="<<a+b; break; } case 1: { cout<<a<<"-"<<b<<"="<<a-b; break; } case 2: { cout<<"("<<c<<"/"<<d<<")"<<"+"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j+i*d)/y<<"/"<<(d*j)/y; break; } case 3: { cout<<"("<<c<<"/"<<d<<")"<<"-"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j-i*d)/x<<"/"<<(d*j)/x; break; } } if (p%3==2) { cout<<endl; } else { cout<<'\t'; } } } void DealMultiplicationAndDivison1(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*无余数*/ { for(int p=0;p<m;p++) { int x,y; int a=(int)rand()%n; int b=(int)rand()%n; for(;;) { if(b!=0&&a>b&&a%b==0) break; a=(int)rand()%n; b=(int)rand()%n; } int i=(int)rand()%n; int j=(int)rand()%n; for(;;) { if(i<=j&&j!=0&&i!=0) break; i=(int)rand()%n; j=(int)rand()%n; } int c=(int)rand()%n; int d=(int)rand()%n; for(;;) { if(c<=d&&d!=0&&c!=0) break; c=(int)rand()%n; d=(int)rand()%n; } for(x=d*j;x>=1;x--) { if(c*i%x==0&&d*j%x==0) break; } for(y=d*j;y>=1;y--) { if(c*j%y==0&&d*i%y==0) break; } int k=(int)rand()%4; switch(k) { case 0: { cout<<a<<"*"<<b<<"="<<a*b; break; } case 1: { cout<<a<<"/"<<b<<"="<<a/b; break; } case 2: { cout<<"("<<c<<"/"<<d<<")"<<"*"<<"("<<i<<"/"<<j<<")"<<"="<<c*i/x<<"/"<<d*j/x; break; } case 3: { cout<<"("<<c<<"/"<<d<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"="<<c*j/y<<"/"<<d*i/y; break; } } if (p%5==4) { cout<<endl; } else { cout<<'\t'; } } } void DealMultiplicationAndDivison2(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*有余数*/ { for(int p=0;p<m;p++) { int x,y; int a=(int)rand()%n; int b=(int)rand()%n; for(;;) { if(b!=0) break; b=(int)rand()%n; } int i=(int)rand()%n; int j=(int)rand()%n; for(;;) { if(i<=j&&j!=0&&i!=0) break; i=(int)rand()%n; j=(int)rand()%n; } int c=(int)rand()%n; int d=(int)rand()%n; for(;;) { if(c<=d&&d!=0&&c!=0) break; c=(int)rand()%n; d=(int)rand()%n; } for(x=d*j;x>=1;x--) { if(c*i%x==0&&d*j%x==0) break; } for(y=d*j;y>=1;y--) { if(c*j%y==0&&d*i%y==0) break; } int k=(int)rand()%4; switch(k) { case 0: { cout<<a<<"*"<<b<<"="<<a*b; break; } case 1: { cout<<a<<"/"<<b<<"="<<a/b<<"("<<a%b<<")"<<'\t'; } case 2: { cout<<"("<<c<<"/"<<d<<")"<<"*"<<"("<<i<<"/"<<j<<")"<<"="<<c*i/x<<"/"<<d*j/x; break; } case 3: { cout<<"("<<c<<"/"<<d<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"="<<c*j/x<<"/"<<d*i/x; break; } } if (p%5==4) { cout<<endl; } else { cout<<'\t'; } } } void main() { int b[1000]; int a[1000][2]; int z; p:cout<<"请输入选项:"<<endl<<"1.无乘除,无负数."<<endl<<"2.无乘除,有负数."<<endl<<"3.有乘除,无余数,无负数."<<endl<<"4.有乘除,有余数,无负数."<<endl<<"5.有乘除,无余数,有负数."<<endl <<"6.有乘除,有余数,有负数."<<endl; cin>>z; if(z==1)/*无乘除,无余数*/ { int m,n,x; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; DealAddAndSubtract1(n/*取值*/, m/*题数*/,a,b); int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else if(z==2)/*无乘除,无负数*/ { int m,n; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; DealAddAndSubtract2(n/*取值*/, m/*题数*/,a,b); int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else if(z==3)/*有乘除,无余数,无负数*/ { int m,n; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; for(int i=0;i<m;i++) { int k=(int)rand()%2; switch(k) { case 0: { DealMultiplicationAndDivison1(n/*取值*/,1/*题数*/,a,b); break; } case 1: { DealAddAndSubtract1(n/*取值*/, 1/*题数*/,a,b); break; } } if (i%3==2) { cout<<endl; } else { cout<<'\t'; } } int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else if(z==4)/*有乘除,有余数,无负数*/ { int m,n; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; for(int i=0;i<m;i++) { int k=(int)rand()%2; switch(k) { case 0: { DealMultiplicationAndDivison2(n/*取值*/,1/*题数*/,a,b); break; } case 1: { DealAddAndSubtract1(n/*取值*/, 1/*题数*/,a,b); break; } } if (i%3==2) { cout<<endl; } else { cout<<'\t'; } } int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else if(z==5)/*有乘除,无余数,有负数*/ { int m,n; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; for(int i=0;i<m;i++) { int k=(int)rand()%2; switch(k) { case 0: { DealMultiplicationAndDivison1(n/*取值*/,1/*题数*/,a,b); break; } case 1: { DealAddAndSubtract2(n/*取值*/, 1/*题数*/,a,b); break; } } if (i%3==2) { cout<<endl; } else { cout<<'\t'; } } int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else if(z==6)/*有乘除,有余数,有负数*/ { int m,n; cout<<"请输入随机数的范围:"<<endl; cin>>n; cout<<"请输入题目的个数:"<<endl; cin>>m; for(int i=0;i<m;i++) { int k=(int)rand()%2; switch(k) { case 0: { DealMultiplicationAndDivison2(n/*取值*/,1/*题数*/,a,b); break; } case 1: { DealAddAndSubtract2(n/*取值*/, 1/*题数*/,a,b); break; } } if (i%3==2) { cout<<endl; } else { cout<<'\t'; } } int j; cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl; cin>>j; if(j==1) { goto p; } else { exit(1); } } else { cout<<"输入有误!,请重新选择."<<endl; goto p; } }
截图:
周活动总结表姓名:杨国力 日期:26/3/2016
日期/任务 | 听课 | 编程 | 阅读课本 | 准备考试 | 日总计 | ||
周日 | 0 | 0 | 0 | 0 | 0 | ||
周一 | 120 | 60 | 30 | 0 | 210 | ||
周二 | 0 | 60 | 30 | 0 | 90 | ||
周三 | 0 |
60 |
0 | 0 | 60 | ||
周四 | 0 | 0 | 0 | 0 | 0 | ||
周五 | 0 | 0 | 0 | 0 | 0 | ||
周六 | 0 | 60 | 0 | 0 | 60 | ||
周总计 | 120 | 240 | 60 | 0 |
420 |
缺陷记录日志
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.26 | 01 | 20 | 编码(没有排除分母不为0) | 编译 | 3min | |
02 | 20 | 编码(漏掉分号) | 编译 | 1min | ||
03 | 20 | 编码(int类型与float类型混淆) | 编译 | 3min | ||
学生:杨国力 日期:2016.3.26教师:王建明 课程:软件工程概论
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 | C | U |
3.14 | 8:00 | 9:50 | 10 | 100 | 听课 | 休息 | ||
15:00 | 15:30 | 0 | 30 | 阅读 | ||||
3.15 | 15:00 | 16:25 | 25 | 60 | 编程 | 上厕所.休息 | ||
17:00 | 17:20 | 0 | 20 | 阅读 | ||||
3.16 | 15:00 | 16:10 | 10 | 60 | 编程 | |||
3.19 | 15:00 | 15:40 | 10 | 30 | 编程 | 上厕所 | ||
17:00 | 17:30 | 30 | 编程 | |||||
3.14 | 14:30 | 15:30 | 0 | 60 | 编程 | |||
16:00 | 16:30 | 0 | 30 | 阅读 | ||||
编程总结:这一次编程只输出了运算题的答案。没有达到老师的要求。编程虽然难,但我会努力的。