• 《软件工程》第二次作业


    --题目:

    • 请编写一个能自动生成小学四则运算题目的软件;
    • 让程序能接受用户输入答案,并判定对错;
    • 最后给出总共 对/错的数量。

    --需求分析:

    • 编写小学四则运算的测试系统,该系统能完成100以内的加、减、乘、除运算;
    • 该系统能接受用户输入答案,并能自动判断对错;
    • 当对用户输入的答案进行判断时,对错误的题目给出正确的答案;
    • 在答题结束后,能自动输出用户答的总题数、答对题数、答错题数及所得分数。

    --设计:

    • 定义num表示系统内的题数,a[10]、b[10]表示自动生成的随机数,c[10]表示通过加、减、乘运算所得结果,d[10]为判断生成试题的运算,s表示通过除法运算所得结果;
    • result表示正确答案,add表示答题所得分数;
    • e为答错题目的数量,r为答对题目的数量;
    • 用一个主函数实现用户的输入,判段正误后系统自动给出正确答案,答题结束后并给出答题总数、答对题数、答错题数及答题所得分数。

    --代码实现:

    #include<stdlib.h>
    #include<stdio.h>
    #include<conio.h>
    #include<time.h>
    
    void main()
    {  
        int a[10],b[10],d[10],c[10],num=0,result,add=0;  
        double s; 
        int e=0,r=0;
        printf("欢迎来到小学四则运算测试系统!
    请认真完成以下题目!
    
    ");
        char f[5]={'+','-','*','/'};   
        srand((unsigned)time(NULL));  /* 出10道题 */  
        while(1) 
        {   
            d[num]=abs(rand())%4;/* 保证出题算法的随机性 */   
        while(1)   /* 保证出题成功 */   
        {   
            c[num]=-1;   
            a[num]=abs(rand())%100;   
            b[num]=abs(rand())%100;   
            if(d[num]==0) 
                c[num]=a[num]+b[num];   
            else if(d[num]==1) 
                c[num]=a[num]-b[num];  
            else if(d[num]==2) 
                c[num]=a[num]*b[num];   
            else if(d[num]==3)     
            {   
                if(b[num]>0)
                    s=(1.0*a[num]/b[num]);   
                else 
                    s=-1;    
            }  
            if(d[num]<=2)     
            {
                if(c[num]>=0 && c[num]<=100) /* 保证计算结果在0-100之间 */ 
                    break; 
            }else
            {
                if(a[num]==int(s)*b[num] && s>=0)       
                {
                    c[num]=int(s); 
                break;
                }       
            }   
        }
        num++;
        if(num==10) 
            break;
        }  /* 回答 */  
        num=0;  
        while(1)  
        {
            printf("%d %c %d= ",a[num],f[d[num]],b[num]);
            scanf("%d",&result);
            if(result==c[num])
            {
                r++;
                printf("回答正确!
    ");
                add+=10;
            }
            else{    
                e++;
                printf("错误,正确答案: %d
    ",c[num]);   
            }
            num++;      
            if(num==10) 
                break;    
        }  
        printf("
    您一共做了%d道题,其中正确的有%d道,错误的有%d道,总分为%d分
    ",e+r,r,e,add); 
        printf("答题结束,欢迎您再次光临!
    ");
        getch();
    }

     --测试:

    --事后分析和总结:

        1、在做题过程中,我意识到自己有很多不足;

        2、在写代码时,思路一定要清晰,保持清晰的头脑,才能高效的完成作业;

            在这实验中,我意识到自身的不足,在做题时一定要多思考,多分析,多理解;

       在做这次题目时,系统出现问题,让我写上去的东西全部消失了,这给了我一个经验,

      下次做题时,一定要记得先保存,这样可节约很多时间。

    --所耗时间:

    项目 时间
    需求分析 20分钟
    设计 30分钟
    代码 4.5小时
    测试 10分钟
    分析和总结 20分钟
  • 相关阅读:
    唯一元素List UniqueList
    汉诺塔 Hanoi 递归示例demo附代码
    TreeView控件保存恢复结点展开状态
    F#个人学习笔记2(F# survey)
    F#个人学习笔记1(F# survey)
    多文件上传控件(附示例下载)
    由desktopsavemode引起的Emacs配置失效
    Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
    Emacs的Tab键
    Emacs+highlightparentheses高亮括号
  • 原文地址:https://www.cnblogs.com/0907zhoujing/p/4415766.html
Copyright © 2020-2023  润新知