个人项目3:一个能生成小学二年级四则运算题目的“软件”版本3
要求:
1.实现在线答题。
2.答题结束后可以判断对错。
3.将错题的结果保存起来。
思路:
刚拿到这个项目时,我的想法就是把编程过程分为两个阶段,第一个阶段是完成能自动判断错误的编程,第二个阶段是能将错题存入到一个txt文件中,其中第一阶段耗费的时间较长,比第二阶段多用了半个小时。
编写这个程序基本上是基于第一次二柱子代码之上的,加入两个功能即可。
为了让软件能够判断对错,我想到了用IF语句,d=a-b让计算机算出正确答案d, if(m==d)然后判断用户输入的值m和d是否相等来达到目的,如果相等就输出“回答正确”,否则就输出“回答错误”。
在做输出txt任务时,没有学过这个方法,我百度到了下面这个代码:
main()
{
FILE*fpt;
fpt=fopen(“wendengming.txt”.w);
fprint(fpt,”%d/n”,m);
fclose(fpt);
}
所以我的任务就是对这部分代码改装并加以利用。fprintf(fpt,"%d+%d=\n",a,b);先改一下fprintf,让它变成我想要在txt存入公式的格式,下一步就是如何将这部分代码和switch语句结合起来(也就是怎么去插入这部分代码)。我尝试过多种插入方式,一度我还以为这部分有问题,起初我将FILE*fpt;fpt=fopen(“wendengming.txt”.w);fprint(fpt,”%d/n”,m);fclose(fpt);插入到每个计算事件判断事件的下面,每次运行结果在txt只能保存一个公式,然后我又尝试了几种方法,也是如此。我想我可能需要了解一下这部分代码的含义,我百度了一下:1.定义一个file 2.打开file 3.将内容写入file 4.关闭file。瞬间豁然开朗,原来这段代码要分开使用,FILE*fpt;fpt=fopen(“wendengming.txt”.w);放在整个程序的前面,四个计算部分放四个printf,fclose放在for循环结构的下面。
代码如下:
#include<stdio.h> #include<Windows.h> #include<time.h> #include <fstream> using namespace std; void main() { int a,b,c,d,e,m,i; printf("请输入出题数:"); scanf("%d",&e); srand(unsigned( time(NULL))); FILE*fpt; fpt=fopen("D:/错题集.txt","w"); for(i = 0; i < e; i++) { a = rand() % 100; b = rand() % 100; c = rand() % 4; switch (c) { case 0:printf("%d + %d =\n",a,b); d=a+b; scanf("%d",&m); if(m==d) printf("回答正确\n"); else { printf("回答错误\n"); printf("正确答案:%d\n",d); fprintf(fpt,"%d+%d=\n",a,b); } break; case 1:printf("%d * %d =\n",a,b); d=a*b; scanf("%d",&m); if(m==d) printf("回答正确\n"); else { printf("回答错误\n"); printf("正确答案:%d\n",d); fprintf(fpt,"%d * %d=\n",a,b); } break; case 2:if (a < b) { d = a; a = b; b = d; } printf("%d - %d =\n", a, b); d=a-b; scanf("%d",&m); if(m==d) printf("回答正确\n"); else { printf("回答错误\n"); printf("正确答案:%d\n",d); fprintf(fpt,"%d - %d=\n",a,b); } break; case 3: while (b == 0) { b = rand() % 100; } printf("%d / %d =\n",a,b); d=a/b; scanf("%d",&m); if(m==d) printf("回答正确\n"); else { printf("回答错误\n"); printf("正确答案:%d\n",d); fprintf(fpt,"%d / %d=\n",a,b); } break; } } fclose(fpt); system("pause"); }
运行截图如下:
总结:
完成这个软件确实有一种收获感。编程过程中遇到了不少困难还好都成功解决了,在第一阶段编写时,出题数量出现了错误,每次出两道,甚至好几道题,起初我认为程序逻辑出现了问题,改变了一下还是不行,最后才发现是第二个scanf语句中少了%,真的没想到少了百分号还能运行。这告诉我编程一定要认真,还要去理解语句的意思,这能节约不少时间。
还有一部分有优化的潜力,就是txt位置路径比较固定,我设置的路径在D盘第一层,如果能随软件的移动灵活改变路径就更好了。
设计手稿: