面向对象程序设计寒假作业1
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2020OOP |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224 |
| 这个作业的目标 | 安装开发环境,了解C/C++优缺点,编译,了解命令行特点,学会用命令行编译代码 |
| 作业正文 | 如下 |
| 其他参考文献 | https://blog.csdn.net/q_l_s/article/details/51853937 https://blog.csdn.net/csdn_violin/article/details/79430384 http://c.biancheng.net/view/132.html |
1、问答题
问题一:如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。
如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
答:之前对c++没有了解,只是看过一些相关文章。
就我自己的使用经历来看,c语言存在很多重复性质的需求,也存在很多不人性化(不很符合人类语言的语句条件设计) 比如
1、scanf()中必须用地址符输入。
2、switch语句由 case结构组成,每个 case结束之后都要使用一个 break来跳出 case结构。等等
这些都使得c语言容易造成编写上的错误,甚至因为简单的符号导致程序崩溃。
还有包括,
3、c语言对于运算符的表达过于繁琐,每一种运算符之间因为被赋予的意义不同,有着自己独特的计算顺序,这无疑加大了读者对于阅读代码的难度,也使得作者经常性得出现想象不到的失误。
除了自己的片面认识之外,也查阅了一些网上相关资料,比如
1、C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷。
2、C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
3、指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。
问题二:查阅相关资料,简述一下C语言/C++的编译过程。
C/C++程序编译流程:
预处理->编译->汇编->链接
具体的就是:
源代码→预处理器→编译器→汇编程序→目标程序→链接器→可执行程序
C语言在linux下的基本流程如图:

- 预处理
预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。
读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理
①将所有的“#define”删除,并且展开所有的宏定义
②处理所有的条件编译指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。
③处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
(注意:这个过程可能是递归进行的,也就是说被包含的文件可能还包含其他文件)
• 删除所有的注释
• 添加行号和文件名标识。
以便于编译时编译器产生调试用的行号信息及用于编译时产生的编译错误或警告时能够显示行号
• 保留所有的#pragma编译器指令 - 编译
将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。 - 汇编
将编译完的汇编代码文件翻译成机器指令,并生成可重定位目标程序的.o文件,该文件为二进制文件,字节编码是机器指令。
汇编器是将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。所以汇编器的汇编过程相对于编译器来讲比较简单,它没有复杂的语法,也没有语义,也不需要做指令优化,只是根据汇编指令和机器指令的对照表一一翻译即可。 - 链接
通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。
二、实践题
1、查看自己的C++编译器版本。
打开自己的vs程序,之后点击工具再点击工具-命令行-开发者命令提示
输入 cl.exe 查看c++编译器版本。

2、使用命令行编译一份C语言/C++代码。
运行输入多次后无果,不太明白。

三、编程题
思路
先建立一个数组把11个汉字存入
char str[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};
再写一个函数,把汉字转换为阿拉伯数字
int exchange(char a[])
{
int i;
for(i=0;i<=10;i++)
{
if((strcmp(a,str[i])==0))
return i;
}
}
建立一个输入循环
while((scanf("%s",name))!=EOF)
下面就很简单了
将每一行信息读入,识别关键字(增加 减少 值(汉字))
下面是完整代码
include<stdio.h>
include<string.h>
char str[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};
int exchange(char a[])
{
int i;
for(i=0;i<=10;i++)
{
if((strcmp(a,str[i])0))
return i;
}
}
int main()
{
char var[10],name[100],x[100],n[10];
scanf("%s %s %s %s",var,name,x,n);
int sum,a;
sum=exchange(n);
while((scanf("%s",name))!=EOF)
{
if(strcmp(name,"看看")!=0)
{
scanf("%s %s",x,n);
if(strcmp(x,"增加")0)
{
a=exchange(n);
sum+=a;
}
else if(strcmp(x,"减少")==0)
{
a=exchange(n);
sum-=a;
}
}
else
{
scanf("%s",x);
printf("%s\n",str[sum]);
}
}
return 0;
}


浙公网安备 33010602011771号