面向对象程序设计寒假作业1

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
这个作业的目标 1. 安装C++开发环境(见附录)。
2. 完成问答题、实践题及编程题
3. 发布博客
作业正文

问答题:(我认为的C语言的缺陷)1、所用的头文件多且不容易记忆;2、容易超时;3、有些代码长度过长,不容易简化;4、bug难以寻找,且C语言中很多细节容易被忽略。
思考过程:回顾大一上学期写过的代码,回想当时的思考及做题过程,发现在C语言中很容易遗漏一些重要的细节,比如地址符&,一条语句后的分号等,而这些细处不容易寻找,有可能花上半个小时也找不到bug,若代码的长度过长,而又不小心错了一个部分,则非常难找到bug。以及头文件的运用十分灵活,例如运用字符串函数时使用的头文件为#include<string.h>,而运用字符函数时使用的则是#include<ctype.h>容易混淆。
C语言/C++的编译过程:C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件

  1. 编译预处理:读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
  2. 编译阶段:经过预编译得到的输出文件中,将只有常量。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
  3. 优化阶段:优化一部分是对中间代码的优化。 这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。
  4. 汇编过程:汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。
    实践题:1、查看编译器版本

2、使用命令行编译一份C语言/C++代码

3、遇到的问题:并未接触过命令行,也还未研究过用命令行编译C语言,因此在百度上寻找。在百度上别人的博客中有一些名词很难理解,并且由于与写博客的人的软件、Windows版本不同,因而运行结果也有不同的地方,导致无法得到运行成功的结果。博客中的很多过程简化,导致有的地方很难找到,要花费大量时间再寻找博客中所说的,并得出与之相同的结果。
编程题:代码:

include<stdio.h>

include <string.h>

int main(){
char str1[4],str2[4],str3[4];
int num[3]={0};
scanf("整数 钱包 等于 ");
gets(str1);
scanf("钱包 增加 ");
gets(str2);
scanf("钱包 减少 ");
gets(str3);
scanf("看看 钱包");
if(!strcmp(str1,"零")) num[0]=0;
if(!strcmp(str1,"一")) num[0]=1;
if(!strcmp(str1,"二")) num[0]=2;
if(!strcmp(str1,"三")) num[0]=3;
if(!strcmp(str1,"四")) num[0]=4;
if(!strcmp(str1,"五")) num[0]=5;
if(!strcmp(str1,"六")) num[0]=6;
if(!strcmp(str1,"七")) num[0]=7;
if(!strcmp(str1,"八")) num[0]=8;
if(!strcmp(str1,"九")) num[0]=9;
if(!strcmp(str1,"十")) num[0]=10;
if(!strcmp(str2,"零")) num[1]=0;
if(!strcmp(str2,"一")) num[1]=1;
if(!strcmp(str2,"二")) num[1]=2;
if(!strcmp(str2,"三")) num[1]=3;
if(!strcmp(str2,"四")) num[1]=4;
if(!strcmp(str2,"五")) num[1]=5;
if(!strcmp(str2,"六")) num[1]=6;
if(!strcmp(str2,"七")) num[1]=7;
if(!strcmp(str2,"八")) num[1]=8;
if(!strcmp(str2,"九")) num[1]=9;
if(!strcmp(str2,"十")) num[1]=10;
if(!strcmp(str3,"零")) num[2]=0;
if(!strcmp(str3,"一")) num[2]=1;
if(!strcmp(str3,"二")) num[2]=2;
if(!strcmp(str3,"三")) num[2]=3;
if(!strcmp(str3,"四")) num[2]=4;
if(!strcmp(str3,"五")) num[2]=5;
if(!strcmp(str3,"六")) num[2]=6;
if(!strcmp(str3,"七")) num[2]=7;
if(!strcmp(str3,"八")) num[2]=8;
if(!strcmp(str3,"九")) num[2]=9;
if(!strcmp(str3,"十")) num[2]=10;
num[0]=num[0]+num[1]-num[2];
if(num[0]0) printf("零");
if(num[0]
1) printf("一");
if(num[0]2) printf("二");
if(num[0]
3) printf("三");
if(num[0]4) printf("四");
if(num[0]
5) printf("五");
if(num[0]6) printf("六");
if(num[0]
7) printf("七");
if(num[0]8) printf("八");
if(num[0]
9) printf("九");
if(num[0]==10) printf("十");
return 0;
}

  1. 读题:将变量钱包用中文的汉字数字表示,用C语言写出代码后将钱包中的钱进行增加和减少,并得出相应的结果。其中的数字都必在一到十之中。
  2. 分解需求:第一步,将钱包起始量、增加量、减少量的用中文表示的汉字数字转换为阿拉伯数字;第二步,将阿拉伯数字进行加减;第三步,将最后的结果的阿拉伯数字再转换为汉字。。
  3. 思考每个模块:第二步较为容易,直接将钱包这个变量来变化即可;第三步用多个if语句即可将得出的结果转换为汉字;而第一步需要设置三个字符串,每个字符串都要与“零”至“十”十一个汉字进行对比,再分别转换成阿拉伯数字。
  4. 对于不会的问题进行查阅资料:查询GBK编码的使用(无果);查询汉字所占的字节为2;查询比较字符串的函数为strcmp。
    参考文献:1、https://www.cnblogs.com/Lin-chun/p/5361030.html(如何用命令行编译c++程序)
    2、https://wenda.so.com/q/1514520282216523(C语言编译执行的全过程是怎样的?)
posted @ 2020-01-27 21:34  ClaireSHY  阅读(116)  评论(0编辑  收藏  举报