600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 软件工程作业之小学数学题目

软件工程作业之小学数学题目

时间:2019-04-30 17:51:50

相关推荐

软件工程作业之小学数学题目

软件描述:该软件实现小学数学题目生成以及对运算结果进行判断,最后统计出正确题目以及错误的题目,便于学生及时改正自己的错误,另外,该软件存在比较明显的缺陷,不能进行四则混合运算。希望在以后的学习实践中可以进一步完善自己的软件。

1 /* 2 需求分析: 3 4 1.自动生成小学四则运算题目,题目的数量(n)可以由老师给出。 5 2.除整数之外,还需要支持真分数四则运算。 6 3.对于除不尽的结果显示商和与余数。 7 8 设计思路: 9 10 第一步:随机产生两个100以内的整数,并且两个数的运算关系随机。 11 第二部:对于真分数采用(n/m)形式表示,算符随机生成。 12 第三部:将运算后的结果采用数组方式保存,方便老师批改。 13 14 注意事项: 15 16 1.对于减法而言,被减数应该不小于减数,避免结果为负。 17 2.对于分数的表示应该注意真分数(分子小于分母,且为最简形式) 18 3.分数运算后结果应该化为最简。 19 4.运算过程中不应该出现负数。 20 21 */ 22 23 #include <stdio.h> 24 #include <stdlib.h> 25 #include <string.h> 26 #include <time.h> 27 #include <iostream> 28 29 using namespace std; 30 31 int n; //定义出题数量n; 32 int num1[101],num2[101]; //用来保存产生的随机数 33 int f1[101][2],f2[101][2]; //用来产生分数分子分母,f[i][0]存分子,f[i][1]存分母 34 int ques[101][2]; //存储计算机计算的正确结果 35 int anser[101][2]; //回答问题答案 36 int fp,fq;//fp:分子,fq:分母 37 int gy,gb; 38 39 /*最大公约数,最小公倍数*/ 40 void gcd(int x,int y) 41 { 42int k,r,w; 43r=x;w=y; 44while(y!=0) 45{ 46 k=x%y; 47 x=y; 48 y=k; 49} 50gy=x; 51gb=(r*w)/gy; 52 } 53 54 /*加法函数*/ 55 int add(int x,int y) 56 { 57int sum=0; 58sum=x+y; 59return sum; 60 } 61 /*减法函数*/ 62 int sub(int x,int y) 63 { 64int sub=0; 65int temp; 66if(x<y) 67{ 68 temp=x; 69 x=y; 70 y=temp; 71} 72sub=x-y; 73return sub; 74 } 75 /*乘法函数*/ 76 int mul(int x,int y) 77 { 78int mul=0; 79mul=x*y; 80return mul; 81 } 82 /*除法函数*/ 83 int dive(int x,int y) 84 { 85int res=0; 86res=x%y; 87return res; 88 } 89 90 /*分数加法*/ 91 void fadd(int x,int y,int m,int n) 92 { 93gcd(y,n);x=(gb/y)*x;m=(gb/n)*m; 94fp=x+m;fq=gb; 95gcd(fp,fq); 96fp=fp/gy;fq=fq/gy; 97 } 98 /*分数减法*/ 99 void fsub(int x,int y,int m,int n)100 {101int temp,ran;102gcd(y,n);x=(gb/y)*x;m=(gb/n)*m;103ran=gb;104if(x<m){temp=m-x;}105else {temp=x-m;}106gcd(temp,ran);107fp=temp/gy;fq=ran/gy;108 }109 /*分数乘法*/110 void fmul(int x,int y,int m,int n)111 {112fp=x*m;fq=y*n;113gcd(fp,fq);114fp=fp/gy;fq=fq/gy;115 }116 /*分数除法*/117 void fdive(int x,int y,int m,int n)118 {119fp=x*n;fq=y*m;120gcd(fp,fq);121fp=fp/gy;fq=fq/gy;122 }123 /*显示整数减法的打印函数*/124 void print(int x,int y,char c)125 {126int temp;127if(x<y)128{129 temp=x;130 x=y;131 y=temp;132}133printf("%4d%3c%4d = ",x,c,y);134 }135 /*显示分数减法的打印函数*/136 void fprint(int x,int y,int m,int n,char c)137 {138int temp,ran;139gcd(y,n);140x=(gb/y)*x;m=(gb/n)*m;141if(x<m)142{143 x=x/(gb/y);m=m/(gb/n);144 temp=x;x=m;m=temp;145 ran=y,y=n;n=ran;146}147else148{149 x=x/(gb/y);m=m/(gb/n);150}151printf("%4d/%d%3c%4d/%d = ",x,y,c,m,n);152 }153 154 int main()155 {156int i,j,r,xx,yy;157int temp,zi,mu;158int fz1,fm1,fz2,fm2;159char str1[10],ch;160int right,wrong[101];161memset(str1,sizeof(str1),' ');162memset(ques,sizeof(ques),0);163memset(anser,sizeof(anser),0);164int math,ans=0,input=0,rest=0,rest1=0,rest2=0;165printf("\t\t\t 小学数学计算题单\t\n\n");166printf("请输入需要打印题目数量:");167scanf("%d",&n);168srand((int)time(NULL)); //设定随机数种子169for(i=0,j=0;i<2*n;i++,j++)170{171 num1[j]=rand()%50+1;172 num2[j]=rand()%50+1;173}174srand((int)time(NULL)); //设定随机数种子175for(i=0;i<n;i++)176{177 for(r=0;r<2;r++)178 {179 f1[i][r]=rand()%20+1;180 f2[i][r]=rand()%20+1;181 }182}183for(i=0;i<n;i++)184{185 if(f1[i][0]>f1[i][1])186 {187 temp=f1[i][0];f1[i][0]=f1[i][1];f1[i][1]=temp;188 }189 if(f2[i][0]>f2[i][1])190 {191 temp=f2[i][0];f2[i][0]=f2[i][1];f2[i][1]=temp;192 }193 if((f1[i][0]==f1[i][1]))194 {195 f1[i][0]=f1[i][0]/2;196 if(f1[i][0]==0){f1[i][0]=f1[i][0]+2;}197 }198 if((f2[i][0]==f2[i][1]))199 {200 f2[i][0]=f2[i][0]/3;201 if(f2[i][0]==0){f2[i][0]=f2[i][0]+5;}202 }203}204for(i=0;i<n;i++)205{206 gcd(f1[i][0],f1[i][1]);207 f1[i][0]=f1[i][0]/gy;208 f1[i][1]=f1[i][1]/gy;209 210 gcd(f2[i][0],f2[i][1]);211 f2[i][0]=f2[i][0]/gy;212 f2[i][1]=f2[i][1]/gy;213}214srand((int)time(NULL)); //设定随机数种子215for(i=0;i<n;i++)216{217 printf("\n第%d题:",i+1);218 xx=num1[i];yy=num2[i];219 fz1=f1[i][0];fm1=f1[i][1];220 fz2=f2[i][0],fm2=f2[i][1];221 math=rand()%8+1;222 switch(math)223 {224 case 1: //整数加法225 printf("%4d%3c%4d = ",xx,'+',yy);226 scanf("%4d",&input);227 anser[i][0]=input;228 anser[i][1]=0;229 ans=add(xx,yy);230 ques[i][0]=ans;231 ques[i][1]=0;232 break;233 case 2: //整数减法234 print(xx,yy,'-');235 scanf("%4d",&input);236 anser[i][0]=input;237 anser[i][1]=0;238 ans=sub(xx,yy);239 ques[i][0]=ans;240 ques[i][1]=0;241 break;242 case 3: //整数乘法243 printf("%4d%3c%4d = ",xx,'*',yy);244 scanf("%4d",&input);245 anser[i][0]=input;246 anser[i][1]=0;247 ans=mul(xx,yy);248 ques[i][0]=ans;249 ques[i][1]=0;250 break;251 case 4: //整数除法252 printf("%4d%3c%4d = ",xx,'/',yy);253 scanf("%4d",&input);254 anser[i][0]=input;255 gets(str1);256 rest1=str1[6]-'0';257 rest2=str1[7]-'0';258 if(str1[0]==0){anser[i][1]=0;}259 else if(str1[7]==0){anser[i][1]=rest1;}260 else{anser[i][1]=rest1*10+rest2;}261 rest=dive(xx,yy);262 ans=(int)(xx/yy);263 ques[i][0]=ans;264 ques[i][1]=rest;265 break;266 case 5: //分数加法267 printf("%4d/%d%3c%4d/%d = ",fz1,fm1,'+',fz2,fm2);268 fadd(fz1,fm1,fz2,fm2);269 ques[i][0]=fp;270 ques[i][1]=fq;271 scanf("%d%c%d",&zi,&ch,&mu);272 anser[i][0]=zi;273 anser[i][1]=mu;274 break;275 case 6: //分数减法276 fprint(fz1,fm1,fz2,fm2,'-');277 fsub(fz1,fm1,fz2,fm2);278 ques[i][0]=fp;279 ques[i][1]=fq;280 scanf("%d%c%d",&zi,&ch,&mu);281 anser[i][0]=zi;282 anser[i][1]=mu;283 break;284 case 7: //分数乘法285 printf("%4d/%d%3c%4d/%d = ",fz1,fm1,'*',fz2,fm2);286 fmul(fz1,fm1,fz2,fm2);287 ques[i][0]=fp;288 ques[i][1]=fq;289 scanf("%d%c%d",&zi,&ch,&mu);290 anser[i][0]=zi;291 anser[i][1]=mu;292 break;293 case 8: //分数除法294 printf("%4d/%d%3c%4d/%d = ",fz1,fm1,'/',fz2,fm2);295 fdive(fz1,fm1,fz2,fm2);296 ques[i][0]=fp;297 ques[i][1]=fq;298 scanf("%d%c%d",&zi,&ch,&mu);299 anser[i][0]=zi;300 anser[i][1]=mu;301 break;302 default:303 break;304 }305}306right=0;memset(wrong,sizeof(wrong),0);307for(i=0,j=0;i<n;i++)308{309 if((ques[i][0]==anser[i][0])&&(ques[i][1]==anser[i][1]))310 { right++; }311 else312 { wrong[j]=i+1;j++;}313}314printf("\n总共答对%d题\n",right);315printf("\n回答错误题目:\n");316for(i=0;i<j;i++)317{318 printf(" 第%d题\n",wrong[i]);319}320return 0;321 }

软件截图:

总结:

1.在这次的软件实践开发作业中不仅仅锻炼了自己软件设计的能力,也使自己对软件开发有了更加深刻的认识和学习,明白如何去开发软件,对于一个软件的开发,我们应该先去做一个基本的用户调查,了解用户需要什么样的软件,需要什么样的功能,然后根据用户的需求合理的去设计软件,并且制定自己的软件开发流程,对自己将要做的软件有一个初步的认识。

2.对于自己的软件开发也应该注意开发过程中有可能遇到的问题,可能来自用户,也有可能来自于自己的设计开发,所以对于出现的问题应该提早做好应对准备,以免在后来开发过程脚忙手乱。

3.编码过程,对于自己的编码过程应该条理化,结构化。一个软件一般都有很多的功能需要去实现,这时我们就应该考虑代码的层次化结构,对于每一个功能应该有合理的划分,这样不仅仅便于自己书写代码,而且也方便调试,还有一点好处,如果运行一旦出错,这样的合理布局有利于我们去调试自己的程序,及时发现自己问题所在。

这些就是我在此次软件开发中所得到的一点心得体会,在以后的学习工作中我们可能会遇到越来越多的问题,这都是对于我们自己一个很好的锻炼。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。