c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_第1页
c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_第2页
c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_第3页
c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_第4页
c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、循环总结1运算符 算术+-*/ %;2、逻辑 && | !,3、关系><=. !=;4、条件?:5、if()if()esleif()else ifelse ifswitch()case 值:语句break;case 值:语句break;case 值:语句break;case 值:语句break;deafult;goto ifwhile()do while();for(;)break;continue;c语言的编译和执行C语言程序的代码编写完成之后,就可以在机器上运行它了。我们知道C语言是一种程序设计语言,它很容易被人们看懂和接受;但是,对于计算机来说,却不能接受这种

2、语言,而它只能接受机器语言。为此必须首先把C语言程序翻译成相应的机器语言程序,这个工作叫编译。我们把编写好的C语言程序叫C源程序,从C源程序到在计算机上得到运行结果。操作过程如图:C语言的编译和执行.gif源文件的编辑:为了编译C源程序,首先要用系统提供的编辑器建立一个C语言程序的源文件。一个C源文件是一个编译单位,它以文本格式保存的。源文件名自定,文件的扩展名(或后缀名)为".c"或".cpp"。例如, myfile.c file.cpp一个比较大的C语言程序往往可划分为若干模块,每个模块由不同的开发者或开发小组负责编写。对每个模块可建立一个源文件。因

3、此,一个大的C程序可包含多个源文件,这些源文件都要进行编译。编译:源文件建立好后,经检查无误后就可进行编译。编译是由系统提供的编译器完成,编译命令随系统的不同而异,具体操作时可参考相应的系统手册。例如,对于Turbo C,一般通过Turbo C的编辑环境界面中的Compile菜单中的Compile命令进行编译,编译器在编译时对源文件进行语法和语义检查,并给出所发现的错误。用户可根据错误情况,使用编辑器进行修改,然后对修改后的源文件再度编译。用户也可以在Compile菜单中选Make命令进行编译,它能直接生成可执行的文件,此时如果系统发现用户的源程序有语法错误,就发出错误的参考信息,提示用户进行

4、错误代码的修改,然后用户再重新进行编译,值得注意的是,C语言的编译器不对数组越界进行检查,这一点用户自己一定要注意数组的越界问题。连接:若在上述步骤中,用户选择Compile命令进行编译,编译所生成的目标文件(*.obj)是相对独立的模块,但还不能直接执行,用户还必须用连接编辑器把它和其它目标文件以及系统所提供的库函数进行连接装配,生成可执行文件才能执行。可执行文件的名字可自由指定,默认的执行文件的名字与源文件的名字一致,可执行文件的扩展名为“.exe”。执行:执行文件生成后,就可执行它了。若执行的结果达到预想的结果,则说明程序编写正确。否则,就需进一步检查修改源程序,重复上述步骤,直至得到正

5、确的运行结果为止。存储单元存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单存储单元元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。指针的内容是存储地址在存储器中有大量的存储元,把它们按相同的位划分为组,组内所有的存储元同时进行读出或写入操作,这样的一组存储元称为一个存储单元。一个存储单元通常可以存放一个字或若干个字节;存储单元是CPU访问存储器的基本单位。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的

6、数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。常用数据结构数组 (Array)在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。栈 (Stack)是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需

7、要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。队列 (Queue)一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。链表 (Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。树 (Tree)是包含n(n>0)

8、个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件: (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。 (3)K中各结点,对关系N来说可以有m个后继(m>=0)。图 (Graph)图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。堆 (Heap)在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指

9、二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。散列表 (Hash)若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。原码反码补码在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位

10、,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法原码:在数值前直接加一符号位的表示法。例如: 符号位 数值位+7原= 0 0000111 B-7原= 1 0000111 B注意:a. 数0的原码有两种形式:+0原=00000000B -0原=10000000Bb. 8位二进制原码的表示范围:-127+127反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。例如: 符号位

11、 数值位+7反= 0 0000111 B-7反= 1 1111000 B注意:a. 数0的反码也有两种形式,即+0反=00000000B- 0反=11111111Bb. 8位二进制反码的表示范围:-127+127补码的表示方法补码的表示:正数:正数的补码和原码相同。负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。例如: 符号位 数值位+7补= 0 0000111 B-7补= 1 1111001 B补码在微型机中是一种重要的编码形式,请注意:a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,

12、而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。b. 与原码、反码不同,数值0的补码只有一个,即 0补=00000000B。c. 若字长为8位,则补码所表示的范围为-128+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。2原码、反码和补码之间的转换由于正数的原码、补码、反码表示方法均相同,不需转换。在此,仅以负数情况分析。已知原码,求补码。例:已知某数X的原码为10110100B,试求X的补码和反码。解:由X原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。1 0 1 1 0

13、 1 0 0 原码1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反 1 +11 1 0 0 1 1 0 0 补码故:X补=11001100B,X反=11001011B。已知补码,求原码。分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。例:已知某数X的补码11101110B,试求其原码。解:由X补=11101110B知,X为负数。求其原码表示时,符号位不变,数值部分按位求反,再在末位加1。1 1 1 0 1 1 1 0 补码 1 0 0 1 0 0 0 1 符号位不变,数值位

14、取反 1 +11 0 0 1 0 0 1 0 原码计算机语言计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。计算机程序设计语言,通常简称为编程语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同

15、情况下所应当采取的行动。机器语言:机器语言是指一台计算机全部的指令集合。电子计算机所使用的是由"0"和"1"组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由"0"和"1"组成的指令序列交由计算机执行,这种计算机能够认识的语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。 计算机语言因此程序就是一个个的二进制文件。一条机器语言成为一条指令。指令是不可分割的最小功能单元。而且,由于每台计算机的指令

16、系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。 汇编语言:为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用"ADD"代表加法,"MOV"代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门

17、的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。 汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。 高级语言:高级语言的发展:从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言-FORTRAN问世了,40 多年来,共有几百种高级语言出现,有重要意义的有几

18、十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C+、VC、VB、JAVA等。 特别要提到的:在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言C语言。 高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为

19、产业化、流水线式的工业化生产。 计算机语言60年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是个自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称"软件危机"。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言-Pascal

20、语言出现,标志着结构化程序设计时期的开始。 80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(Object)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来

21、说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C+、Visual Basic、Delphi就是典型代表。 高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。Null类型void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量void a;这行语句编译时会出错,提示“illegal use of type void”。void真正发挥的作用在于:1) 对函数返回的限定 void fun();2) 对函数参数的限定 int fun(vo

22、id)。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 取反 是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<< 左移 用来将一个数的各二进制位全部左移N位,右补0>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补01、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进

23、制位都为,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则AB=true 例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。将11(2)补足成一个字节,则是00000011

24、(2)。5的二进制编码是101(2),将其补足成一个字节,则是00000101(2)按位与运算:c语言代码:#include <stdio.h>main()int a=3;int b = 5;printf("%d",a&b);2、“按位或”运算符(|)两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真。c语言源代码:#include <stdio.h>main()int a=060;int b = 017;printf("%d",a|b);3、按位异或两个相应的二进制位中相同为0,不同为1c语言源代码:#include <stdio.h>main()int a=3;int b = 4;int c;c=ab;printf("c=%d",c);4、“取反”运算符()他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。源代码:#include <stdio.h>main()int a=4;printf("%d",a);首先看等号左边 (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论