这个作业属于哪个课程 | 2020面向对象程序(福州大学-数学与计算机科学学院) |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业1 |
这个作业的目标 | 1.安装C++开发环境(见附录)。2.完成问答题、实践题及编程题(不要求把代码全部写出来但是要体现思路)。3.发布博客(内容要体现自己的思考过程) |
作业正文 | 面向对象程序设计寒假作业1 |
其他参考文献 | C语言真正的编译过程 |
问答题:
1.C语言的语法限制不太严格,对变量的类型约束不严格,我写代码的时候我发现就是类型不同是也会正常运行,影响程序的安全性。对数组下标越界不作检查,我发现我在写代码的时候如果数组越界了编译时也不会提醒。
2.C语言的编译过程:(我是通过上网查找资料了解到的)
【第一步】编辑hello.c
【第二步】预处理
预处理过程实质上是处理“#”,将#include包含的头文件直接拷贝到hell.c当中;将#define定义的宏进行替换,同时将代码中没用的注释部分删除等
具体做的事儿如下:
(1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换
(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些
(3)处理#include,将#include指向的文件插入到该行处
(4)删除所有注释
(5)添加行号和文件标示,这样的在调试和编译出错的时候才知道是是哪个文件的哪一行
(6)保留#pragma编译器指令,因为编译器需要使用它们。
【第三步】编译
编译的过程实质上是把高级语言翻译成机器语言的过程,即对a.c做了这些事儿
(1)词法分析,
(2)语法分析
(3)语义分析
(4)优化后生成相应的汇编代码
从 高级语言->汇编语言->机器语言(二进制)
第四步】链接
就像刚才的hello.c它使用到了C标准库的东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,
将翻译成的二进制与需要用到库绑定在一块。
实践题的话,我把软件下了好多次都不行没办法了,只能等我把软件下好再看看怎么做了。
编程题:
题目的要求是输入文字,然后也能按照文字的要求进行编译运行。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
注意:
1.输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
2.数字只会出现以下 零一二三四五六七八九十 。
对于这题编程体我的主要思路是先把文字转化为数字,让文字变成简单的东西,因为计算机在运行时不能直接识别文字。这个题目看起来其实就是简单的加减法,但是怎么样把题目要求的真正体现出来才是关键难点,要让计算机知道到底是要加还是减,加多少减多少。那如果把关键文字转变为数字和符号就可以直接解决这个问题了。
这些就是我大概的思路了(技术差见谅啊)