软件工程个人作业03
设计思路:这次主要功能是判断输入的结果是否正确,首先真分数运算就需要先约分,然后判断输入分子分母是否正确就可以了。最主要的就是多项式运算,先用一个数组储存数,再用一个数组储存运算符,然后查找运算符,乘除先算,每算一次压缩一次数组,然后再进行加减运算。
源代码:
#include <iostream> #include <ctime> #include <string> using namespace std; int main() { int n = 100; int i1,i2,ii3,ia3,i4,i5; while(n) { cout << "~~~~~~~~~~~~~~四则运算~~~~~~~~~~~~~~" << endl; cout << "|--------------0.退出--------------|" << endl; cout << "|---------1.是否有乘除运算---------|" << endl; cout << "|---------2.是否有括号运算---------|" << endl; cout << "|--------3.运算数值取值范围--------|" << endl; cout << "|------4.加减运算中是否有负数------|" << endl; cout << "|------5.除法运算中是否有余数------|" << endl; cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl; cout << "请输入您的选择:"; cin >> n; switch(n) { case 1: cout << "若有乘除则输入1,若没有则输入0:"; cin >> i1;break; case 2: cout << "若有括号则输入1,若没有则输入0:"; cin >> i2;break; case 3: cout << "输入范围最小值:"; cin >> ii3; cout << "输入范围最大值:"; cin >> ia3;break; case 4: cout << "若加减有负数则输入1,若没有则输入0:"; cin >> i4;break; case 5: cout << "若除法有余数则输入1,若没有则输入0:"; cin >> i5;break; } } int i =0; int zq = 0; int cw = 0; srand((unsigned)time(0)); while(i<10) { int x,y,a1,a2,a3,a4,r,u,k,l; string a[1000],b[1000],c[1000]; int flag = 0; x = rand() % 2; y = rand() % 4; a1 = rand() % (ia3-ii3+1) + ii3; a2 = rand() % (ia3-ii3+1) + ii3; a3 = rand() % (ia3-ii3+1) + ii3; a4 = rand() % (ia3-ii3+1) + ii3; if(i1==0) { if(y==2) y = 0; else if(y==3) y = 1; } if(i4==0) { int q; if(x==0&&y==1) { if((a1-a2)<0) { q = a1; a1 = a2; a2 = q; } } } if(i5==0) { int p; if(x==0&&y==3) { p = a1 % a2; if(p!=0) { a1 = a1 + a2 - p; } } } a[i] = a1; b[i] = a2; c[i] = y; for(int t=0;t<i;t++) { if(a[i]==a[t]&&b[i]==b[t]&&c[i]==c[t]) { flag = 1; } } if(flag==1) { i = i-1; } else { if(x==0) { if(y==0) { cout << a1 << "+" << a2 << "=" << endl; u = a1 + a2; cout << "请输入运算结果:"; cin >> r; if(r==u) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==1) { cout << a1 << "-" << a2 << "=" << endl; u = a1 - a2; cout << "请输入运算结果:"; cin >> r; if(r==u) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==2) { cout << a1 << "*" << a2 << "=" << endl; u = a1 * a2; cout << "请输入运算结果:"; cin >> r; if(r==u) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==3) { cout << a1 << "/" << a2 << "=" << endl; if(a1%a2==0) { u = a1 / a2; cout << "请输入运算结果:"; cin >> r; if(r==u) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else { int small; if(a1-a2>0) { small = a2; } else { small = a1; } for(int d=small;d>0;d--) { if(a1%d==0&&a2%d==0) { a1 = a1 / d; a2 = a2 / d; break; } } cout << "请输入分子和分母:"; cin >> r >> u; if(r==a1&&u==a2) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } } } else if(x==1) { int a,b,temp; a = a1 - a2; b = a3 - a4; if(a<=0) { temp = a1; a1 = a2; a2 = temp; } if(b<=0) { temp = a3; a3 = a4; a4 = temp; } if(a2==0) { a2 = rand() % (ia3-ii3) + ii3 + 1; } if(a4==0) { a4 = rand() % (ia3-ii3) + ii3 + 1; } for(int c=a2;c>0;c--) { if(a1%c==0&&a2%c==0) { a1 = a1 / c; a2 = a2 / c; break; } } for(int d=a4;d>0;d--) { if(a3%d==0&&a4%d==0) { a3 = a3 / d; a4 = a4 / d; break; } } if(y==0) { cout << "(" << a1 << "/" << a2 << ")" << "+" << "(" << a3 << "/" << a4 << ")" << "=" << endl; k = (a1 * a4) + (a2 * a3); l = a2 * a4; int small; if(k-l>0) { small = l; } else { small = k; } for(int d=small;d>0;d--) { if(k%d==0&&l%d==0) { k = k / d; l = l / d; break; } } cout << "请输入分子和分母:"; cin >> r >> u; if(r==k&&u==l) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==1) { cout << "(" << a1 << "/" << a2 << ")" << "-" << "(" << a3 << "/" << a4 << ")" << "=" << endl; k = (a1 * a4) - (a2 * a3); l = a2 * a4; int small; if(k-l>0) { small = l; } else { small = k; } for(int d=small;d>0;d--) { if(k%d==0&&l%d==0) { k = k / d; l = l / d; break; } } cout << "请输入分子和分母(负数写在分子里):"; cin >> r >> u; if(r==k&&u==l) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==2) { cout << "(" << a1 << "/" << a2 << ")" << "*" << "(" << a3 << "/" << a4 << ")" << "=" << endl; k = a1 * a3; l = a2 * a4; int small; if(k-l>0) { small = l; } else { small = k; } for(int d=small;d>0;d--) { if(k%d==0&&l%d==0) { k = k / d; l = l / d; break; } } cout << "请输入分子和分母:"; cin >> r >> u; if(r==k&&u==l) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } else if(y==3) { cout << "(" << a1 << "/" << a2 << ")" << "/" << "(" << a3 << "/" << a4 << ")" << "=" << endl; k = a1 * a4; l = a2 * a3; int small; if(k-l>0) { small = l; } else { small = k; } for(int d=small;d>0;d--) { if(k%d==0&&l%d==0) { k = k / d; l = l / d; break; } } cout << "请输入分子和分母:"; cin >> r >> u; if(r==k&&u==l) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } } } } i++; } cout << "多项式运算除法只取整数部分!!!" << endl; int j = 0; while(j<10) { int h,c,f; h = rand() % 5 + 2; int g = h; int s1[6]; string s2[6]; for(int l=0;l<h;l++) { s1[l] = rand() % (ia3-ii3+1) + ii3; } for(int l=0;l<h-1;l++) { c = rand() % 4; if(c==0) { s2[l] = "+"; } else if(c==1) { s2[l] = "-"; } else if(c==2) { s2[l] = "*"; } else if(c==3) { s2[l] = "/"; } } s2[h-1] = "="; for(int l=0;l<h;l++) { cout << s1[l] << s2[l]; } cout << endl; for(int l=0;l<h;l++) { if(s2[l]=="*"||s2[l]=="/") { if(s2[l]=="*") { s1[l] = s1[l] * s1[l+1]; for(int k=l+1;k<h-1;k++) { s1[k] = s1[k+1]; } for(int k=l;k<h-1;k++) { s2[k] = s2[k+1]; } l--; h--; g--; } else if(s2[l]=="/") { s1[l] = s1[l] / s1[l+1]; for(int k=l+1;k<h-1;k++) { s1[k] = s1[k+1]; } for(int k=l;k<h-1;k++) { s2[k] = s2[k+1]; } l--; h--; g--; } } } for(int l=0;l<g;l++) { if(s2[l]=="+"||s2[l]=="-") { if(s2[l]=="+") { s1[l] = s1[l] + s1[l+1]; for(int k=l+1;k<g-1;k++) { s1[k] = s1[k+1]; } for(int k=l;k<g-1;k++) { s2[k] = s2[k+1]; } l--; g--; } else if(s2[l]=="-") { s1[l] = s1[l] - s1[l+1]; for(int k=l+1;k<g-1;k++) { s1[k] = s1[k+1]; } for(int k=l;k<g-1;k++) { s2[k] = s2[k+1]; } l--; g--; } } } cout << "请输入运算结果:"; cin >> f; if(f==s1[0]) { cout << "正确!" << endl; zq++; } else { cout << "错误!" << endl; cw++; } j++; } cout << "一共做对" << zq << "道题!" << endl; cout << "一共做错" << cw << "道题!" << endl; return 0; }
结果截图:
项目计划总结:
日期 | 听课 | 编写程序 | 阅读课本 | 日总计 |
周日 | ||||
周一 | 100min | 60min | 160min | |
周二 | ||||
周三 | 60min | 60min | ||
周四 | 90min | 90min | ||
周五 | 60min | 60min | ||
周六 | 400min | 400min | ||
周总记 | 100min | 490min | 180min | 770min |
时间记录日志:
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 8:00 | 9:50 | 10min | 100min | 上课 | |
13:00 | 14:00 | 60min | 编程 | 优化上一次实验的一些部分使之能与这次实验结合 | ||
3/23 | 15:00 | 16:20 | 20min | 60min | 讨论 | |
3/24 | 15:00 | 16:30 | 90min | 编程 | 尝试讨论内容 | |
3/25 | 19:00 | 20:00 | 60min | 讨论 | ||
3/26 | 10:00 | 19:00 | 140min | 400min | 编程 | 编写程序和修改错误 |
缺陷记录日志:
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3/26 | 1 | 100 | 编码 | 编译 | 60min | |
描述:因复制粘贴而重复的地方就出现有些地方修改了而有些地方没有改。 |
合作人:徐嵩盛
合作照片: