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

作业描述 详情
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
这个作业的目标 1:安装C++开发环境(见附录)。
2:完成问答题、实践题及编程题
3:发布博客
作业正文 1:问答题:回答以下问题:
①如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
②查阅相关资料,简述一下C语言/C++的编译过程。
2:实践题:自己动手,完成以下任务:
①查看自己的C++编译器版本。
②使用命令行编译一份C语言/C++代码。
3:编程题(请使用C语言或者C++完成以下题目)
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉
字编程的语言?汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是
几千年来中华文化的发展中一朵奇葩。今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。

问答题
1:如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
答:我对C++不了解,所以我回答第二个问题。我认为C语言的缺陷有
①:c语言有非常多的运算符,而这些运算符又分为众多优先级,在编写程序时有可能混淆。
②:定义数组时,下标总是从零开始,在问题较复杂或数组较大的情况下可能会出错,且一般这时候在语法上是没有什么错误的,而运行结果出错,于是造成错误较 难发现的情况。
③:在调用函数时只能返回一个结果数据。
④:一个c程序可能由很多部分组成,而编译器一般只能看到一个文件,因此它无法检测到需要通过观察多个源文件内容才能发现的错误。
⑤:可能会造成数据的溢出。
思考过程:首先,我回顾了一下在上个学期中在学习c语言,提交c语言作业时我遇到的几个印象比较深刻的问题。在完成了上个步骤后,我查看了一些别人对于这一问题的见解(比如第四点,是我在回顾时没有想到,在查找资料时感到十分赞同的观点)。资料通道:https://zhuanlan.zhihu.com/p/89297317

2:查阅相关资料,简述一下C语言/C++的编译过程。
答:C语言的编译过程包括预处理、编译、汇编、链接四个部分。
①:预处理:展开头文件//宏替换//去掉注释//条件编译
预处理之后得到的仍是文本文件,但文件体积会大很多。
②:编译:检查语法,生成汇编。
③:汇编:汇编过程将上一步的汇编代码转换成机器码。
④:链接:将源文件中用到的库函数与汇编生成的目标文件.o合并成可执行文件。该可执行文件会变大很多,一般是调用自己电脑上的。

实践题
自己动手,完成以下任务:
1:查看自己的C++编译器版本。
①:先设置环境变量path,因为如果不正确设置环境变量就不能正确使用相应命令。
设置path的操作为:此电脑->属性->高级系统设置->环境变量->系统变量->path->编辑
编辑时输入地址(我的是C:\Program Files (x86)\Dev-Cpp\MinGW64\bin)
②:然后打开vs,在命令行中输入cl.exe即可查看自己的编译器版本。

2:使用命令行编译一份C语言/C++代码。
①:新建一个文件夹(我的是在D盘),命名为“myc”。

②:再在此文件夹中新建一个文本文档,并将代码写入其中,然后将查看中的文件扩展名打开并将文本文档重命名(hello.c)。

③:win+r打开cmd,选择D盘(因为我的文件夹在D盘)中的myc文件。


④:然后我们将会看到原来的文件夹中出现了a.exe。

然后我就遇到了 我找了非常非常非常久都不知道怎么解决的问题:拒绝访问。我真的被拒绝好多次哈哈哈。我看到很多人说以管理员身份运行,但是,能力有限我真不知道怎么弄。

至于最后是怎么解决这个问题的,我关闭了电脑自带的查杀软件,然后它居然就给我hello出来了!!!!!

编程题
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

注意:
①输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
②数字只会出现以下 零一二三四五六七八九十 。

试一试:因为第一次接触用白话文写代码,所以我先写了一个比较简单的例子来了解其基本操作:
如下:

正经一点:
题目要求:用白话文编程。
我将其分成五个部分,分别是:①对钱包赋初值 ②将白话文的数字转换成罗马数字 ③将罗马数字转换成白话文数字 ④对钱包内的钱数进行加减法 ⑤将最终钱包内的钱数输出。
①对钱包赋初值。(除了下列情况都为非法输入)

char a[10], b[10], c[10], d[10],e[10],f[10],g[10],h[10];
   scanf("%s %s %s %s", a, b, c, d);
   if (strcmp("整数", a) == 0 && strcmp("钱包", b) == 0 && strcmp("等于", c) == 0)
   {
       sum = change1(d);
   }

②将白话文的数字转换成罗马数字(用strcmp函数来比对两个字符串是否相同)

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);
}

③将罗马数字转换成白话文数字(用switch语句来进行选择)

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;
    case 11:printf("一十一"); break;
    case 12:printf("一十二"); break;
    case 13:printf("一十三"); break;
    case 14:printf("一十四"); break;
    case 15:printf("一十五"); break;
    case 16:printf("一十六"); break;
    case 17:printf("一十七"); break;
    case 18:printf("一十八"); break;
    case 19:printf("一十九"); break;
    case 20:printf("二十"); break;
    }
}

④对钱包内的钱数进行加减法(用while语句是为了控制增加和减少的次数,并用输入的是否为“钱包”作为循环结束的标准)

scanf("%s", e);
   while(strcmp("钱包", e) == 0)
   {
       scanf("%s %s", f, g);
       if (strcmp("增加", f) == 0)
       {
           sum = sum + change1(g);
       }
       if (strcmp("减少", f) == 0)
       {
           sum = sum - change1(g);
       }
       scanf("%s", e);
   }

⑤将最终钱包内的钱数输出。(若输入的不是“钱包”,而是“看看”,则代表对钱包内的钱数的加减法到此为止,下一步则是将其输出)。

if (strcmp("看看", e) == 0)
    {
        scanf("%s", h);
        if (strcmp("钱包", h) == 0)
        {
            if (sum < 0) printf("error");
            else change2(sum);
        }
    }

完整代码:

#include <stdio.h>
#include <string.h>
int main()
{
    int sum;
    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];
    scanf("%s %s %s %s", a, b, c, d);
    if (strcmp("整数", a) == 0 && strcmp("钱包", b) == 0 && strcmp("等于", c) == 0)
    {
        sum = change1(d);
    }
    scanf("%s", e);
    while(strcmp("钱包", e) == 0)
    {
        scanf("%s %s", f, g);
        if (strcmp("增加", f) == 0)
        {
            sum = sum + change1(g);
        }
        if (strcmp("减少", f) == 0)
        {
            sum = sum - change1(g);
        }
        scanf("%s", e);
    }
    if (strcmp("看看", e) == 0)
    {
        scanf("%s", h);
        if (strcmp("钱包", h) == 0)
        {
            if (sum < 0) printf("error");
            else change2(sum);
        }
    }
    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;
    case 11:printf("一十一"); break;
    case 12:printf("一十二"); break;
    case 13:printf("一十三"); break;
    case 14:printf("一十四"); break;
    case 15:printf("一十五"); break;
    case 16:printf("一十六"); break;
    case 17:printf("一十七"); break;
    case 18:printf("一十八"); break;
    case 19:printf("一十九"); break;
    case 20:printf("二十"); break;
    }
}

得到输出:

遇到的问题:当数字超过十时应该怎么表达?(未解决)。

posted @ 2020-01-27 21:10  予我渡北川-  阅读(142)  评论(0编辑  收藏  举报