寒假作业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);
}

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

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