这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2020OOP |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224 |
这个作业的目标 | <1、了解C语言的不足之处;2、了解C语言的编译过程;3、掌握一定编程能力,解决程序题;4、学会查看编译器版本;5、学会用命令行编译程序> |
作业正文 | https://www.cnblogs.com/xiao-qingjiang/p/12232562.html |
其他参考文献 | https://blog.csdn.net/qq_41985652/article/details/88620349 |
第一次作业
安装C++开发环境(见附录)。
完成问答题、实践题及编程题
发布博客
问答题
回答以下问题:
如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。 如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
C语言的缺陷:
结合我目前使用C语言的体验,我认为C语言有以下缺点(思考过程:主要是结合平时的使用体验,以及看网上一些评论,形成自己的想法):
1、 C语言语法限制不太严格,程序设计自由度大,危险性高:
C语言本着信任程序员的原则,编译过程中少掉了一些检查,这虽然有着提高编程效率的好处,但对于新手或不熟练的人来说,有时候会出现一些不太容易发现的问题(比如精度的丢失,越界等问题),而程序的不完善也容易被发现漏洞;虽然目前C11标准用一些新函数替代了原有函数,解决了部分越界问题(如fgets(),fputs(),scanf_s(),printf_s()等新函数),但相对来说还是危险性较高的;
2、 C语言是面向过程的语言,不适合开发大型项目:
虽然我没开发过,但听说代码量极大时(比如超过十万行?),容易崩溃,可能会发生一些奇奇怪怪的错误。
3、 C语言运算符数量多,且存在一定优先级,不容易记忆;
4、 C语言中许多运算符被“重载”,具有不同的意义,甚至有些关键字也具有好几种意义。(例如, void作为函数的返回类型,表示不返回任何值;在指针声明中,表示通用指针类型;在参数列表中,表示没有参数。)
查阅相关资料,简述一下C语言/C++的编译过程。
结合我所查资料以及我的理解,C语言的编译过程如下:
预处理 :读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理,该部分主要包括:宏、条件编译、文件包含、和一些其他指令四部分。
编译:1、语法分析 2、词法分析 3、语义分析 4、符号汇总 5、文本语言转换成汇编语言
汇编:1.生成目标文件(Windows下生成.obj Linux下生成.o)2、形成符号表3,汇编指令转换成二进制命令
链接:1、合并段表 2、符号表的合并与符号表重定位 3、Windows下生成可执行程序.exe文件。
————————————————
此答案主要参考CSDN博主「柠檬有点酸」的原创文章
原文链接:https://blog.csdn.net/qq_41985652/article/details/88620349
实践题
自己动手,完成以下任务:
查看自己的C++编译器版本。
同时按下win和r键,点击确定,进入页面即可查看。
使用命令行编译一份C语言/C++代码。
在命令行中输入代码所在的盘名,再输入所在的文件名,回车即可;
编程题
请使用C语言或者C++完成以下题目;
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言? 汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。 今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求 编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。 变量定义:整数 钱包 等于 零 运算(加法):钱包 增加 四 运算(减法):钱包 减少 四 输出:看看 钱包
样例 输入:
整数 钱包 等于 零 钱包 增加 四 钱包 减少 三 看看 钱包
输出:
一
注意:
输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十 。
编程题要求: 0. 读题,提取出题目的要求。
c
详细记录下以上每一步,并写在博客中。
不要求完全做出来,但要求记录详细。
建议博客长度不少于1000字(不包含代码)。
以下是我关于编程题的代码:
#include
#include
#include
#include
#include
#include
#define ll long long
#define MAX 1000007
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))//以上有部分为缺省源,并没有全部被使用;此程序在devc++上运行没问题,在visual stdio 2019上把scanf()换为scanf_s()即可
int sum, pan[5] = { 44,10 };
int a[][2] = { {-63,-29},{-46,-69},{-74,-2},{-56,-3},{-53,-60},{-50,-27},{-63,-7},{-58,-33},{-80,-53},{-66,-59},{-54,-82} };
int i, l, j, len, mark, lenn[5];
char d[20], kan[10], qian[10], ad[10], zheng[10], deng[10];;
void add() {
l = strlen(d); len = 0;
for (i = 0; i < l; i += 2) {
for (j = 0; j <= 10; j++) {
if ((int)d[i] == a[j][0] && (int)d[i + 1] == a[j][1]) {
lenn[len++] = j;
break;
}
}
}
if (len == 1) {
mark = lenn[len - 1];
}
else if (len == 2) {
if (lenn[0] == 10)mark = lenn[0] + lenn[1];
else mark = 10 * lenn[0];
}
else if (len == 3) {
mark = 10 * lenn[0] + lenn[2];
}
if ((int)ad[0] == -68 && (int)ad[1] == -11) {
sum -= mark;
}
else sum += mark;
//printf("%d\n",sum);
memset(d, 0, sizeof(d));
return;
}
int main() {
scanf("%s%s%s%s", zheng, qian, deng, d);
add();
while (scanf("%s%s", qian, ad)) {
if ((int)qian[0] == -65 && (int)qian[1] == -76)break;
scanf("%s", d);
add();
}
if (sum / 10 == 0) {
switch (sum) {
case 0:printf("零"); break;
case 1:printf("一"); break;
case 2:printf("二"); break;
case 4:printf("四"); break;
case 3:printf("三"); break;
case 5:printf("五"); break;
case 6:printf("六"); break;
case 7:printf("七"); break;
case 8:printf("八"); break;
case 9:printf("九"); break;
}
}
else
{
mark = sum / 10;
if (mark == 1)printf("十");
else {
switch (mark) {
case 2:printf("二"); break;
case 4:printf("四"); break;
case 3:printf("三"); break;
case 5:printf("五"); break;
case 6:printf("六"); break;
case 7:printf("七"); break;
case 8:printf("八"); break;
case 9:printf("九"); break;
}
printf("十"); mark = sum % 10;
}
switch (mark) {
case 1:printf("一"); break;
case 2:printf("二"); break;
case 4:printf("四"); break;
case 3:printf("三"); break;
case 5:printf("五"); break;
case 6:printf("六"); break;
case 7:printf("七"); break;
case 8:printf("八"); break;
case 9:printf("九"); break;
}
}
return 0;
}
博客作业
在完成了以上作业后,写一篇博客体现你完成作业的过程和内容,推荐包括以下内容:
问答题的答案,和思考过程。
实践题的截图(禁止拍屏),和遇到的问题。
编程题的主要实现过程、思考过程和遇到的问题。
你查阅的资料的网址。