结对编程总结

1.结对编程题目是:面向小学生,随机生成30个100以内的四则运算,并且用户可以录入结果,检查用户录入的结果是否是正确的。

2.结对编程对象:叶小娟,代码共计:326行

3.

4.代码

#include <stdio.h>  //计算器
#include <malloc.h>
#include <stdlib.h>

#define STACK_SIZE        100    //max size of the stack
#define STACK_INCREMENT    10    //realloc size

typedef struct FStack  //stack of int
{
    float* base;
    float* top;
    int stacksize;
}FStack;

void Init(FStack* s)
{
    s->base = (float*)malloc(STACK_SIZE * sizeof(FStack));
    if (!s->base)
    {
        printf("overflow!\n");
        return;
    }
    s->top = s->base;
    s->stacksize = STACK_SIZE;
}

bool isEmpty(FStack* s)
{
    if (s->top == s->base)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void Push(FStack* s, float e)
{
    if (s->top - s->base >= s->stacksize)
    {
        printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);
        s->base = (float*)realloc(s->base, (s->stacksize + sizeof(FStack)));
        if (!s->base)
        {
            printf("overflow!\n");
            return;
        }
        s->top = s->base + s->stacksize;
        s->stacksize += STACK_INCREMENT;
    }
    *(s->top) = e;
    (s->top)++;
}

float GetTop(FStack* s)
{
    if (s->top == s->base)
    {
        printf("stack is empty!\n");
        return 0;
    }
    float e = *(s->top - 1);
    return e;
}

void Pop(FStack* s)
{
    if (s->top == s->base)
    {
        printf("stack is empty!\n");
        return;
    }
    s->top--;
}

typedef struct CStack  //stack of char
{
    char* base;
    char* top;
    int stacksize;
}CStack;

void Init(CStack* s)
{
    s->base = (char*)malloc(STACK_SIZE * sizeof(CStack));
    if (!s->base)
    {
        printf("overflow!\n");
        return;
    }
    s->top = s->base;
    s->stacksize = STACK_SIZE;
}

bool isEmpty(CStack* s)
{
    if (s->top == s->base)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void Push(CStack* s, int e)
{
    if (s->top - s->base >= s->stacksize)
    {
        printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);
        s->base = (char*)realloc(s->base, (s->stacksize + sizeof(CStack)));
        if (!s->base)
        {
            printf("overflow!\n");
            return;
        }
        s->top = s->base + s->stacksize;
        s->stacksize += STACK_INCREMENT;
    }
    *(s->top) = e;
    (s->top)++;
}

char GetTop(CStack* s)
{
    if (s->top == s->base)
    {
        printf("stack is empty!\n");
        return 0;
    }
    char e = *(s->top - 1);
    return e;
}

void Pop(CStack* s)
{
    if (s->top == s->base)
    {
        printf("stack is empty!\n");
        return;
    }
    s->top--;
}

bool isOper(char ch)
{
    if (ch == ‘+‘ || ch == ‘-‘ || ch == ‘*‘ || ch == ‘/‘ || ch == ‘%‘)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int Priority(char ch)
{
    int p;
    switch (ch)
    {
    case ‘(‘:
        p = 0;
        break;
    case ‘+‘:
    case ‘-‘:
        p = 1;
        break;
    case ‘*‘:
    case ‘/‘:
    case ‘%‘:
        p = 2;
        break;
    }
    return p;
}

float Calculate(float f1, float f2, char oper)
{
    float f3;
    switch (oper)
    {
    case ‘+‘:
        f3 = f1 + f2;
        break;
    case ‘-‘:
        f3 = f1 - f2;
        break;
    case ‘*‘:
        f3 = f1 * f2;
        break;
    case ‘%‘:
        f3 = (float)((int)f1 % (int)f2);
        break;
    case ‘/‘:
        if (f2 == 0)
        {
            printf("\nDevided by zero!");
            exit(1);
        }
        else
        {
            f3 = f1 / f2;
        }
        break;
    }
    return f3;
}

float StrtoFloat(char* str, int* pos)
{
    float fRes;
    int i = *pos;
    int k;
    char n[50];
    for (k = 0; str[i] >= ‘0‘ && str[i] <= ‘9‘ || str[i] == ‘.‘; i++, k++)
    {
        n[k] = str[i];
    }
    n[k] = ‘\0‘;
    *pos = i;
    fRes = atof(n);
    return fRes;
}

bool Check(char* str)
{
    int i = 0;
    while (str[i] != ‘\0‘)
    {
        if (str[i] != ‘+‘ && str[i] != ‘-‘ && str[i] != ‘*‘ && str[i] != ‘/‘ && str[i] != ‘%‘ && str[i] != ‘.‘ && str[i] != ‘(‘ && str[i] != ‘)‘ && (str[i] < ‘0‘ || str[i] > ‘9‘))
        {
            return false;
        }
        i++;
    }
    return true;
}

void main()
{
    char exp[100];
    int i;
    float f, f1, f2;
    char oper;
    FStack fstack;
    CStack cstack;
    Init(&fstack);
    Init(&cstack);
    printf("The expression is:");
    gets(exp);
    if (!Check(exp))
    {
        printf("input error! exit now!\n");
        exit(1);
    }
    for (i = 0; exp[i] != ‘\0‘ && exp[i] != -52; i++)
    {
        if (!isOper(exp[i]))
        {
            f = StrtoFloat(exp, &i);
            Push(&fstack, f);
        }
        if (isOper(exp[i]))
        {
            if (!isEmpty(&cstack))
            {
                while (!isEmpty(&cstack) && Priority(exp[i]) <= Priority(GetTop(&cstack)))
                {
                    oper = GetTop(&cstack);
                    Pop(&cstack);
                    f2 = GetTop(&fstack);
                    Pop(&fstack);
                    f1 = GetTop(&fstack);
                    Pop(&fstack);
                    f = Calculate(f1, f2, oper);
                    Push(&fstack, f);
                }
                Push(&cstack, exp[i]);
            }
            else
            {
                Push(&cstack, exp[i]);
            }
        }
        else if (exp[i] == ‘(‘)
        {
            Push(&cstack, exp[i]);
        }
        else if (exp[i] == ‘)‘)
        {
            while (GetTop(&cstack) != ‘(‘ && !isEmpty(&cstack))
            {
                oper = GetTop(&cstack);
                Pop(&cstack);
                f2 = GetTop(&fstack);
                Pop(&fstack);
                f1 = GetTop(&fstack);
                Pop(&fstack);
                f = Calculate(f1, f2, oper);
                Push(&fstack, f);
            }
            Pop(&cstack);
        }
    }
    while (!isEmpty(&cstack))
    {
        oper = GetTop(&cstack);
        Pop(&cstack);
        f2 = GetTop(&fstack);
        Pop(&fstack);
        f1 = GetTop(&fstack);
        Pop(&fstack);
        f = Calculate(f1, f2, oper);
        Push(&fstack, f);
    }
    printf("\nThe result is:%f\n", GetTop(&fstack));
    Pop(&fstack);

    getchar();
    getchar();
    getchar();
}

5.总结:

通过这次项目的实践,我改变了对结对编程的想法。

时间: 2024-12-22 07:08:54

结对编程总结的相关文章

结对编程

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作.一个人输入代码,而另一个人审查他输入的每一行代码.输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员).两个程序员经常互换角色. 在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理.这样使得驾驶者可以集中全部注意力在完成当前任务的"战术"方面.观察员当作安全网和指南.结对编程对开发程序有很多好处.比如增加纪律性,写出更好的代码等.

软件工程------结对编程第二次

这一周我(1551426)还是继续和我们组的成员(1551419)两人一起结对编程,除此之外,我们还设计了数据库的,总共三个关系模式 room(roomtype,dailyprice,deposit) roominfo(roomnumber,roomtype,isfree) guest(id, startday,phonenumber,roomnumber,name,sex,stayday) 起初我们把room和guest 放在了一起,后来发现数据的冗余以后马上换成三个关系表. 这是我们的关系图

软工第二次实验——结对编程

1丶小组成员 卫瑞亮 1500802122 王玉卿 1500802099 2.代码链接 https://coding.net/u/qq1062718477/p/SE_task/git/commits/master/ 3.软件界面 4.结对编程照片 5.心得体会 到今天接触结对编程差不多两周了,对于结对编程有了更加深刻地理解,通过结对编程,我们可以及时的发现并解决后面可能会出现的问题,并且还能提升我们与别 人进行交流的能力,与人沟通对我们来说也是极为重要的,同时,结对编程使我们频繁进行交流,而且要

结对编程2——单元测试

 周迪 201421123089    黄睿 201421123069  coding.net 地址:http://git.oschina.net/hr2324/SoftEngHW 1.我们的代码要使它的利用率大大提高,所以我们要通过单元测试进一步完善代码,发现细小的错误.于是这次就用JUnit进行了简单四则运算的单元测试. a.需求分析:(1)在上次的基础上将计算模块单独创建一个类: (2)针对计算类做单元测试: (3)主要做整数和真分数的加减乘除: (4) 增量式开发,用git命令提交到co

结对编程2—— 单元测试

结对伙伴:201421123048,201421123036 coding.net 地址:https://git.coding.net/YJh_/PairProject_2.git a. 需求分析:测试上有哪些详细的需求? 1.把计算模块提取出来,单独创建一个类2.通过单元测试代码,测试加法是否能正确工作3.通过单元测试代码,测试加减乘除功能4.通过单元测试代码,测试计算类对于各种参数的支持 输入是有错误的,例如 "1 ++ 2" 在数值范围是 -1000 .. 1000 的时候,传进

结对编程-感想

这次大作业采用了结对编程的方式进行开发.我和赵宇航在这次结对编程中fix了绑定的bug以及进行了jmeter的配置和性能测试. 首先,我们通过讨论发现代码是正确的,但是绑定时会提示密码错误,我们思考了很久,突然想到,我们之前在"初始微信"功能开发时,将密码进行了base64加密,所以我们在调用的时候,需要用base64解码之后才可以,于是我们成功的解决了这个问题. 接下来,我们进行了jmeter的配置和学习,进行了简单的性能测试. 通过这次结对编程,我们发现结对编程确实有很多好处. 1

结对编程的体会

今天晚上,我与队友赵纯艺进行了一次结对编程,共同完成"微信抢票菜单调整"这个任务.因为在之前的开发中,我主要负责前后端借口,只是和数据库打交道,对与微信有关的接口不是很熟悉,所以在获取当前菜单和设置当前菜单时遇到了一点问题. 刚开始的时候,因为我们对彼此的工作都不是很了解,所以我花了比较长的时间向她说明我这部分的机制是如何运作的,理解了我的困惑后,她表示虽然记不太清楚,但是记得<开发指南>里有相关函数.通过查询文档,我们找到了对应的函数get_wechat_menu()和u

结对编程作业

这是第一次尝试结对编程,在本次结对编程作业中为了更好地体会它的好处和特点,我和我的搭档分别扮演了驾驶员和领航者的角色. 作为驾驶员:在我编程的过程中,出现了一些小问题,比如忘加分号,这些小问题可以及时的发现.有时我也会问我的领航者一些疑问,省去了上网查资料的过程,提高了编程的效率.在代码复审的过程中,有的问题我在自己调试的时候没有发现.比如输入某些数据的时候,离黄金点最近的玩家得0分.还有程序的功能上的一些缺陷,也被进一步完善.编程的时候我们会有一些交流,交流使我们互相更加了解对方的编程风格,在

结对编程体会

两个人思想会有不同的时候,会有讨论争执和妥协的时候,在试用了两种方法后,选择了一个比较好的编写程序,结对编程减少了自己一个人想不到问题浪费的时间,结对编程有利于自己编程能力的提高,也有利于交流思想.

构建之法阅读笔记三—结对编程

构建之法阅读笔记三——结对编程 何谓结对编程,结对编程就是程序员肩并肩,平等的,互补的进行开发工作,他们使用同一台电脑,编写同样的程序,一起分析,一起设计,一块交流想法. 然而我以前却并不是这样做的,我以前喜欢在没人打扰的环境下写代码,我觉得有人在我身边看着,会影响我的思路,还有我个人自尊心比较强,不太喜欢被人指指点点,所以每次都是,我写完代码之后,自己先找自己的bug,每当自己实在找不到之后,才会请教大神,但是有时候可能由于自己的能力不足,往往一个很简单的问题,我自己发现就会花费很久的时间,让