2020面向对象程序设计寒假作业3 题解

2020面向对象程序设计寒假作业3 题解



Markdown在线编辑器 - www.MdEditor.com

作业描述 作业详情
这个作业属于哪个课程 2020福大数计面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业3
这个作业的目标 1.继续完成编程题
2.发布博客
作业正文 见下文
其他参考文献 1、BAT 批处理脚本教程
2、C语言_来了解一下GCC编译器编译C可执行脚本的过程


编程题:

  • 继续完成作业二的编程题。
  • 优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。
  • 思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。

    编程题要求:

    1.读题,提取出题目的要求。
    2.分解需求,把需求分解为几个你觉得不太相关的模块。
    3.思考每个模块怎么写,可以从简单的模块开始写。
    4.对于不会的问题进行查阅资料。
    5.对于每一个模块设计测试用例。
    6.详细记录下以上每一步,并写在博客中。
    7.不要求完全做出来,但要求记录详细。
    8.建议博客长度不少于1000字(不包含代码)。

    题目要求:

    编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
    变量定义:整数 钱包 等于 零
    运算(加法):钱包 增加 四
    运算(减法):钱包 减少 四
    输出:看看 钱包
    样例
    输入:
    整数 钱包 等于 零
    钱包 增加 四
    钱包 减少 三
    看看 钱包
    输出:

    翻译过来就是 输入汉字,用汉字进行变量定义和赋初值、代替数进行加减运算。
    (数据范围定在0~99。0~10的数直接表示。11~19的数用“十x”表示。20~99的数用“x十x表示”

    分解需求:

    分解为三个模块(即 exchange函数、cum函数、back函数)


    exchange函数 用于将汉字转换成数字进行加减运算和输出。
int exchange(char s4[])
{
    char b[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
    for(int i=0;i<=10;i++){
    if( !strcmp(s4,b[i]) ) return i;
    }
}

cum函数 用于判断进行的运算 并据此将exchange得到的数进行正负转换 和原始数相加减。

int cum(char s3[],char s4[]){
    if( !strcmp(s3,"增加") ) { return exchange(s4); }
    if( !strcmp(s3,"减少") ) { return -exchange(s4); } 
}

back函数用于输出 将数字转换为汉字形式 并在输出时根据数据范围进行不同格式输出。

int back(int wal){
    char a[10][4]={"零","一","二","三","四","五","六","七","八","九"};
    if( wal >= 10 && wal <= 99){
        int x = wal%10;
        wal/=10;
        if(wal!=1) 
            printf("%s十%s",a[wal],a[x]);
        else    
            printf("十%s",a[x]);
    }
    else printf("%s",a[wal]);
}


解释:

  • 单元测试:对每一个函数进行测试,这代表了你需要把代码分到不同的文件,使用不同的主函数切换测试/运行。
  • 编译脚本:运行该脚本后无需任何输入就能自动编译全部代码,并输出编译结束的代码。
  • 测试脚本:运行该脚本后可以自动的编译并运行所有测试样例,并输出测试结果。


    对 exchange函数 进行测试

  • 测试函数
int main(){
    int x,y;
    char str1[100],str2[100];
    char s[11][4] = {"零","一","二","三","四","五","六","七","八","九","十"}; 
    printf("exchange函数测试:\n");
    freopen("Test1.txt","r",stdin); 
    while (scanf ("%s",str1) != EOF){
        y = exchange(str1);
        if (!strcmp(str1,s[y]))
        printf ("%d pass\n",y);
        else printf ("error\n");
    }
}
  • 编译脚本


    2020面向对象程序设计寒假作业3 题解_第1张图片
    2020面向对象程序设计寒假作业3 题解_第2张图片

  • 测试脚本
    使用freopen函数,编译后自动运行
    2020面向对象程序设计寒假作业3 题解_第3张图片


    对 cum函数进行测试:

  • 测试函数
int main(){
    int x,y;
    char str2[100];
    printf("cum函数测试:\n");
    freopen("Test2.txt","r",stdin);
        while (scanf("%s %d",str2,&x) != EOF){
            if (strcmp(str2,"增加") && strcmp(str2,"减少")) {
            printf ("error\n"); continue;
            }
            y = cum(str2,x);
            if (!strcmp(str2,"增加")){
                if (y >= 0)
                printf ("%d  pass\n",y); 
                else printf("error\n");}
            else if (!strcmp(str2,"减少")){
                if (y <= 0) 
                printf ("%d  pass\n",y); 
                else printf ("error\n"); } 
        }
    // 测试 cum 函数
}
  • 编译脚本:
    与 Test1 编译脚本类似。


    -测试脚本
    2020面向对象程序设计寒假作业3 题解_第4张图片

    对整个程序测试:



    2020面向对象程序设计寒假作业3 题解_第5张图片
    2020面向对象程序设计寒假作业3 题解_第6张图片
    2020面向对象程序设计寒假作业3 题解_第7张图片
    2020面向对象程序设计寒假作业3 题解_第8张图片

思考:

1.加入负数情况
若输入的汉字前有负,可以先将汉字转为阿拉伯数字。
再判断增加减少,进而转到cum函数进行计算。


以上就是我第三次作业的全部内容。

你可能感兴趣的:(2020面向对象程序设计寒假作业3 题解)