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

    这个作业属于哪个课程 2020面向对象程序设计
    这个作业要求在哪里 面向对象程序设计寒假作业3
    这个作业的目标 1:继续完成编程题 2:发布博客

    继续完成编程题

    由于每次做作业时,总会忘记上一次自己的思路,所以每次都得再次查看上次作业的代码。由于作业2中的代码只运行了一遍是正确的,就没有继续运行第二遍,然后这次又重新运行了一遍我的代码,发现...好像有做错的地方。

    为了找出这个错误然后我发现,在要输出的数为整十时,我的想法是先将整十的数量输出,然后再输出“十”。比如:输出为四十时,先输出四,再输出十。于是必须先把40除以10后,再作为参数带入“change2函数”中(我代码中的change2是将阿拉伯数字转化为白话文),而在上次作业中的代码中,此处部分我的代码如下:

      else if (sum > 10 && sum < 20)
     {
        printf("十");
        change2(sum);   //其中sum是加减过后的钱包数值
     }
    

    是的,我居然忘记输出整十的数量了

    修改后的代码如下:

    else if (sum % 10 == 0 && sum >= 20)
     {
        change2(sum/10);
        printf("十");
     }
    

    修改完后,就要开始继续完成这个编程题了。

    当输入的白话文数字为负数时:

    需要增加代码的地方有三处:①“整数 钱包 等于 负几”(给钱包赋初值时)
    ②“钱包 增加(减少) 负几”(将钱包中的钱数做加减法时)
    ③“看看 钱包”(最后输出钱包中的钱数时)

    ①“整数 钱包 等于 负几”(给钱包赋初值时)

    思路:由于“负几”是两个字的形式,与作业二中的“十几”“几十”为同一种形式,所以在优化代码时应该将此代码归于strlen(d) == 4的行列中(其中d为输入的字符数组)。修改后的代码为:
    else if (strcmp("负", i) == 0)
         {
           i[0] = d[2];
           i[1] = d[3];
           i[2] = '';
           sum =change1(i)*(-1);
         }
    

    运行结果:

    ②“钱包 增加(减少) 负几”(将钱包中的钱数做加减法时)

    思路:第一种情况:“钱包 增加 负几”相当于将原来的钱数减去一个数;

    第二种情况:“钱包 减少 负几”,减一个数相当于加上这个数的负数,所欲是将原来的钱数增加一个数。
    修改后的代码如下:

    else if (strcmp("负", i) == 0)     //"钱包 增加 负几"的情况
        {
           i[0] = g[2];
           i[1] = g[3];
           i[2] = '';
           sum = sum - change1(i);
        }
    

    运行结果:

    else if (strcmp("负", i) == 0)     //“钱包 减少 负几”的情况
         {
            i[0] = g[2];
            i[1] = g[3];
            i[2] = '';
            sum = sum + change1(i);
         }
    

    运行结果:

    ③“看看 钱包”(最后输出钱包中的钱数时)

    思路:只需先输出一个“负”字后再将钱数(在我的代码中为sum变量)乘(-1)后,再带入change2函数(change2函数为将阿拉伯数字转化成白话文数字)。

    代码如下:

    else if(sum<0)
         {
            printf("负");
    	change2(-sum); 
         }
    

    运行结果:

    完整代码如下:

    #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 if (strcmp("负", i) == 0)
                {
                    i[0] = d[2];
                    i[1] = d[3];
                    i[2] = '';
                    sum =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 if (strcmp("负", i) == 0)
                    {
                        i[0] = g[2];
                        i[1] = g[3];
                        i[2] = '';
                        sum = sum - 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 if (strcmp("负", i) == 0)
                    {
                        i[0] = g[2];
                        i[1] = g[3];
                        i[2] = '';
                        sum = sum + 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/10);
                    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;
        }
    }
    
    思考:

    1:测试脚本,唉,琢磨了挺久都无果,再想想叭
    2:这次的代码只添加了负数(准确地说只有“负几”的情况),那如果是“负十几”,“负几十”,“负几十几”的情况呢?(虽然还没实践,不过我认为处理方法和“十几”,“几十”,“几十几”的情况有相似之处)。

  • 相关阅读:
    Java乔晓松oracle的多表查询
    定义一个地址固定的变量
    J2ME的表单元素及其事件
    J2me的异常处理和多线程
    [置顶] eclipse远程部署,静态文件实时同步插件
    newlisp debugger
    启用isqlplus
    ORA27101: shared memory realm does not exist
    windows下安装node.js及less
    em启动/关闭报错解决
  • 原文地址:https://www.cnblogs.com/wq031903139/p/12319219.html
Copyright © 2011-2022 走看看