这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2020OOP/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224 |
这个作业的目标 | 1、安装c++开发环境 2、了解C语言与c++ 3、查看c++编译器版本和使用命令行 4、编程 |
作业正文 | |
其他参考文献 | ... |
一、问答题
1.c语言的缺陷
(作为一个小白,对c语言的认识也只有几个月,以下是结合网上查找的资料和自己平时写代码时遇到的问题)
1.C语言太过于灵活,作为小白,在编写程序时会有错误,但c语言只会警告,而不会报错,这就导致有时写的代码是错误的但不容易发现。
2.c语言的可移植不高,同一个程序在不同的电脑上运行结果可能不同。
3.作为小白,指针真的太难了,搞不懂。
4.c语言的数据类型较多,有时要做数据类型的强制转换,但一不小心就忘了。
2.c语言/c++的编译过程
1.编译预处理
读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
2.编译阶段
经过预编译得到的输出文件中,将只有常量。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3.优化阶段
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。 这种优化
不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
4.汇编程序
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放
的也就是与源程序等效的目标的机器语言代码。
5.连接程序
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个 源文件中定义的某个符号(如变量或者函
数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
二、实践题
1.查看自己c++编译器的版本
说实话,小白并不知道怎样查看,打开编译器和百度一顿找和摸索之后,终于让我找到了,就是这个
在编译器的选则工具栏——工具——命令行——开发者命令提示中。
2.使用命令行编译一份C语言/C++代码
但好像不行,我也不知道为啥子
三、编程题
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
注意:
输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十 。
编程题要求:
读题,提取出题目的要求。
分解需求,把需求分解为几个你觉得不太相关的模块。
思考每个模块怎么写,可以从简单的模块开始写。
对于不会的问题进行查阅资料。
对于每一个模块设计测试用例。
详细记录下以上每一步,并写在博客中。
不要求完全做出来,但要求记录详细。
(作为一名小白,在这只能硬刚了)
1.头文件就难到我了,去借鉴一下,我发现了iostream、cctype,去问了一下度娘,第一个时输入输出流,第二个是一个函数库
先写一个函数,把汉字转化成数字
include
include
int main
int convert1(char num[])
{
if (strcmp(num, "一") == 0)
return 1;
else if (strcmp(num, "二") == 0)
return 2;
else if (strcmp(num, "三") == 0)
return 3;
else if (strcmp(num, "四") == 0)
return 4;
else if (strcmp(num, "五") == 0)
return 5;
else if (strcmp(num, "六") == 0)
return 6;
else if (strcmp(num, "七") == 0)
return 7;
else if (strcmp(num, "八") == 0)
return 8;
else if (strcmp(num, "九") == 0)
return 9;
else if (strcmp(num, "零") == 0)
return 0;
}
就是这样
2.之后在编写一个函数将数字转化成汉字输出
void exchange3(int x)
{
if (x == 0)
printf("零");
else if (x == 1)
printf("一");
else if (x == 2)
printf("二");
else if (x == 3)
printf("三");
else if (x == 4)
printf("四");
else if (x == 5)
printf("五");
else if (x == 6)
printf("六");
else if (x == 7)
printf("七");
else if (x == 8)
printf("八");
else if (x == 9)
printf("九");
}
大概是这样,但还是会有限制,不晓得怎么改
4.然后将剩余函数编写,当到“看看”时停止运行
5.代码如下
int main()
{
char s1[10], s2[10], s3[10], s4[10];
int r,sum,i;
scanf("%s %s %s %s", &s1, &s2, &s3, &s4);
if (strcmp(s1, "整数") == 0 && strcmp(s3, "等于") == 0)
r = 1;
else
r = 0;
if (r == 0)
printf("Input Error\n");
else if (r == 1)
{
char s5[10], s6[10], s7[20];
while (1)
{
i = exchange1(s7);
if (strcmp(s6, "增加") == 0)
sum = sum + i;
else if (strcmp(s6, "减少") == 0)
sum = sum - i;
else if (strcmp(s5, "看看") == 0)
{
output(sum);
break;
}
}
}
}
void output(int x)
{
int a, b;
a = x / 10;
b = x % 10;
if (a == 0)
printf("%s", exchange3(b));
else if (a == 1)
printf("十%s", exchange3(b));
else if (a != 0 && a != 1)
printf("%s十%s", exchange3(a), exchange3(b));
else if (x < 0)
printf("财政赤字");
}
剩余代码,最后将他们组合起来就好了。
但由于技术问题,想法很美好,实际操作起来有好多问题,导致不能运行,大致就这样,以后好好努力。