zoukankan      html  css  js  c++  java
  • 寒假作业2

    这个作业属于哪个课程 2020年面向对象程序设计
    这个作业要求在哪里 寒假作业2
    作业正文 实践题 编程题
    参考文献 GitHub Desktop

    实践题

    安装好GitHub Desktop后,选择File->New repository后填上信息。

    之后找到路径,并将文件放入其中,再次点击GitHub Desktop即可发现文件已被放入。


    然后点击Commit to master提交即可。

    编程题

    在作业1中,我只考虑到了输入为单个数字的时候,忽略了“十几”“几十”“几十几”的情况。查阅资料得,因为输入输出均为GBK编码,而GBK编译一个汉字占两个字节,于是可以通过对所占字节的大小来判断输入输出的形式。
    假设d[10]是输入的字符串,则对d进行所占字节的判断:
    ①当d占两个字节,即输入形式类似于“零一二”时:

     if (strlen(d) == 2) sum = change1(d);/*change1函数是将输入的白话文数字转化为阿拉伯数字*/
    

    ②当d占四个字节时,有两种情况,一是输入形式为“十几”,二是输入形式为“几十”:

     if (strlen(d) == 4)
            {
                i[0] = d[0];
                i[1] = d[1];
                i[2] = '';
                if (change1(i) == 10)       //输入形式为“十几”时
                {
                    i[0] = d[2]; 
                    i[1] = d[3];
                    i[2] = '';
                    sum = 10 + change1(i);
                }
                else                       //输入形式为“几十”时
                {
                    sum = change1(i) * 10;
                }
            }
    

    ③当d占六个字节,即输入形式为“几十几”时:

    if (strlen(d) == 6)
            {
                i[0] = d[0];
                i[1] = d[1];
                i[2] = '';
                sum = change1(i) * 10;
                i[0] = d[4];
                i[1] = d[5];
                sum = sum + change1(i);
            }
    

    再在所需之处用上以上三种情况,就可以考虑到当输入范围在(零~九十九)之间的数了。
    完整代码如下:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int sum,k;
        int change1(char d[10]);
        void change2(int sum);
        char a[10], b[10], c[10], d[10],e[10],f[10],g[10],h[10],i[10],j[10];
        scanf("%s %s %s %s", a, b, c, d);
        if (strcmp("整数", a) == 0 && strcmp("钱包", b) == 0 && strcmp("等于", c) == 0)
        {
            if (strlen(d) == 2) sum = change1(d);
            if (strlen(d) == 4)
            {
                i[0] = d[0];
                i[1] = d[1];
                i[2] = '';
                if (change1(i) == 10)
                {
                    i[0] = d[2];
                    i[1] = d[3];
                    i[2] = '';
                    sum = 10 + change1(i);
                }
                else
                {
                    sum = change1(i) * 10;
                }
            }
            if (strlen(d) == 6)
            {
                i[0] = d[0];
                i[1] = d[1];
                i[2] = '';
                sum = change1(i) * 10;
                i[0] = d[4];
                i[1] = d[5];
                sum = sum + change1(i);
            }
        }
        scanf("%s", e);
        while(strcmp("钱包", e) == 0)
        {
            scanf("%s %s", f, g);
            if (strcmp("增加", f) == 0)
            {
                if (strlen(g) == 2)
                    sum = sum + change1(g);
                if (strlen(g) == 4)
                {
                    i[0] = g[0];
                    i[1] = g[1];
                    i[2] = '';
                    if (change1(i) == 10)
                    {
                        i[0] = g[2];
                        i[1] = g[3];
                        i[2] = '';
                        sum = sum+10 + change1(i);
                    }
                    else
                    {
                        sum = sum+change1(i) * 10;
                    }
                }
                if (strlen(g) == 6)
            {
                i[0] = g[0];
                i[1] = g[1];
                i[2] = '';
                k = change1(i) * 10;
                i[0] = g[4];
                i[1] = g[5];
                k = k + change1(i);
                sum = sum + k;
            }
            }
            if (strcmp("减少", f) == 0)
            {
                if (strlen(g) == 2)
                    sum = sum - change1(g);
                if (strlen(g) == 4)
                {
                    i[0] = g[0];
                    i[1] = g[1];
                    i[2] = '';
                    if (change1(i) == 10)
                    {
                        i[0] = g[2];
                        i[1] = g[3];
                        i[2] = '';
                        sum = sum - 10 - change1(i);
                    }
                    else
                    {
                        sum = sum - change1(i) * 10;
                    }
                }
                if (strlen(g) == 6)
                {
                    i[0] = g[0];
                    i[1] = g[1];
                    i[2] = '';
                    k = change1(i) * 10;
                    i[0] = g[4];
                    i[1] = g[5];
                    k = k + change1(i);
                    sum = sum - k;
                }
            }
            scanf("%s", e);
        }
        if (strcmp("看看", e) == 0)
        {
            scanf("%s", h);
            if (strcmp("钱包", h) == 0)
            {
                if (sum >= 0 && sum <= 10)
                {
                    change2(sum);
                }
                else if (sum > 10 && sum < 20)
                {
                    printf("十");
                    change2(sum);
                }
                else if (sum % 10 == 0 && sum >= 20)
                {
                    change2(sum);
                    printf("十");
                }
                else
                {
                    change2(sum / 10);
                    printf("十");
                    change2(sum % 10);
                }
            }
        }
        return 0;
    }
    int change1(char d[ ])
    {
        int sum;
        if (strcmp("零", d) == 0)
            sum = 0;
        if (strcmp("一", d) == 0)
            sum = 1;
        if (strcmp("二", d) == 0)
            sum = 2;
        if (strcmp("三", d) == 0)
            sum = 3;
        if (strcmp("四", d) == 0)
            sum = 4;
        if (strcmp("五", d) == 0)
            sum = 5;
        if (strcmp("六", d) == 0)
            sum = 6;
        if (strcmp("七", d) == 0)
            sum = 7;
        if (strcmp("八", d) == 0)
            sum = 8;
        if (strcmp("九", d) == 0)
            sum = 9;
        if (strcmp("十", d) == 0)
            sum = 10;
            return (sum);
    }
    void change2(int sum)
    {
        switch (sum)
        {
        case 0:printf("零"); break;
        case 1:printf("一"); break;
        case 2:printf("二"); break;
        case 3:printf("三"); break;
        case 4:printf("四"); break;
        case 5:printf("五"); break;
        case 6:printf("六"); break;
        case 7:printf("七"); break;
        case 8:printf("八"); break;
        case 9:printf("九"); break;
        case 10:printf("十"); break;
        }
    }
    

    测试结果:

    不足之处:
    虽然考虑了比之前更多的情况,但是方法不够简便,需要每次判断一遍,所以使得代码不够简洁,无法达到每个函数的行数在15行之内。
    命名规范我上网查阅,发现有很多(下划线命名法等),但是能力有限,还没掌握。

    制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
    示例脚本:

    gcc 1.cpp -o lang.exe
    

    这一部分真的好难,查阅了资料后还是选择用Windows批处理。
    以下是我写的脚本代码:

    写完后另存为.bat文件,注意编码要选择ANSI,不然点击时会出现一串很奇怪的文字。我将自己的代码保存至桌面,命名为after.cpp

    输入atfer.cpp后弹出编译成功。

    进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
    示例脚本:

    gcc 1.cpp test.cpp -o test.exe
    test
    

    我测试了两个函数,一是将白话文数字转化为阿拉伯数字,二是将阿拉伯数字转化为白话文数字。
    脚本代码如下:

    ①:将白话文数字转化为阿拉伯数字。
    单元代码

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	void change2(int sum);
    	int a = 7;
    	change2(a);
    	return 0;
    }
    void change2(int sum)
    {
        switch (sum)
        {
        case 0:printf("零"); break;
        case 1:printf("一"); break;
        case 2:printf("二"); break;
        case 3:printf("三"); break;
        case 4:printf("四"); break;
        case 5:printf("五"); break;
        case 6:printf("六"); break;
        case 7:printf("七"); break;
        case 8:printf("八"); break;
        case 9:printf("九"); break;
        case 10:printf("十"); break;
        }
    }
    

    ②将阿拉伯数字转化为白话文数字。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int change1(char d[]);
        char d[10] = "七";
        int a;
        a = change1(d);
        printf("%d", a);
    	return 0;
    }
    int change1(char d[])
    {
        int sum;
        if (strcmp("零", d) == 0)
            sum = 0;
        if (strcmp("一", d) == 0)
            sum = 1;
        if (strcmp("二", d) == 0)
            sum = 2;
        if (strcmp("三", d) == 0)
            sum = 3;
        if (strcmp("四", d) == 0)
            sum = 4;
        if (strcmp("五", d) == 0)
            sum = 5;
        if (strcmp("六", d) == 0)
            sum = 6;
        if (strcmp("七", d) == 0)
            sum = 7;
        if (strcmp("八", d) == 0)
            sum = 8;
        if (strcmp("九", d) == 0)
            sum = 9;
        if (strcmp("十", d) == 0)
            sum = 10;
        return (sum);
    }
    

    但是不知道为什么我的没有跳出来结果...
    一直是以下画面

  • 相关阅读:
    Java 中几种常用的线程池
    阿里巴巴java工程师面试经验详情
    设计模式-备忘录模式
    设计模式-职责链模式
    设计模式-中介者模式
    设计模式-解释器模式
    设计模式-观察者模式
    设计模式-迭代器模式
    设计模式-命令模式
    设计模式-模板方法模式
  • 原文地址:https://www.cnblogs.com/wq031903139/p/12267173.html
Copyright © 2011-2022 走看看