初步实现出题软件

相同部分

设计思路
首先看到题目嘛最初写了一个类似1+1= 或者1-1= 的随机生成算式的代码:


    int a,b,c,s,s1;
    srand(time(NULL));
    a=rand()%9+1;
    b=rand()%9+1;
    c=rand()%4+1;
    switch(c)
    {
    case 1:s=a+b;printf("%d+%d=",a,b);break;
    case 2:s=a-b;printf("%d-%d=",a,b);break;
    case 3:s=a * b;printf("%d*%d=",a,b);break;
    case 4:s=a;printf("%d/%d=",a*b,b);break;
    }  
    scanf("%d",&s1);
    if(s==s1)printf("回答正确!\n");
    else printf("回答错误!答案是: %d\n",s);

要求是要混合运算,最初的设想肯定是行不通的。
但是,原理是一样的,都是利用rand() 来生成随机数。给符号编号14,然后随机生成14,用switch语句选择出一个符号,
由于是混合运算,我的做法是定义一个数组,然后把符号数字排好存进去。这个时候就有难点了,看之前的简单运算,好像计算结果跟着随机出来的算式一起。
然而混合运算,排列组合有好多种情况,计算如果跟着随机一起出来貌似很麻烦(我是没什么好想法,如果有好的意见可以评论区)。
所以,我这里就有个想法,把生成的算式用计算器算出结果,然后对比答案是否正确。因为我之前写过计算器的代码所以比较方便。
原理是用后序表达式来计算生成的算式。因此,我也顺带在里面加了一个计算器的功能。不过,我这里有几个解决难点的做法有点不好。
第一,真分数我做不到直接用排列组合的方式弄出,我的思路是重新定义一个真分数的生成函数,然后调用。但是最好的方法应该是函数重载吧。
第二,除号块是一大难点,毕竟随机出来的,无法确定结果,题目却要求整数结果,我的解决方案就是每次结果都要进行一次判断是否为整数,然后不是整数进行重新随机,这样导致的结果就是除号出现的几率不会很大。

思路也就这些了吧,具体可以看我的代码。

代码规范:

函数 含义
check() 计算结果
judge() 判断结果是否为整数
Fraction() 随机生成真分数
Rand() 随机生成混合算式
randNum() 随机数字
randSym() 随机数字(1~4)
symbol() 找出对应符号

程序实现和结果测试的截图:







github的提交链接:https://github.com/NSDie/Operations

提交日志截图:


分工

  • 031602438 负责 随机生成题目 以及计算;
  • 031602317 负责 统计、翻译、界面美化。

协作证据截图




差异部分

1. 合作过程

由于各自都要满自己的事情,所以做这个作业也是有点烦,每次都是在半夜用qq催来催去,然后第二天不是我出去有事就是队友出去有事,不过还好题目不是很难。
然后每次写完自己的事,上传,跟队友说一声有新任务了,大概就是这样的吧。在合作过程中,除了代码还有就是github的协作功能弄了半天才弄好。

2. 合作体会

由于语言的差异,队友不擅长c++嘛,但是题目又要要求c++最好,所以只能把代码写的c和c++混合,能让队友看懂,必要时还要给他解释一下什么意思。但是在合作过程也感觉非常开心,偶尔会发生一些很有趣的事情。不过我最大的体会就是活到老,学到老。在和搭档合作的过程中一起思考,一起讨论,一起学习git的协作功能。
虽然感觉有点累,但是这些足以抚慰我了。

posted @ 2017-02-13 23:17  _NeverSayDie  阅读(334)  评论(8编辑  收藏  举报