结对编程第一次实践-四则运算

时间:2021-02-10 16:37:36

  软件工程综合实践第二次作业,结对编程,编写四则运算。
  这是第二次两个人编写一个程序,上一次是两个人合作编写一个网上购书系统,并不是结对编程,因为基本上是分开进行的,在编写过程中出现了很多分歧,最后赶在结束之前勉强完成。这一次的结对编程,我将和学号为1759114的小姐姐一起完成,希望我们能够合作愉快。
  我们选择用C语言来编写这个小程序,用的是Visual Studio 2017编译器,个人感觉这个编译器自动调整格式和报错功能很实用。

  作业的要求:1.两个运算符,100以内的数字,不需要写答案。(估计时间1)
        2.现在估计写这个程序需要的时间
        3.马上把代码写出来
        4.需要写出答案,并且保证答案在0...100之间(估计时间2)
        5.有条件的请马上把程序和运算结果的截屏发到博客上
  新的要求: 1.题目避免重复
        2.可扩展性
        3.可定制(数量/打印方式)
        4.具体定制
          (1)是否有乘除法,是否有括号,数值范围,加减有无负数
          (2)除法有无余数,是否支持分数,打印中每行的间隔可调整
    现在估计做好这个软件需要多长时间

  我们选择了加和减两个比较简单的运算符,先从简单的开始,减少结对编程中的矛盾,预计时间20分钟,我本来打算把界面设计一并做好,听取小姐姐的建议,界面设计可以在后面进行添加,把加减做成两个函数,通过随机数生成器,随机选择加减法运算。我觉得这个建议很不错,更方便后面添加更多的功能。考虑到使用随机数函数并不是很熟悉,我去百度了这个函数。

 结对编程第一次实践-四则运算

 

结对编程第一次实践-四则运算结对编程第一次实践-四则运算
//method.h
#pragma once
#ifndef __METHOD_H__
#define __METHOD_H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//函数声明
void Interface();
char Symbol();
int Number();
void addition();
void subtraction();
void swap();

void Interface() {    //主界面
    int num;    //用于存储输入的题量
    char sym;    //用于存储生成的符号
    printf("请输入题量:");    
    scanf_s("%d", &num);    //输入题量
    for (int i = 0; i < num; i++){    //循环进行
        sym = Symbol();
        if (sym == '+')addition();    //输出加法运算式
        else subtraction();    //输出减法运算式
    }
}

char Symbol() {    //随机生成符号
    int num;    //用于存储生成的数字,1-2代表+和-
    srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 1 + 1;    //种子生成器,产生1-2之间的数字
    if (num == 1)return '+';    //为1返回+
    else return '-';    //为2返回-
}

int Number() {    //随机生成整数
    int num;    //用于存储生成的数字
    srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 1 + 98;    //种子生成器,产生1-99之间的数字
    return num;
}

void addition() {    //加法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 + num2;    //将两个数的和赋给result
    printf("%d + %d = \n", num1, num2);    //打印运算式
}

//考虑没有负数结果的运算,写一个用于交换数字的函数
void swap(int &num1, int &num2) {    //交换函数
    if (num1 < num2) {
        num1 = num1 + num2;
        num2 = num1 - num2;
        num1 = num1 - num2;
    }
}

void subtraction() {    //减法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    swap(num1, num2);
    result = num1 - num2;    //将两个数的和赋给result
    printf("%d - %d = \n", num1, num2);    //打印运算式
}

#endif

//main.cpp
#include "pch.h"
#include "method.h"

int main()
{
    Interface();    //主界面函数
    return 0;
}
View Code

  结对编程第一次实践-四则运算

 

  由于在写代码的过程中添加了注释和讨论,比预计的20分钟久了很多,共用时33:22,在运行的时候发现生成的数字都是一样的,没有做到不重复,就开始找错误,查资料和纠错用了大概十几分钟。debug的过程真的是痛并快乐着,找到bug并修复的喜悦和找不到bug,找到bug却不知道怎么改的烦恼。

void Interface() {    //主界面
    int num;    //用于存储输入的题量
    char sym;    //用于存储生成的符号
    srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    printf("请输入题量:");    
    scanf_s("%d", &num);    //输入题量
    for (int i = 0; i < num; i++){    //循环进行
        sym = Symbol();
        if (sym == '+')addition();    //输出加法运算式
        else subtraction();    //输出减法运算式
    }
}

char Symbol() {    //随机生成符号
    int num;    //用于存储生成的数字,1-2代表+和-
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 2 + 1;    //种子生成器,产生1-2之间的数字
    if (num == 1)return '+';    //为1返回+
    else return '-';    //为2返回-
}

int Number() {    //随机生成整数
    int num;    //用于存储生成的数字
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 99 + 1;    //种子生成器,产生1-99之间的数字
    return num;
}

 

结对编程第一次实践-四则运算

 

  修改的几处代码,发现我把随机数函数写错了,我们两个人都没有发现这个错误,结果耗费了更多的时间。在编写的过程中,我们的编写风格差异并不大,可能是由于编译器的缘故,自动调整格式。在编写的过程中,我们忘记了声明函数,在编译器的提醒下,我们把bug修复,最终运行出了结果。

  总结一下得失:第一次结对编程不免有些分歧,比起一个人效率慢一些,但是结对编程可以避免我一个敲代码时经常偷懒的坏习惯,而且能够给出建议,选择更好更优的解决方案。小姐姐和我分别分摊了加减法,随机数生成,主界面函数,可能是程序并不是特别复杂,在处理上没有太大的问题。

  开始下一个环节,写出答案且答案在0-100之间,我们在之前的代码编写中考虑到了答案的问题,所以在修改上可以更加便捷,预计时间5分钟。

结对编程第一次实践-四则运算

void addition() {    //加法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 + num2;    //将两个数的和赋给result
    if (result > 100)addition();    //如果结果大于100,重新调用该函数
    else printf("%d + %d = %d\n", num1, num2, result);    //打印运算式
}

void subtraction() {    //减法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    swap(num1, num2);
    result = num1 - num2;    //将两个数的差赋给result
    printf("%d - %d = %d\n", num1, num2, result);    //打印运算式
}

  修改量并不是很大,用了大概三分钟的时间实现了功能。毫无分歧的实现了这个功能,离目标已经不远了。题目不重复基本实现,打印数量可以自己输入,剩下的就是打印方式和具体定制。看了要求后,感觉我们理解错了意思,不过也没太大问题,在后面我们会添加更多的功能。

  功能要实现的多了,我们就开始出现了分歧,不知道该怎么处理比较好。由于时间有限,我们只实现了一部分的功能,再加上结对编程出现了分歧,在如何处理上,产生了矛盾。在后面的处理上,没有考虑到修改方便的问题,复制了很多代码,显得代码很长很多,基本上都是重复的操作,在实现功能上,没有足够的时间去继续处理,已经花了很多的时间在实现功能上,我们最后实现的结果就定下了。

  我们希望尽快完成,但是越急反而效率越低,在代码测试过程中出现了许多小bug,很多都是复制过来没有进行修改。最后我们实现了加法运算,减法有无余数的运算,乘法运算,除法有无余数的运算,混合无负数、无余数的运算和混合有负数、有余数的运算,输出有答案和无答案的运算式,可以自己选择题目数量和一行显示的题目数量(1-4)个,放弃了分数运算(这个讨论的时候就感觉太过复杂,先实现了简单的,然后时间消耗太久放弃了),放弃了括号(没有实现可以选择几个数进行四则运算的功能),每行的间隔可调整被改成了每行放几个运算式,还有就是不能进行答案判断正误。

  我把四则运算的函数改成了int型,是为了能够进行多个数之间的四则运算,由于时间有限,未能实现该功能,截取了其中一部分功能。结对编程第一次实践-四则运算

 

结对编程第一次实践-四则运算  

 

//method.h
#pragma once
#ifndef __METHOD_H__
#define __METHOD_H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//函数声明
void Interface();    //主界面
char Symbol();    //随机生成符号
int Number();    //随机生成数字
int addition(char judge);    //加法运算
int subtraction(char judge, char Judge);    //减法运算
void swap();    //交换函数
int multiplication(char judge);    //乘法运算
int division(char judge, char Judge);    //除法运算

void Interface() {    //主界面
    int num;    //用于存储输入的数字
    int n;    //用于选择一行输出的运算式数量
    char judge;    //用于选择是与否
    char Judge;    //用于减法有无负数和除法有无余数
    char sym;    //用于存储生成的符号
    srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    printf("**********************************欢迎使用四则运算**********************************\n");
    printf("\n\n\n");
    printf("                         **********************************                         \n");
    printf("                         **          1.加法运算          **                         \n");
    printf("                         **          2.减法无负          **                         \n");
    printf("                         **          3.减法有负          **                         \n");
    printf("                         **          4.乘法运算          **                         \n");
    printf("                         **          5.除法无余          **                         \n");
    printf("                         **          6.除法有余          **                         \n");
    printf("                         **          7.混合有负余        **                         \n");
    printf("                         **          8.混合无负余        **                         \n");
    printf("                         **          0.退出程序          **                         \n");
    printf("                         **********************************                         \n");
    printf("\n\n\n");
    printf("**************************************请选择:**************************************\n");
    do {
        scanf_s("%d", &num);    //输入选择
        if (num == 0)exit(1);    //退出程序
        else if (num == 1) {    //加法运算
            num = 0;
            sym = '+';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
        }
        else if (num == 2) {    //减法无负
            num = 0;
            sym = '-';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 3) {    //减法有负
            num = 0;
            sym = '-';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else if (num == 4) {    //乘法运算
            num = 0;
            sym = '*';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
        }
        else if (num == 5) {    //除法无余
            num = 0;
            sym = '/';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else if (num == 6) {    //除法有余
            num = 0;
            sym = '/';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 7) {    //混合有余负
            num = 0;
            sym = 'R';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 8) {    //混合无余负
            num = 0;
            sym = 'R';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else printf("错误选项!请重新选择:");
    } while (num != 0);
    char s = sym;    //存储符号备份
    printf("请输入题量:");    
    scanf_s("%d", &num);    //输入题量
    printf("请输入一行显示运算式数量(1-4):");
    scanf_s("%d", &n);    //输入数量
    for (int i = 0; i < num; i++){    //循环进行
        if (s == 'R')sym = Symbol();    //随机生成符号
        if (sym == '+')addition(judge);    //输出加法运算式
        else if (sym == '-')subtraction(judge,Judge);    //输出减法运算式
        else if (sym == '*')multiplication(judge);    //输出乘法运算式
        else if (sym == '/')division(judge,Judge);    //输出除法运算式
        if ((i + 1) % n == 0 && i != 0)printf("\n");
    }
    printf("\n");
}

char Symbol() {    //随机生成符号
    int num;    //用于存储生成的数字,1-2代表+和-
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 4 + 1;    //种子生成器,产生1-4之间的数字
    if (num == 1)return '+';    //为1返回+
    else if (num == 2) return '-';    //为2返回-
    else if (num == 3) return '*';    //为3返回×
    else return '/';    //为4返回÷
}

int Number() {    //随机生成整数
    int num;    //用于存储生成的数字
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 99 + 1;    //种子生成器,产生1-99之间的数字
    return num;
}

int addition(char judge) {    //加法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 + num2;    //将两个数的和赋给result
    if (result > 100)addition(judge);    //如果结果大于100,重新调用该函数
    else if(judge == '1') printf("%d + %d = %d\t\t", num1, num2, result);    //打印有答案的运算式
    else printf("%d + %d = \t\t", num1, num2);    //打印无答案的运算式
    return result;
}

//考虑没有负数结果的运算,写一个用于交换数字的函数
void swap(int &num1, int &num2) {    //交换函数
    if (num1 < num2) {
        num1 = num1 + num2;
        num2 = num1 - num2;
        num1 = num1 - num2;
    }
}

int subtraction(char judge, char Judge) {    //减法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    if(Judge == 1)swap(num1, num2);    //无负运算
    result = num1 - num2;    //将两个数的差赋给result
    if(judge == '1')printf("%d - %d = %d\t\t", num1, num2, result);    //打印有答案运算式
    else printf("%d - %d = \t\t", num1, num2);    //打印无答案运算式
    return result;
}

int multiplication(char judge) {    //乘法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 * num2;    //将两个数的积赋给result
    if (result > 100)multiplication(judge);    //如果结果大于100,重新调用该函数
    else if(judge == '1') printf("%d × %d = %d\t\t", num1, num2, result);    //打印有答案运算式
    else printf("%d × %d = \t\t", num1, num2);    //打印无答案运算式
    return result;
}

int division(char judge, char Judge) {    //除法运算
    int result;    //用于存储结果
    int remainder;    //用于存储余数
    int num1, num2;    //用于存储生成的两个数字
    num2 = Number();    //调用随机生成函数赋给num2
    if (Judge == 1) {
        num1 = num2 * (rand() % 10 + 1);    //将num2的整数倍传给num1,整除无余数
        result = num1 / num2;    //将num1和num2的商赋给result
        if (num1 > 100)division(judge, Judge);    //如果被除数num1大于100,重新调用该函数
        else if (judge == '1') printf("%d ÷ %d = %d\t\t", num1, num2, result);    //打印有答案运算式
        else printf("%d ÷ %d = \t\t", num1, num2);    //打印无答案运算式
    }
    else {
        num1 = Number();    //有余数的运算
        result = num1 / num2;    //将num1和num2的商赋给result
        remainder = num1 % num2;    //将num1和num2的余数赋给remainer
        if (judge == '1') printf("%d ÷ %d = %d 余 %d\t\t", num1, num2, result, remainder);    //打印有答案运算式
        else printf("%d ÷ %d = \t\t", num1, num2);    //打印无答案运算式
    }
    return result;
}

#endif

//main.cpp
#include "pch.h"
#include "method.h"

int main()
{
    while (1) {
        Interface();    //主界面函数
    }
    return 0;
}

  总结得失:在添加功能的函数上存在着一些不同的意见,在这上面浪费了很多时间,不过有更多不同的想法;在分工上,各自选择了要实现的功能,因为用一台电脑进行编写,一人编写,一人辅助纠错,不会出现两个人分别实现功能最后在连接上出现大量错误的问题;第一次结对编程,比起一个人实现,效率有些低,还会出现很多分歧,感觉如果处理得好会是一个很好的编写程序的方法。

  对未实现的功能感到不是很满足,我又修改了自己的代码,让功能变得更加完整,不过没有处理好除法上的问题,因为设定的数字类型都是int型,所以在做除法运算会出现一定的问题,最后使得结果在+-100之间,勉强实现多位数字之间的运算,放弃了乘除法先运算的问题,便都加上了括号。

#pragma once
#ifndef __METHOD_H__
#define __METHOD_H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//#define A a+b    //定义加法
//#define S a-b    //定义减法
//#define M a*b    //定义乘法
//#define D a/b    //定义除法

//函数声明
void Interface();    //主界面
char Symbol();    //随机生成符号
int Number();    //随机生成数字
int addition(char judge);    //加法运算
int subtraction(char judge, char Judge);    //减法运算
void swap();    //交换函数
int multiplication(char judge);    //乘法运算
int division(char judge, char Judge);    //除法运算
int Multi_digit(int number);    //多位数字运算

void Interface() {    //主界面
    int num;    //用于存储输入的数字
    int n;    //用于选择一行输出的运算式数量
    int number;    //存储位数
    char judge;    //用于选择是与否
    char Judge;    //用于减法有无负数和除法有无余数
    char sym;    //用于存储生成的符号
    srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    printf("**********************************欢迎使用四则运算**********************************\n");
    printf("\n\n\n");
    printf("                         **********************************                         \n");
    printf("                         **          1.加法运算          **                         \n");
    printf("                         **          2.减法无负          **                         \n");
    printf("                         **          3.减法有负          **                         \n");
    printf("                         **          4.乘法运算          **                         \n");
    printf("                         **          5.除法无余          **                         \n");
    printf("                         **          6.除法有余          **                         \n");
    printf("                         **          7.混合有负余        **                         \n");
    printf("                         **          8.混合无负余        **                         \n");
    printf("                         **          9.多位数字运算      **                         \n");
    printf("                         **          0.退出程序          **                         \n");
    printf("                         **********************************                         \n");
    printf("\n\n\n");
    printf("**************************************请选择:**************************************\n");
    do {
        scanf_s("%d", &num);    //输入选择
        if (num == 0)exit(1);    //退出程序
        else if (num == 1) {    //加法运算
            num = 0;
            sym = '+';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
        }
        else if (num == 2) {    //减法无负
            num = 0;
            sym = '-';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 3) {    //减法有负
            num = 0;
            sym = '-';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else if (num == 4) {    //乘法运算
            num = 0;
            sym = '*';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
        }
        else if (num == 5) {    //除法无余
            num = 0;
            sym = '/';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else if (num == 6) {    //除法有余
            num = 0;
            sym = '/';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 7) {    //混合有余负
            num = 0;
            sym = 'R';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '1';
        }
        else if (num == 8) {    //混合无余负
            num = 0;
            sym = 'R';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            Judge = '0';
        }
        else if (num == 9) {    //多位数字运算
            num = 0;
            sym = 'M';
            printf("是否输出答案(是(1),否(0)):");
            getchar();
            scanf_s("%c", &judge);
            printf("请输入要进行运算的位数:");
            scanf_s("%d", &number);
        }
        else printf("错误选项!请重新选择:");
    } while (num != 0);
    char s = sym;    //存储符号备份
    printf("请输入题量:");    
    scanf_s("%d", &num);    //输入题量
    printf("请输入一行显示运算式数量(1-4):");
    scanf_s("%d", &n);    //输入数量
    for (int i = 0; i < num; i++){    //循环进行
        if (s == 'M') {
            Multi_digit(number);
            if ((i + 1) % n == 0 && i != 0)printf("\n");
        }
        else {
            if (s == 'R')sym = Symbol();    //随机生成符号
            if (sym == '+')addition(judge);    //输出加法运算式
            else if (sym == '-')subtraction(judge, Judge);    //输出减法运算式
            else if (sym == '*')multiplication(judge);    //输出乘法运算式
            else if (sym == '/')division(judge, Judge);    //输出除法运算式
            if ((i + 1) % n == 0 && i != 0)printf("\n");
        }
    }
    printf("\n");
}

char Symbol() {    //随机生成符号
    int num;    //用于存储生成的数字,1-2代表+和-
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 4 + 1;    //种子生成器,产生1-4之间的数字
    if (num == 1)return '+';    //为1返回+
    else if (num == 2) return '-';    //为2返回-
    else if (num == 3) return '*';    //为3返回×
    else return '/';    //为4返回÷
}

int Number() {    //随机生成整数
    int num;    //用于存储生成的数字
    //srand((unsigned)time(NULL));    //重新“播种”,改变种子,让生成的数字改变
    num = rand() % 99 + 1;    //种子生成器,产生1-99之间的数字
    return num;
}

int addition(char judge) {    //加法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 + num2;    //将两个数的和赋给result
    if (result > 100)addition(judge);    //如果结果大于100,重新调用该函数
    else if(judge == '1') printf("%d + %d = %d\t\t", num1, num2, result);    //打印有答案的运算式
    else printf("%d + %d = \t\t", num1, num2);    //打印无答案的运算式
    return result;
}

//考虑没有负数结果的运算,写一个用于交换数字的函数
void swap(int &num1, int &num2) {    //交换函数
    if (num1 < num2) {
        num1 = num1 + num2;
        num2 = num1 - num2;
        num1 = num1 - num2;
    }
}

int subtraction(char judge, char Judge) {    //减法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    if(Judge == 1)swap(num1, num2);    //无负运算
    result = num1 - num2;    //将两个数的差赋给result
    if(judge == '1')printf("%d - %d = %d\t\t", num1, num2, result);    //打印有答案运算式
    else printf("%d - %d = \t\t", num1, num2);    //打印无答案运算式
    return result;
}

int multiplication(char judge) {    //乘法运算
    int result;    //用于存储结果
    int num1, num2;    //用于存储生成的两个数字
    num1 = Number();    //调用随机生成函数赋给num1
    num2 = Number();    //调用随机生成函数赋给num2
    result = num1 * num2;    //将两个数的积赋给result
    if (result > 100)multiplication(judge);    //如果结果大于100,重新调用该函数
    else if(judge == '1') printf("%d × %d = %d\t\t", num1, num2, result);    //打印有答案运算式
    else printf("%d × %d = \t\t", num1, num2);    //打印无答案运算式
    return result;
}

int division(char judge, char Judge) {    //除法运算
    int result;    //用于存储结果
    int remainder;    //用于存储余数
    int num1, num2;    //用于存储生成的两个数字
    num2 = Number();    //调用随机生成函数赋给num2
    if (Judge == 1) {
        num1 = num2 * (rand() % 10 + 1);    //将num2的整数倍传给num1,整除无余数
        result = num1 / num2;    //将num1和num2的商赋给result
        if (num1 > 100)division(judge, Judge);    //如果被除数num1大于100,重新调用该函数
        else if (judge == '1') printf("%d ÷ %d = %d\t\t", num1, num2, result);    //打印有答案运算式
        else printf("%d ÷ %d = \t\t", num1, num2);    //打印无答案运算式
    }
    else {
        num1 = Number();    //有余数的运算
        result = num1 / num2;    //将num1和num2的商赋给result
        remainder = num1 % num2;    //将num1和num2的余数赋给remainer
        if (judge == '1') printf("%d ÷ %d = %d 余 %d\t\t", num1, num2, result, remainder);    //打印有答案运算式
        else printf("%d ÷ %d = \t\t", num1, num2);    //打印无答案运算式
    }
    return result;
}

int Multi_digit(int number){
    int n[10];
    char s[10];
    int *num = n, result;
    char *sym = s;
    num[0] = Number();
    result = num[0];
    for (int i = 1; i < number; i++){
        sym[i] = Symbol();
        num[i] = Symbol();
    }
    for (int i = 1; i < number; i++){
        switch (sym[i]) {
        case '+':result += num[i]; break;
        case '-':result -= num[i]; break;
        case '*':result *= num[i]; break;
        case '/':result /= num[i]; break;
        }
    }
    if (result > 100 || result < -100)Multi_digit(number);
    else {
        for (int i = 1; i < number; i++) {
            printf("(");
        }
        printf("%d", num[0]);
        for (int i = 1; i < number; i++) {
            printf(" %c %d) ", sym[i], num[i]);
        }
        printf(" = %d\t\t", result);
    }
    return result;
}

#endif

结对编程第一次实践-四则运算

 

  两个人纠错总是比一个人纠错有趣,而且会少犯一些错误,大大提高了测试上的效率,由于结对编程需要两人使用一台电脑进行,需要分配时间一起进行编写,时间上不是很充足,在功能的实现上也很勉强。总体上来说,结对编程的收获大于一个人的编程,希望我们两人能在接下来的结对编程测试中配合默契,完成更多的程序。

  小姐姐的合作感言:非常高兴能再次跟学号为1759130的同学结对编程,我在编程以及其他方面上的不足恰好他都可以弥补。虽然过程中遇到了很多小困难,但在我和搭档的共同努力下,克服了困难并顺利完成任务。

  最后这篇博文由我来发布,这也是她对我的信任,希望我们在接下来的结对编程中能做得更好,感谢她与我一起完成这一个小程序。