这个作业属于哪个课程 | 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("零"); }
下面是几个程序运行的结果:
成功的例子:
失败的例子:
来源:https://www.cnblogs.com/CoupleYoghourt/p/12234391.html