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

  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 {
 42     int k,r,w;
 43     r=x;w=y;
 44     while(y!=0)
 45     {
 46         k=x%y;
 47         x=y;
 48         y=k;
 49     }
 50     gy=x;
 51     gb=(r*w)/gy;
 52 }
 53
 54 /*加法函数*/
 55 int add(int x,int y)
 56 {
 57     int sum=0;
 58     sum=x+y;
 59     return sum;
 60 }
 61 /*减法函数*/
 62 int sub(int x,int y)
 63 {
 64     int sub=0;
 65     int temp;
 66     if(x<y)
 67     {
 68        temp=x;
 69        x=y;
 70        y=temp;
 71     }
 72     sub=x-y;
 73     return sub;
 74 }
 75 /*乘法函数*/
 76 int mul(int x,int y)
 77 {
 78     int mul=0;
 79     mul=x*y;
 80     return mul;
 81 }
 82 /*除法函数*/
 83 int dive(int x,int y)
 84 {
 85     int res=0;
 86     res=x%y;
 87     return res;
 88 }
 89
 90 /*分数加法*/
 91 void fadd(int x,int y,int m,int n)
 92 {
 93     gcd(y,n);x=(gb/y)*x;m=(gb/n)*m;
 94     fp=x+m;fq=gb;
 95     gcd(fp,fq);
 96     fp=fp/gy;fq=fq/gy;
 97 }
 98 /*分数减法*/
 99 void fsub(int x,int y,int m,int n)
100 {
101     int temp,ran;
102     gcd(y,n);x=(gb/y)*x;m=(gb/n)*m;
103     ran=gb;
104     if(x<m){temp=m-x;}
105     else   {temp=x-m;}
106     gcd(temp,ran);
107     fp=temp/gy;fq=ran/gy;
108 }
109 /*分数乘法*/
110 void fmul(int x,int y,int m,int n)
111 {
112     fp=x*m;fq=y*n;
113     gcd(fp,fq);
114     fp=fp/gy;fq=fq/gy;
115 }
116 /*分数除法*/
117 void fdive(int x,int y,int m,int n)
118 {
119     fp=x*n;fq=y*m;
120     gcd(fp,fq);
121     fp=fp/gy;fq=fq/gy;
122 }
123 /*显示整数减法的打印函数*/
124 void print(int x,int y,char c)
125 {
126     int temp;
127     if(x<y)
128     {
129        temp=x;
130        x=y;
131        y=temp;
132     }
133     printf("%4d%3c%4d  =  ",x,c,y);
134 }
135 /*显示分数减法的打印函数*/
136 void fprint(int x,int y,int m,int n,char c)
137 {
138     int temp,ran;
139     gcd(y,n);
140     x=(gb/y)*x;m=(gb/n)*m;
141     if(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     }
147     else
148     {
149         x=x/(gb/y);m=m/(gb/n);
150     }
151     printf("%4d/%d%3c%4d/%d  =  ",x,y,c,m,n);
152 }
153
154 int main()
155 {
156     int i,j,r,xx,yy;
157     int temp,zi,mu;
158     int fz1,fm1,fz2,fm2;
159     char str1[10],ch;
160     int right,wrong[101];
161     memset(str1,sizeof(str1),' ');
162     memset(ques,sizeof(ques),0);
163     memset(anser,sizeof(anser),0);
164     int math,ans=0,input=0,rest=0,rest1=0,rest2=0;
165     printf("\t\t\t    小学数学计算题单\t\n\n");
166     printf("请输入需要打印题目数量:");
167     scanf("%d",&n);
168     srand((int)time(NULL)); //设定随机数种子
169     for(i=0,j=0;i<2*n;i++,j++)
170     {
171         num1[j]=rand()%50+1;
172         num2[j]=rand()%50+1;
173     }
174     srand((int)time(NULL)); //设定随机数种子
175     for(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     }
183     for(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     }
204     for(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     }
214     srand((int)time(NULL)); //设定随机数种子
215     for(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     }
306     right=0;memset(wrong,sizeof(wrong),0);
307     for(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         else
312         { wrong[j]=i+1;j++;}
313     }
314     printf("\n总共答对%d题\n",right);
315     printf("\n回答错误题目:\n");
316     for(i=0;i<j;i++)
317     {
318         printf("  第%d题\n",wrong[i]);
319     }
320     return 0;
321 }

软件截图:

总结:

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

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

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

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

转载于:https://www.cnblogs.com/199489KPY/p/5268694.html

软件工程作业之小学数学题目相关推荐

  1. 小学生数学测试软件编写分析,小学数学测试的质量分析

    六年级数学期末考试质量分析 一.试卷评价 本试卷涵盖面比较广,考查了学生多方面的能力,试卷紧扣新课程理念,从概念.计算.操作.应用等方面考查学生的双基.思维.操作.问题解决的能力,可以说全面考查了学生 ...

  2. 基于Java的小学数学辅助教学软件

    资源下载地址:https://download.csdn.net/download/sheziqiong/85795405 资源下载地址:https://download.csdn.net/downl ...

  3. 当数学老师和软件测试,狸米老师app评测:小学数学老师布置作业的神器

    近年来,各级教育主管部门一直呼吁要为小学生减负,一些文件中甚至明确提出小学一二年级不布置书面家庭作业,三至六年级书面家庭作业完成时间不得超过60分钟,这对小学老师们布置家庭作业提出了挑战.大家一方面想 ...

  4. 小学数学加减法测试软件,小学数学加减乘除出题软件

    小学数学加减乘除出题软件可以随机生成大量数字的小学相加.相减.相乘.相除题目,或者是带括号的四则混合运算,还能以填空或竖式显示试题,非常适合老师或者家长给孩子辅导数学加减乘除的时候使用,做完之后还能自 ...

  5. 数学测试卷软件,小学数学练习机_随机出数学练习题软件 50.0官方版

    小学数学练习机为孩子的数学学习提供全面的练习和指导,一定让你孩子的数学成绩大大提高.软件分为随机练习题,知识学习,试卷三大部分. 小学数学练习机功能介绍 [随机练习题] 按照知识点分类,每次随机出10 ...

  6. 数学成绩测试软件,小学数学测试软件.doc

    使用exit函数一定要有头文件#include. #include #include #include void menu(); void add(); void sub(); void mul(); ...

  7. 小学生数字测试软件,小学数学之星

    小学数学之星app可以很好的帮助孩子熟练的计算,充分地理解,家长要给孩子帮助,可以通过日常一些简单的数学培养孩子在软件里面都有贴近生活的数学,比如说会有去市场买菜的时候,每一次付钱找回的零钱多少多少这 ...

  8. 掌门1对1java面试_2019掌门1对1面试经验(JAVA软件工程师,小学数学教师等)

    为了帮助职业圈网友能够及时了解掌门1对1的面试流程以及面试过程所涉及的面试问题,职业圈小编把2019最新掌门1对1面试经验编辑好,马上提供给大家,以便能够尽快帮助到有需要的人.文章中还为你提供掌门1对 ...

  9. java设计课程数学生数_JAVA课程设计小学数学算数测试软件.pdf

    软 件 学 院 课程设计报告书 课程名称 面向对象程序设计 设计题目 小学数学测试软件 专业班级 学 号 姓 名 指导教师 2014 年 6 月 目 录 1 设计时间3 2 设计目的3 3 设计题目3 ...

最新文章

  1. html表格重置标签,HTML——表格标签
  2. 推荐一些顶级的Android开发书籍(转)
  3. SA 分析专家认证名单出炉!这一期学员太牛了
  4. java数据同步处理_Java如何处理多线程的数据同步问题
  5. linux文件属性之用户和组基础知识
  6. android nfc ndef mifareclassic,Android NFC开发-实践篇
  7. 0基础可以学Web前端吗?如何快速掌握前端开发技能?
  8. 数据密集型应用系统设计--数据存储与检索
  9. Leetcode 323.无向连通图中的连通分量个数
  10. 如何用AI技术增强企业认知智能?超详细架构解读
  11. day1 Ubuntu 使用
  12. 基于网络电子海图的海洋气象信息服务系统
  13. OpenStack基本安装步骤
  14. OpenCV55:高动态范围成像|High Dynamic Range (HDR)
  15. 私家车对PM2.5的贡献到底有多少?
  16. 【Pytorch】计算矩阵中向量之间的两两相似性
  17. 史上最全WindowsMac系统各种快捷键大全(1000余个)
  18. 凸优化_Stephen_Boyd_
  19. python扩展屏幕截图_Python实现屏幕截图的两种方式
  20. mysql对标准sql的扩展_mysql对标准sql的goup by进行了扩展

热门文章

  1. linux 修改hostname
  2. 【SpringBoot Testing】测试类/测试用例格式
  3. 【spring-boot】启用数据缓存功能
  4. 用Gson实现json与对象、list集合之间的相互转化
  5. toad导入数据_利用TOAD实现EXCEL数据在oracle的导入导出
  6. 新手学java_新手如何学习Java
  7. python的setup如何安装_如何安装python的setuptool
  8. 推荐10个好用到爆的Jupyter Notebook插件,让你效率飞起
  9. 维度爆炸?Python实现数据压缩竟如此简单!
  10. 反三角函数怎么表示_交流电的功率因数怎么算(里面有例子)