1第1章程序设计基础2第1章程序设计基础►1.1计算机系统和工作原理►1.2信息的表示与存储►1.3程序设计语言►1.4程序设计概述►1.5C语言概述3第1章程序设计基础1946,ENIAC41.1计算机系统和工作原理►1.运算器►2.控制器►3.存储器►4.输入设备►5.输出设备51.1.1计算机系统的组成图1.1计算机的基本结构61.1.1计算机系统的组成曙光超级计算机个人计算机71.1.1计算机系统的组成笔记本电脑平板电脑81.1.1计算机系统的组成塔式服务器机架式服务器刀片式服务器91.1.1计算机系统的组成嵌入式计算机工作站高密度服务器101.1.2指令与程序►指令(instruction)是计算机执行某种操作的机器命令,它可以被计算机硬件直接识别和执行。计算机指令常用二进制代码表示,一条指令通常由两个部分组成:111.1.2指令与程序►①数据传送指令►将数据在CPU与内存之间进行传送;►②数据处理指令►对数据进行算术、逻辑、比较、位运算;►③程序控制指令►控制程序中指令的执行顺序,例如条件跳转、无条件跳转、调用、返回、停机、中断、异常处理等;121.1.2指令与程序►④输入输出指令►实现外部设备与主机之间的数据传输;►⑤硬件管理指令►对计算机硬件管理;►⑥其他指令►特殊功能处理,例如多媒体、DSP、通信、图形渲染等。131.1.2指令与程序图1.2流水线技术的指令执行示意►①取指令:按照程序计数器中的地址,从内存中取出指令送到指令寄存器中;►②分析指令:对指令寄存器中存放的指令进行分析,由指令译码器对操作码进行译码,转换成相应的控制信号并确定操作数地址;141.1.2指令与程序图1.2流水线技术的指令执行示意►③执行指令:由执行部件完成该指令所要求的操作,例如执行加法操作,将寄存器的值与累加器的值相加,结果依然放在累加器中。151.1.2指令与程序图1.3程序执行示意►计算机程序(computerprogram)是指完成一定功能的指令的有序集合。►运行一个程序的过程就是依次执行每条指令的过程,一条指令执行完成后,为执行下一条指令做好准备,即形成下一条指令地址,继续执行,直到遇到结束程序的指令为止。161.1.2指令与程序►编写程序(programming)►不仅考验程序员的体力、耐力和意志力,而且还需要程序员的智力、想象力和创造力。►计算机程序是数据流和控制流的工作过程。数据流是指对数据形式的表示和描述,即程序所使用数据的数据结构和组织形式。控制流是对数据所进行操作的描述,即指定操作的步骤和方法,称为算法(algorithm)。因此一个程序包含算法和数据两部分,没有数据,程序就没有运算处理的对象,而处理数据对象的算法是程序的灵魂。171.1.2指令与程序►软件(software)是指程序、程序运行所需要的数据以及开发、使用和维护这些程序所需要的文档的集合。181.2信息的表示与存储►各种信息进入计算机,都要转换成“0”和“1”的二进制形式。计算机采用二进制的原因是:►(1)物理上容易实现,可靠性高。►(2)运算简单,通用性强。►(3)便于表示和进行逻辑运算。191.2.1计算机的数字系统表1-1计算机中常用的数字系统进制二进制十进制八进制十六进制进位规则逢二进一逢十进一逢八进一逢十六进一基数210816基本符号0,10,1,2,…,90,1,2,…,70,1,2,…,9,A,B,C,D,E,F位权表示符号B(binary)D(decimal)O(octal)H(hexadecimal)2i10i8i16i201.2.1计算机的数字系统表1-2二进制数、八进制数、十六进制数与十进制数之间的关系十进制二进制八进制十六进制十进制二进制八进制十六进制0000810001081111910011192102210101012A3113311101113B41004412110014C51015513110115D61106614111016E71117715111117F211.2.1计算机的数字系统1210121210121210121.nnmnnmnnmniiimNaaaaaaaarararararararar221.2.2进位计数制的转换►1.十进制数转换成r进制数►2.r进制数转换成十进制数►3.二、八、十六进制数相互转换231.2.2进位计数制的转换1221012210nnnnIararararar1221012210nnnnarararararIrrr23101221nnnnIarararar241.2.2进位计数制的转换01(2)(1)12(1)mmmmrfarararar12(1)12(1)mmmmfarararar1(2)(1)2(1)mmmmfararar251.2.2进位计数制的转换123.45DB()(1111011.011100)►【例1.1】将十进制数转换成二进制数。261.2.2进位计数制的转换271.2.2进位计数制的转换12345DB()(11000000111001)►【例1.2】将十进制数转换成二进制数。图1.4二进制位权281.2.2进位计数制的转换1231285BBB(10000000)(101)(1111011)►【例1.3】将十进制数转换成二进制数。291.2.2进位计数制的转换543210120001BD(100101.11)=122212212122(37.75)►r进制数转换成十进制数21012878786858OD(377.65)=3(255.828125)321016151615161516HD(7FFF)=7(32767)301.2.2进位计数制的转换►二、八、十六进制数相互转换311.2.3数值数据的表示11102()220nnnXXXXX原►1.整数在计算机中的表示►由于计算机只有0和1的数据形式,因此数的正(+)、负(–)号也要用0和1编码。通常将一个数的最高二进制位定义为符号位,称为数符,用0表示正数、1表示负数,其余位表示数值。321.2.3数值数据的表示1102()2120nnnXXXXX反--1102()220nnnXXXXX补-331.2.3数值数据的表示►补码的实质就是对负数的表示进行不同的编码,从而方便地实现正负数的加法运算且规则简单。在数的有效表示范围内,符号位如同数值一样参与运算,也允许最高位的进位(被丢弃)。341.2.3数值数据的表示►【例1.4】计算(-9)+9的值。351.2.3数值数据的表示►【例1.5】计算(-9)+8的值。361.2.3数值数据的表示►【例1.6】计算65+66的值。371.2.3数值数据的表示()2()100000000B10000000B10000000BnDXX补补(128)►【例1.7】求补码10000000对应的十进制数。381.2.3数值数据的表示►【例1.8】计算无符号整数65+66的值。►从前面得到,由于是无符号整数,故直接转换成十进制数为131。6566B(10000011)391.2.3数值数据的表示21.sEf规格化数=(-1)►2.浮点数在计算机中的表示►数学中的实数在计算机中称为浮点数,是指小数点不固定的数。浮点数用二进制表示,但表示方法比整数复杂得多。图1.5单精度浮点数存储格式401.2.3数值数据的表示表1-3单精度存储格式位模式及其IEEE值通用名称位模式(十六进制)十进制值+0000000000.0–080000000–0.013F8000001.0最大正数7F7FFFFF最小正数00800000+∞7F800000正无穷–∞FF800000负无穷非数7FC00000NAN411.2.3数值数据的表示►【例1.9】求单精度浮点数50.0在计算机中的表示。►格式化表示:►因此►指数:►所以50.0在计算机中的表示为42480000(十六进制),其存储格式如图1.6所示。0550.0110010.0B(1)21.100100B0s5E0.100100f12713210000100BeE421.2.3数值数据的表示图1.6单精度浮点数50.0的存储格式431.2.3数值数据的表示►【例1.10】求单精度浮点数-2.5在计算机中的表示。►格式化表示:►因此►指数:►所以在计算机中的表示为C0200000(十六进制),其存储格式如图1.7所示。112.510.1B(1)21.01B1s1E0.01f12712810000000BeE441.2.3数值数据的表示图1.7单精度浮点数-2.5的存储格式451.2.4非数值数据的表示►1.西文字符►西文字符包含英文字符、数字、各种符号,是不可做数学运算的数据。►最常用的是美国信息交换标准代码ASCII(americanstandardcodeforinformationinterchange)。ASCII码使用7位二进制编码,编码值从0到127,可以表示即128个字符。461.2.4非数值数据的表示471.2.4非数值数据的表示►2.汉字字符►汉字字符编码有输入码、字形码、国标码、机内码之分。►汉字国标码是指GB2312-80,它把最常用的6763个汉字和682个非汉字图形符号按汉语拼音顺序和偏旁部首排列。►每个汉字的编码占两个字节,使用每个字节的低7位,合计14位,可以有即16384个字符编码。481.2.4非数值数据的表示►3.多媒体信息►除数值、文字数据外,计算机也可以处理图形、图像、音频和视频信息。这些媒体信息的表现方式可以说是多种多样,但是在计算机中它们都是通过二进制编码表示的。491.3程序设计语言►程序设计语言是用来编写计算机程序的工具。►只有用机器语言编写的程序才能被计算机直接执行,其他任何语言编写的程序都需要翻译成机器语言。►按照程序设计语言的发展历程,大致可分为机器语言、汇编语言、高级语言3类。501.3.1机器语言与汇编语言►机器语言是由二进制0和1按一定规则组成的、能被计算机直接理解和执行的指令集合。机器语言中的每一条语句实质上是一条指令。1011000000010000;往寄存器AL送16(10H)0000010000001010;寄存器AL加10(0AH),且送回AL中11110100;结束,停机511.3.1机器语言与汇编语言►汇编语言,将机器指令的代码用英文助记符来表示,如MOV表示数据传送、ADD表示加、JMP表示程序跳转、HLT表示停机等。MOVAL,10;往寄存器AL送16(10H)ADDAL,0A;寄存器AL加10(0AH),且送回到AL中HLT;结束,停机521.3.2高级语言►高级语言是一种接近人的自然语言和数学公式的程序设计语言。►编译(compile)是用编译器(compiler)程序把高级语言所编写的源程序(sourcecode)翻译成用机器指令表示的目标代码,使目标代码和源程序在功能上完全等价,通过连接器(linker)程序将目标程序与相关库连接成一个完整的可执行程序。其优点是执行速度快,产生的可执行程序可以脱离编译器和源程序独立存在,反复执行。531.3.2高级语言►解释(interprete)是用解释器(interpreter)程序将高级语言编写的源程序逐句进行分析翻译,解释一句,执行一句。当源程序解释完成时目标程序也执行结束,下次运行程序时还需要重新解释执行。其优点是移植到不同平台时不用修改程序代码,只要有合适的解释器即可。541.3.2高级语言551.3.2