首页 > 技术文章 > 王歆瑶20190919-6 结对四则运算

wxyao 2019-09-24 22:59 原文

此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/7631

git地址:https://e.coding.net/wxyao/sizeyunsuan1.git

结对伙伴:梅小雨

功能1. 四则运算

支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答

1.重难点:随机生成题目以及计算正确题目的数量。

2.编程收获:经过一系列的思考和讨论,我们决定用后缀表达式来实现四则运算,锻炼了解决问题的思维方式。

 

 

 代码片段:

void First()
{
    int i,test=0,counter=0;
    float ans;
    int n=20;
    while(n--)
    {
        //strcpy(str1,GetStr());
        //printf("1");
        //puts(str);
        GetStr();
        float Tans=Arithmetic(str1);
        //printf("2");
        for(i=0; i<7; i++)
        {
            printf("%c",str1[i]);
        }
        printf("=\n");
        printf("?");
        scanf("%f",&ans);
        if(Tans==ans)
        {
            printf("答对啦,你真是个天才!\n");
            counter++;
        }
        else
        {
            printf("再想想吧,答案似乎是%.2f喔!\n",Tans);
        }
    }
    printf("你一共答对%d道题,共20道题。",counter);


}

 

功能2. 支持括号

1.重难点:怎么在加入括号以后程序能正确运行

2.编程收获:我们在加括号期间,出现了很多bug,反复修改了好几次,才终于实现。

 

 

代码片段:

switch(KH)
        {
        case 0:
            for(i=7; i>0; i--)
                str1[i]=str1[i-1];
            for(i=8; i>4; i--)
                str1[i]=str1[i-1];
            str1[0]='(';
            str1[4]=')';
            str1[9]='\0';
            break;
        case 1:
            for(i=7; i>0; i--)
                str1[i]=str1[i-1];
            for(i=8; i>6; i--)
                str1[i]=str1[i-1];
            str1[0]='(';
            str1[6]=')';
            str1[9]='\0';
            break;
        case 2:
            for(i=7; i>2; i--)
                str1[i]=str1[i-1];
            for(i=8; i>6; i--)
                str1[i]=str1[i-1];
            str1[2]='(';
            str1[6]=')';
            str1[9]='\0';
            break;
        case 3:
            for(i=7; i>2; i--)
                str1[i]=str1[i-1];
            str1[2]='(';
            str1[8]=')';
            str1[9]='\0';
            break;
        case 4:
            for(i=7; i>4; i--)
                str1[i]=str1[i-1];
            str1[4]='(';
            str1[8]=')';
            str1[9]='\0';
            break;
        default:
            break;
        }

功能3.限定题目数量,"精美"打印输出,避免重复

1.重难点:如何实现输入数字就出现对应数量的题目

2.编程收获:在这一功能里,我和梅小雨绞尽脑汁才实现,但是必须借助记事本

 代码片段:

fp=fopen("f.txt","w+");
    while(n--)
    {
        //strcpy(str1,GetStr());
        //printf("1");
        //puts(str);
        flag=false;
        GetStr();
        if(rand()%2==1)
        {
            int KH=rand()%5;
            switch(KH)
            {
            case 0:
                for(i=7; i>0; i--)
                    str1[i]=str1[i-1];
                for(i=8; i>4; i--)
                    str1[i]=str1[i-1];
                str1[0]='(';
                str1[4]=')';
                str1[9]='\0';
                break;
            case 1:
                for(i=7; i>0; i--)
                    str1[i]=str1[i-1];
                for(i=8; i>6; i--)
                    str1[i]=str1[i-1];
                str1[0]='(';
                str1[6]=')';
                str1[9]='\0';
                break;
            case 2:
                for(i=7; i>2; i--)
                    str1[i]=str1[i-1];
                for(i=8; i>6; i--)
                    str1[i]=str1[i-1];
                str1[2]='(';
                str1[6]=')';
                str1[9]='\0';
                break;
            case 3:
                for(i=7; i>2; i--)
                    str1[i]=str1[i-1];
                str1[2]='(';
                str1[8]=')';
                str1[9]='\0';
                break;
            case 4:
                for(i=7; i>4; i--)
                    str1[i]=str1[i-1];
                str1[4]='(';
                str1[8]=')';
                str1[9]='\0';
                break;
            default:
                break;
            }
        }

 

for(int i=0; i<len; i++)
        {
            if(string1[i]<'0'||string1[i]>'9')
            {
                printf("题目数量必须是正整数。");
                flag=false;
                break;
            }

        }

 

体会与收获:

  很感谢我的伙伴——梅小雨同学,她的基础很好,在我们的合作中她对我的帮助很大,也让我学到了很多新东西,我在本科期间也按老师要求和同学组队编写过程序,但是氛围没有和梅小雨同学合作的氛围和谐,两人结对完成项目让我们的思维方式和能力都要有了很大提高,此外,我们的打字速度很慢,打字速度跟不上思维,所以耽误了很多时间,为了完成这次作业,我们走了很多弯路,也请教了学姐,结对也让我意识到我的编程基础还很薄弱,以后需要加强。

至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件:

1.在使用switch语句时我们遇到了困难,怎么运行都有问题,最后是梅小雨发现我们忘记加break了,问题才得以解决。

2.在功能一中,我们一开始一点思路也没有,不知道怎么随机运算,后来请教了学姐才有了一点思路,花费了我们一个下午的时间。

3.我们以前没有接触过单元测试,对这个很不了解,我们请教学姐以后又查了很多资料,在电脑里下载了好几个软件,还是没有成功,不仅浪费了很多时间,电脑运行也变得很卡,我当时特别烦,梅小雨同学很耐心地安慰我。

4.在功能二中,我们添加了括号以后,程序出现了很多bug,我们只好一个语句一个语句的查看,一条一条的改,其中有一处循环我们以为和功能一是一样的,直接粘贴过去,结果发现不可以,修改又用了我们好长时间。

5.在功能三中,我们先后试了for循环,while循环等好几种方法,只实现了功能三的部分功能,这种反复修改又反复失败的经历让我觉得超级心累,最大的收获就是清楚的认识到自己的水平很差。

工作地点:净月校区一食堂二楼

 照片:

 

推荐阅读