班级链接https://edu.cnblogs.com/campus/fzu/2020OOP
作业要求https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
作业目标<安装C++开发环境(见附录)。
完成问答题、实践题及编程题
发布博客>
问答题:
1.不了解c++。c语言运算符和关键字多,记不住。优先级也很多,也记不住。指针好难,不能掌握。数据类型定义经常选不好,会有数据溢出。
2.流程:C源程序头文件 --> 预编译处理(cpp) --> 编译程序本身 --> 优化程序 --> 汇编程序 --> 链接程序 -–> 可执行文件
- 编译预处理
读取C语言源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。
伪指令主要包括以下四个方面:
(1)宏定义指令
(2)条件编译指令,如#ifdef, #ifndef, #else, #elif, #endif
(3)头文件包含指令,如#include “FileName” 或者 #include 等。
(4)特殊符号,预编译程序可以识别一些特殊的符号。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
2. 编译阶段
经过预编译得到的输出文件中,将只有常量,如数字、字符串、变量的定义,以及C语言的关键字,如main, if, else, for, while, {, }, +, -, *, , 等等。预编译程序所要做的工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3. 优化阶段
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。
4. 汇编过程
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
5. 链接程序
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来。
————————————————
原文链接:https://blog.csdn.net/weixin_40756041/article/details/88052207
实践题:
1.Xcode:Version 11.0 (11A420a)
2.没懂
编程题:
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
思路:将汉字转化为数字,再按常规问题进行处理。编写两个函数。
查了百度,知道了汉字的处理方法。
代码如下:
#include
#include
int switch1(char num[])
{
if (strcmp("零", num) == 0) return 0;
if (strcmp("一", num) == 0) return 1;
if (strcmp("二", num) == 0) return 2;
if (strcmp("三", num) == 0) return 3;
if (strcmp("四", num) == 0) return 4;
if (strcmp("五", num) == 0) return 5;
if (strcmp("六", num) == 0) return 6;
if (strcmp("七", num) == 0) return 7;
if (strcmp("八", num) == 0) return 8;
if (strcmp("九", num) == 0) return 9;
if (strcmp("十", num) == 0) return 10;
return -1;
}
void switch2(int a)
{
switch (a) {
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;
}
}
int main()
{
char s1[20], s2[20], s3[20], s4[20] = { 0 };
int n = 0, a = 0, b, sum = 0;
scanf("%s%s%s%s", s1, s2, s3, s4);
n = switch1(s4);
sum = n;
if (n == -1) {
printf("错误");
return 0;
}
char a1[20] = { 0 }, a2[20] = { 0 }, a3[20] = { 0 };
while (1)
{
scanf("%s%s", a1, a2);
if (strcmp(a1, "看看") == 0)
break;
scanf("%s", a3);
a = switch1(a3);
if (a == -1) {
printf("错误");
return 0;
}
if (strcmp(a2, "增加") == 0)
sum += a;
else if (strcmp(a2, "减少") == 0)
sum -= a;
a = 0;
}
b = 10;
if (sum <= 10)
switch2(sum);
else if (sum < 20)
{
switch2(b);
switch2(sum % 10);
}
else if (sum % 10 == 0)
{
switch2(sum / 10);
switch2(b);
}
else
{
switch2(sum / 10);
switch2(b);
switch2(sum % 10);
}
return 0;
}