初步实现出题软件
相同部分
-
学号:031602438 博客主页链接:http://www.cnblogs.com/yyf031602438/
-
学号:031602317 博客主页链接:http://www.cnblogs.com/fleur1025/
设计思路:
首先看到题目嘛最初写了一个类似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的协作功能。
虽然感觉有点累,但是这些足以抚慰我了。