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

家住魔仙堡 提交于 2020-01-26 17:51:07
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
这个作业的目标 1.了解c语言的缺点与c++的优点 2.了解c/c++的编译过程 3.查看c++编译器的版 4.用命令行编译一份c/c++代码 5.编写一个程序
作业正文 如下

问答题
1.c语言的缺陷:①c语言作为一个面向过程的程序设计,有机会接触到底层,相较于面向对象的c++更容易在编程的时候报错
②定义了变量的类型的之后,之后的scanf和printf又要明确变量的类型,有些繁琐
③定义变量的类型与输入变量的类型不相同时,会因为损失精度而warning却不会error

2.c语言的编译过程:①.编译预处理 读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
②.编译阶段 经过预编译得到的输出文件中,将只有常量。如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,},+,-,*,,等等。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
③.汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
④.链接程序 由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。

实践题
1.查看自己的c++编译器版本
(最开始以为只要打开属性,就能有相关信息,实际操作后,真是有点尴尬。)
步骤:下载WinGW→win+R→cmd→使用cd改变地址→输入g++ -v→得到答案。

2.使用命令行编译一份C语言/C++代码。
步骤:先任意用c语言输入一份代码,保存为.exe格式,再调出cmd,运行。


得到的结果有一点尴尬,尝试调了一下兼容性,好像也不太行。

编程题
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包

样例
输入:

整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包

输出:

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

思路:我觉得题目大致就是将0、4、3、1等一系列数据进行了包装,而我们的目的就是要让计算机一看到这些 中文数字 就将其转化为阿拉伯数字进行运算,这里我采用的是方法是“定义函数scan,调用strchr函数,扫描字符串中的汉字数字并完成汉字与阿拉伯数字的转换”。最终的输出值用赋值语句进行。
缺陷:①无法进行连续的增加减少,只是机械的增加一次,减少一次。
②对于 最终值为负 与 最终值大于十 的情况无法处理。 (初学一周,还不能很好利用c语言,导致了以上的局限性,见谅。)
代码如下:

#include <stdio.h>
#include <string.h>

int scan(str)
{
        int num;
             if(strchr(str,'零')) num=0;
        else if(strchr(str,'一')) num=1;
        else if(strchr(str,'二')) num=2;
        else if(strchr(str,'三')) num=3;
        else if(strchr(str,'四')) num=4;
        else if(strchr(str,'五')) num=5;
        else if(strchr(str,'六')) num=6;
        else if(strchr(str,'七')) num=7;
        else if(strchr(str,'八')) num=8;
        else if(strchr(str,'九')) num=9;
        else if(strchr(str,'十')) num=10;
        return num;
}

void main()
{
    int a,b,c,r;
    char str1[100],str2[100],str3[100],str4[100];
    gets(str1); 
    gets(str2); 
    gets(str3);  
    gets(str4);
    int scan(str);
        a=scan(str1);
        b=scan(str2);
        c=scan(str3);
    r=a+b-c;
    if(r==10) printf("十"); 
    else if(r==9)  printf("九");
    else if(r==8)  printf("八");
    else if(r==7)  printf("七");
    else if(r==6)  printf("六");
    else if(r==5)  printf("五");
    else if(r==4)  printf("四");
    else if(r==3)  printf("三");
    else if(r==2)  printf("二");
    else if(r==1)  printf("一");
    else if(r==0)  printf("零");
}

下面是几个程序运行的结果:
成功的例子:

失败的例子:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!