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

这个作业属于哪个课程
这个作业要求在哪里
这个作业的目标 1、安装C++开发环境2、完成问答题、实践题及编程题3、发布博客
作业正文 如下
其他参考文献

问答题:
c语言的缺陷:语法不够严格,安全性较差,不能面向对象编程,经常要考虑数组越界、地址访问之类的问题

c,c++编译过程:
1、预处理,对源码的伪指令和特殊符号进行处理
2、编译,将经过预处理之后的程序转换成特定汇编代码
3、汇编,将汇编代码转换为机器码
4、链接,将目标文件链接生成可运行文件

实践题:
原本就使用的vs,配置了环境变量,用cl语句编译生成了exe文件,打印出了hello world,编译器版本顺带显示了
2020面向对象程序设计寒假作业1 题解_第1张图片

编程题:
输入输出均支持两位数
假设输入数据有效
题目的难度在于数字和汉字的转换
f1函数通过对输入中文返回不同种类的数字,分为四类,分别是0-10,11-19,10的倍数,及形如几十几的数字
f2函数用来分离字符串中的某个汉字
f3函数用于将输入的单个汉字零-十转换为0-10
题目中有多处无用输入,用字符串a处理
具体见代码

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

#include 
#include
int f1(char* s);
void f2(char* a, char* b);
int f3(char* s);
char chinese[11][4] = { "零","一","二","三","四","五","六","七","八","九","十" };

int main(void)
{
    int i;
    char a[10];
    scanf("%s", a);
    if (strcmp(a, "整数") == 0)
    {
        int purse;
        for (i = 0; i < 3; i++)
        {
            scanf("%s", a);
        }
        purse = f1(a);
        scanf("%s", a);
        while (strcmp(a, "钱包") == 0)
        {
            scanf("%s", a);
            if (strcmp(a, "增加") == 0)
            {
                scanf("%s", a);
                purse += f1(a);
            }
            else if (strcmp(a, "减少") == 0)
            {
                scanf("%s", a);
                purse -= f1(a);
            }
            scanf("%s", a);
        }
        scanf("%s", a);
        //输出中文
        if (purse<=10)printf("%s", chinese[purse]);
        else if (purse > 10 && purse < 20)printf("十%s", chinese[purse - 10]);
        else if (purse % 10 == 0)printf("%s十", chinese[purse / 10]);
        else printf("%s十%s", chinese[purse / 10], chinese[purse % 10]);
    }
    return 0;
}

int f1(char* s)//将输入的零-九十九中文转换为数字
{
    int i;
    if (strlen(s) == 2)//处理零-十
    {
        return f3(s);
    }
    else if (strlen(s) == 4)//处理十一-十九及十的倍数
    {
        char b[10] = "";
        f2(b, s);
        if (strcmp(b, "十") == 0)
        {
            f2(b, s + 2);
            return 10 + f3(b);
        }
        else
        {
            return 10 * f3(b);
        }
    }
    else//处理形如几十几的汉字
    {
        char b[10] = "",c[10]="";
        f2(b, s);
        f2(c, s + 4);
        return 10 * f3(b) + f3(c);
    }
}
void f2(char* a,char* b)//用字符串a存储字符串b的某一个汉字
{
    a[0] = b[0];
    a[1] = b[1];
}
int f3(char*s)//将输入零-十中文转换为0-10
{
    int i;
    for (i = 0; i <= 10; i++)
    {
        if (strcmp(s, chinese[i]) == 0)
            return i;
    }
}

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