个人项目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盘第一层,如果能随软件的移动灵活改变路径就更好了。

设计手稿:

猜你喜欢

转载自www.cnblogs.com/xuzhengdong/p/9915954.html
今日推荐