寒假作业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:这次的代码只添加了负数(准确地说只有“负几”的情况),那如果是“负十几”,“负几十”,“负几十几”的情况呢?(虽然还没实践,不过我认为处理方法和“十几”,“几十”,“几十几”的情况有相似之处)。

原文地址:https://www.cnblogs.com/wq031903139/p/12319219.html