四则运算:我的设计和设想
注明:此版本内有带bug,结果部分显示不正确。但程序可正常运行。因时间有限,修改版后续将另起一篇。
(一)主要功能:
- 菜单多样式:提供2种方式(整数和真分数),4种运算。
- 专题训练:可进行某一种运算,打通薄弱项。
- 自动生成题目:100以内的四则运算,利用rand()%100实现, 随机数由系统时间函数产生。
- 实时提示错题并给予正确答案:输入错误答案提示,并给出正确答案,让答题人在接下来的答题中更加细心。
- 成绩显示:答题完毕,给出正确题数和错误题数的提示。
- 作出对应评价:答题完毕后,根据得分,对应给出一句鼓励的语句。
(二)设计思想:
- 自己定制答题数量:现在的小学生很有自己的想法,若让其强制性的做练习题,结果可能适得其反。所以我设计地这款四则运算小软件,题目不会规定数量,有很大的自由性,让其自己制定计划并完成。
- 专题训练扫除薄弱区:可针对自身的学习状况选择习题运算的方式,扫除学习的薄弱区。
- 调动答题者的积极性:里面的话语不带任何生硬部分,用轻松地话语使答题者进入状态,期间再加以鼓励,让其更加向上。
(三)存在问题:
- 界面过于简洁:小学生大多是“看脸的”,第一印象很重要,有趣生动的界面更容易吸引小学生的注意。
- 功能不完全:题型属于基础版,可加入多种题型混合运算,或模拟试题等。
(四)改进建议(完善软件):
- 通关模式:整体可设计成难度逐步提升的的小关卡,以做游戏的方式调动小学生的积极性和参与度。
- 搭配休闲益智类游戏:完成答题数量后,以游戏作为奖励机制。根据完成数量制定游戏时间,时间到便自动关闭,使用者也可增加答题数量赚取游戏时间。
- 积分制:据答题数量,累计积分,可兑换实物或宠物等。
- 搭配对应教学视频。
- 增加学习心得和吐槽模块:促使学生通过自己的方式去总结。学生搭建自己的学习讨论区,增加话题性,聚拢用户。
- 定期更新完善软件:据用户的吐槽和建议更新软件,满足用户需求,达到用户满意,自发进行口碑宣传。学习型软件很容易通过口碑宣传影响其他潜在用户。
注:以上建议中的增加项要在对一定年龄层的小学生进行切实的市场调查和软件试学后,才可确认。
(五)程序截图:
1.真分数乘法运算
2.整数运算
(六)总结:
这次变成给我的感觉可以说是酸爽至极,编程中所遇到的错误可以说是一波未平,一波又起。同时我也在错误中找寻自身的问题。
- 会看不会写:看代码的能力比写代码的能力强,要进行更多的练习积累写代码的熟练度。
- 基本格式语句使用不熟练:转换和调用等方法使用不熟练。
- 灵活变通能力弱:在遇到问题时,很难变换思路。
事情都是相对的,虽说所遇到的问题此起彼伏,其中通过解决问题能够得到的大量知识,也是值得的。
附录:源代码
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a,b,x,y,s=0,r=0,e=0,result; //s总题数 r正确数 e错误数
float fen1,fen2; //真分数
char c; //答题者输入的值 (比如其中的a+b=c)
int m,n; //输入的数值,确定性
printf("\n\t\t【小朋友~又到了检验自己实力的时候啦!让我们开始吧!】\n\n");
printf("输入要练习的题型吧(1整数 / 2真分数):");
scanf("%d",&n);
printf("\n根据下面序列号,可以选择试题哦\n");
printf("1.+ 加法\n");
printf("2.- 减法\n");
printf("3.* 乘法\n");
printf("4./ 除法");
printf("\n 提示:1.整数间运算 要保留到小数点到整数部分!\n") ;
printf(" 2.按q键退出哦!\n") ;
printf("\n输入要练习的对应序号吧:");
scanf("%d",&m);
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf("\n小测试开始啦!认真答题吧!\n");
srand( (unsigned)time( NULL ) ); //取随机数
switch(n){
/*整数开始*/
case 1:{
while ((c=getchar())!='q') //按q退出
{
s++;
a=rand()%100;
b=rand()%100;
x=rand()%100;
y=rand()%x; //保证减法、除法 可应用
//加法 +
if(m==1)
{
printf("%d+%d=",a,b);
scanf("%d",&c);
if (a+b==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",a+b);
e++;
}
}
//减法 -
else if(m==2)
{
printf("%d-%d=",x,y);
scanf("%d",&c);
if (x-y==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",x-y);
e++;
}
}
//乘法 *
else if(m==3)
{
printf("%d*%d=",a,b);
scanf("%d",&c);
if (a*b==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",a*b);
e++;
}
}
//除法 /
else if(m==4)
{
if(y!=0){
printf("%d/%d=",x,y);
scanf("%d",&c);
float shang=x/y;
if (x/y==c) r++;
else{
printf("要细心呀!正确答案为:%.2f\n",shang);
e++;
}//else结束
}//if(y!=0)结束
}
else
printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
result=100*r/s; //整体得分
}
}//整数结束
/*真分数 开始*/
case 2:{
while ((c=getchar())!='q')
{
s++;
float t; //t做转换的中间因子。fen1,fen2转换
x=rand()%100;
y=rand()%x;
a=rand()%100;
b=rand()%a;
fen1=y/x; //设定两个不同的真分数
fen2=b/a;
//加法 +
if(m==1)
{
printf("%d/%d+%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1+fen2==c) r++;
else{
printf("要细心呀!正确答案为:%.2f\n",fen1+fen2);
e++;
}
}
//减法 -
else if(m==2)
{
if(fen1>fen2){
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1-fen2==c) r++;
else{
printf("要细心呀!正确答案为:%.2f\n",fen1-fen2);
e++;
}
}
else{
t=fen1;
fen1=fen2;
fen2=t; //减数>被减数,则转换
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1-fen2==c) r++;
else{
printf("要细心呀!正确答案为:%.2f\n",fen1-fen2);
e++;
}
}
}
//乘法 *
else if(m==3)
{
int j=y*b,k=x*a; //分子or分母间的相乘
printf("%d/%d*%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (j*k==c) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",j,k);
e++;
}
}
//除法 /
else if(m==4)
{
int o=y*a,p=x*b; //相除等于乘于一个倒数
if(p!=0){ //防止分母=0,即p!=0
printf("(%d/%d)/(%d/%d)=",y,x,b,a);
scanf("%.2f",&c);
if (o*p==c) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",o,p);
e++;
}
}
}
else
printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
result=100*r/s; //得分
}
}//真分数结束
}
//成绩显示
printf("\n本次答题成绩:%d\n\n",result);
printf("本次共有%d道题。\n回答正确有 %d 道\n回答错误有 %d 道\n",s,r,e);
//评语
if(result>60&&result<80)
{
printf("\n\n评语:还差一点就要满分咯!继续前进吧!");
}
else if(result>80&&result<100)
{
printf("\n\n评语:就差一丢丢了!再接再厉!");
}
else if(result==100)
{
printf("非常棒哦!为你点赞!");
}
else
{
printf("\n\n评语:要多加练习哟!你的潜力很大呢!");
}
}