您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 高级语言C的基础代码的编写
高级语言C++的基础代码的编写通过上次课题的讲述,相信大家一定对什么是数据及数据的定义和使用方法有一定的了解了,在看本次课题之前希望大家能趁热打铁,再到网上下本C语言的教程,最好是买本数来巩固下变量相关的知识。大家明白了怎么定义变量,怎么给变量赋值了,自然的就应该进一步了解一下一些详细的代码怎么编写了。今天我们的任务比较简单,就讲一下如何编写代码及实现代码的流程控制。应该说这个是非常简单的东西了,本来我没打算讲它,可是本着一步一个脚印的原则,我还是简要的说一下。在本次课题之后,我会紧跟着出一个函数的专题,来作为代码篇的完善,至此大家应该能独立的写自己的程序了。本次课题知识点不是很多(也不少,但是都很简单。),主要是在于多写,多练,知道自己能把一些现实的问题转换成代码来解决问题。不多废话,先说下本次课题要写的主要内容:1.程序的运算和逻辑判断2.三种程序流程控制结构详解。3.养成良好的代码编写风格。4.结束语下面开始进入正题。一、程序的运算和逻辑判断。说计算是电脑最基本的功能,相必没有人会反对的。做程序,自然最基础的就是这些运算了。我知道,看这个破烂文章的朋友对数据应该都是不感冒的。不过大家放心,这里牵扯的运算都很简单,就是小学的加、减、成、除、取余数,是、非、与或和位移,没别的了。先让我们来了解下算术运算。1.算术运算。加减乘除相比大家都应该很了解的。这里我不想费太多的篇幅讲述这些大家都明白的知识,我把要说的知识列出来,大家自己了解就好。用于算术运算的运算符有:我想不用我说,加、减、成、除这些运算符大家都接触过的,关于“%”运算符,其实就是取余数;用这些运算符可以将一些数字,变量等连接起来,进行运算,这样的式子叫做表达式。例如:inti=5;i+7;//这里就是一个表达式。“=”这个运算符其实不属于算术运算,它也并非是我们数学课上讲的“等于”,而是一个“赋值”运算符,它用来将一个常量(数字、字母等)赋值给一个变量的赋值运算符,由于我们进行算术运算以后,通常都会将运算结果保存到一个变量中,所以,我把这个赋值运算符归类到这里。而我们日常的“等于”运算符是:“==”,它属于逻辑运算符,我们将在下一节中讲到它。关于“++、——”这两个运算符,上图中已经说明了,它是对变量的对自己的自加或者自减运算,等同于:变量=变量+1;或者变量=变量—1;现在让我们来举几个例子,来说明下这些算术运算符的用法。voidmain(){intx=1;inty=2;intz=20;x++;//等同于x=x+1;y--;//等同于y=y-1;z/=x;//等同于z=z/1;printf(%d,%d,%d\n,x,y,z);//打印x,y,z的结果。z%=x;//计算得出z/x以后的余数x=x+y;z-=x;printf(%d,%d,%d\n,x,y,z);//打印x,y,z的结果。}请先不要看下面的截图,先看下这个程序,分析一下,这两次的输出结果会是多少,然后对比下图:看下就算的是不是正确,如果正确了,那恭喜你,基础的算术运算就算通过了,接下来,我们需要调试这段代码,来熟悉一些相关的汇编命令,具体操作如下图所示:在代码上右击鼠标,选择如下命令:我们来详细分析一下我们现在看到的代码:1:#includestdio.h2:3:voidmain()4:{00401010pushebp00401011movebp,esp;//将现有的堆栈给了EBP寄存器。00401013subesp,4Ch;//分配x4C大小的堆栈空间用来运算。00401016pushebx00401017pushesi00401018pushedi;//保存寄存器环境。00401019leaedi,[ebp-4Ch];//这里用ebp寄存器减去一个偏移来定位我们定义的变量,0040101Cmovecx,13h;//这里-4Ch是用来定位到堆栈头,把堆栈内容改成int3中断以免内存泄露。00401021moveax,0CCCCCCCCh;//以上操作是保存堆栈环境,分配堆栈空间。00401026repstosdwordptr[edi];//在下一次课题讲述函数时,我们会讲到,这里大家可以略过。5:intx=1;00401028movdwordptr[ebp-4],1;//[ebp-4]是我们的变量x,dwordptr是用来修饰这个变量是DWORD类型(也就是整型)。6:inty=2;0040102Fmovdwordptr[ebp-8],2;//MOV就是汇编指令,相当于我们C语言中=赋值运算符,它的具体用法自己百度。7:intz=20;00401036movdwordptr[ebp-0Ch],14h8:9:x++;//等同于x=x+1;0040103Dmoveax,dwordptr[ebp-4]00401040addeax,1;//add指令就是我们C语言的+运算符,还有一个INC指令相当于我们的++运算符00401043movdwordptr[ebp-4],eax10:y--;//等同于y=y-1;00401046movecx,dwordptr[ebp-8]00401049subecx,10040104Cmovdwordptr[ebp-8],ecx11:12:z/=x;//等同于z=z/1;0040104Fmoveax,dwordptr[ebp-0Ch]00401052cdq00401053idiveax,dwordptr[ebp-4]00401056movdwordptr[ebp-0Ch],eax13:printf(%d,%d,%d\n,x,y,z);00401059movedx,dwordptr[ebp-0Ch]0040105Cpushedx0040105Dmoveax,dwordptr[ebp-8]00401060pusheax00401061movecx,dwordptr[ebp-4]00401064pushecx00401065pushoffsetstring%d,%d,%d\n(0042001c)//传递参数,具体规则将在下次课题“函数”中讲述。0040106Acallprintf(004010f0);//调用printf函数打印结果0040106Faddesp,10h;//这里是C条用的对战平衡方式。(具体将在下次课题“函数”中讲述)14:15:z%=x;00401072moveax,dwordptr[ebp-0Ch]00401075cdq00401076idiveax,dwordptr[ebp-4]00401079movdwordptr[ebp-0Ch],edx16:17:x=x+y;0040107Cmovedx,dwordptr[ebp-4]0040107Faddedx,dwordptr[ebp-8]00401082movdwordptr[ebp-4],edx18:z-=x;00401085moveax,dwordptr[ebp-0Ch]00401088subeax,dwordptr[ebp-4]0040108Bmovdwordptr[ebp-0Ch],eax19:printf(%d,%d,%d\n,x,y,z);0040108Emovecx,dwordptr[ebp-0Ch]00401091pushecx00401092movedx,dwordptr[ebp-8]00401095pushedx00401096moveax,dwordptr[ebp-4]00401099pusheax0040109Apushoffsetstring%d,%d,%d\n(0042001c)0040109Fcallprintf(004010f0)004010A4addesp,10h20:}004010A7popedi;//恢复寄存器环境004010A8popesi004010A9popebx004010AAaddesp,4Ch;//平衡堆栈004010ADcmpebp,esp004010AFcall__chkesp(00401170);//DEBUG模式程序专用的堆栈检查函数。004010B4movesp,ebp004010B6popebp004010B7ret相信你根据上述代码中的提示,应该能将这个汇编代码看的差不多,当然,看不明白也没有关系,我们需要掌握的汇编指令及其用法很少,就下面几个:mov/lea:赋值/取地址。add:加法指令。sub:减法指令。div/idiv:除法指令。mul/imul:乘法指令。这些汇编指令的具体用法大家自己百度或者参考相关资料,这里不做详细说明,下面开始我们的逻辑、关系运算。2.逻辑、关系运算。提起什么逻辑运算,或者什么关系运算,看名字貌似很复杂的。不过这里可能让大家放心的是,这些运算我们日常生活中经常用到,无非就是真的,假的,是,不是,并且,或者之类的操作。用于逻辑运算的运算符有如下几个:运算符含义&&与(并且)||或(或者)!非(不是)用于关系运算的运算符有如下几个:这些运算无非就是为了判断一个表达式成立不成立,在C语言中,只要表达式的值不为零并且符合关系运算符的要求,那这个表达式就成立的,就可以用上述的两种运算符进行比较运算,一般情况下,这些运算符会配合下节我们要讲述的流程控制语句来使用,所以这里我就不给出具体用法的例子了,有情趣的朋友,可以继续看下面章节中的例子到现在我想主要的运算我都讲完了,虽然不是很详细,但是我想,只要大家坚持努力,多多百度,这些知识一定会掌握好的。小学的时候,我们学过四则运算,在运算的时候,遵循先乘除,后加减,有括弧的先算括弧里面的,这个规则在这里一样使用,只不过在编程环境中,运算符很多,所以需要有个更为详细的运算符优先级表。这里我把它贴出来,但是还希望大家能够尽量的使用括弧来让人看的容易,以免出错,具体优先级表转载如下:更详细的用法可以参考如下链接:二、三种程序流程控制结构详解。有了上述的运算,我想大家都可以写出一些很简单的代码了,但是我们在写代码的时候,肯定会遇到类似这样的问题:有时候,我们写的代码必须要在达到某种条件之后才可以执行,否则不让运行。有时候,我们写的代码很庞大,很罗嗦,因为它有几种可能需要我们来写出几个程序。有时候,我们写的代码需要一直重复执行直到某种条件不成立了才不执行。只要你遇到过上述的问题,那我们这节课的内容就正是你所需要的。不多废话,进入正题:1.顺序结构到现在为止,我们写的所有的代码都是顺序结构的,所谓顺序结构,就是代码从第一条指令开始执行,直到执行完最后一条。中间不会落下任何一条指令。想必大家现在应该能理解什么是顺序结构了,所以我不想再这里浪费太多的篇幅,直接进入下一小节。2.分支结构所谓分支结构,就是代码在达到某种条件的时候,执行某些指令,否则就执行别的指令。分支结构是改变代码执行顺序最简单的方式,所以大家一定可以很容易的掌握它的,下面让我们一个一个的来看。a)if…else结构这个结构算是编程中最基础的结构了,它有三种格式,我在这里列出来,大家可以根据实际情况选择使用哪个:第一种格式:if(条件表达式){//条件成立时执行这里的语句…}第二种格式:if(条件表达式){//条件成立时执行这里的语句…}else{//条件不成立时执行这里的语句…}第三种格式:if(条件表达式1){//条件表达式1成立时执行这里的语句…}elseif(条件表达式2)//这里的elseif可以有无限多个(如果有很多个时可以参考使用switch语句)。{//条件表达式2成立时执行这里的语句…}else{//条件表达式都不成立时执行这里的语句…}为了更好的说明这个语句的用法,我举个例子:intMaxNum(intnum001,intnum002,intnum003){if(num001=num002){if(num001=num003){returnnum001;
本文标题:高级语言C的基础代码的编写
链接地址:https://www.777doc.com/doc-1938078 .html