计算机基础与C语言程序设计教材配套资源ppt课件完整版(文字可编辑版)_第1页
计算机基础与C语言程序设计教材配套资源ppt课件完整版(文字可编辑版)_第2页
计算机基础与C语言程序设计教材配套资源ppt课件完整版(文字可编辑版)_第3页
计算机基础与C语言程序设计教材配套资源ppt课件完整版(文字可编辑版)_第4页
计算机基础与C语言程序设计教材配套资源ppt课件完整版(文字可编辑版)_第5页
已阅读5页,还剩568页未读 继续免费阅读

下载本文档

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

文档简介

第1章计算机基础知识第1章计算机基础知识1.1计算机系统与工作原理1.2数制与编码1.3计算机程序1.1计算机系统与工作原理

1.1.1计算机系统的组成

一个完整的计算机系统包括硬件系统和软件系统两部分。

硬件系统:组成一台计算机的物理设备的总称,是实实在在的物体,是计算机工作的基础。软件系统:指挥计算机工作的各种程序的集合,是计算机的灵魂,是控制和操作计算机工作的核心。图1-1计算机系统组成结构1.1.2计算机硬件系统计算机处理存储的数据。可以说,存储和处理是一个整体:存储是为了处理,处理需要存储。“存储和处理的整体性”的最初表达是美国普林斯顿大学的冯·诺依曼于1945年提出的计算机体系结构思想,一般称为“程序存储思想”。半个多世纪过去了,计算机的系统结构已发生了很大改变,就其结构原理来说,仍然是冯·诺依曼型计算机。“程序存储思想”的主要特点可归结为以下3点:(1)计算机由5个基本部分组成:运算器、控制器、存储器、输入设备和输出设备。(2)程序和数据存放在存储器中,并按地址寻访。(3)程序和数据用二进制表示,与十进制相比,实现二进制运算的结构简单,容易控制。

冯·诺依曼型计算机,其结构如图1-2所示,图中实线为数据流,虚线为控制流。图1-2冯·诺依曼计算机结构计算机的5个基本组成部分1.运算器运算器的主要功能是算术运算和逻辑运算。计算机中最主要的工作是运算,大量的数据运算任务是在运算器中进行的。运算器只能做这些最简单的运算,复杂的计算都要通过基本运算一步步实现。然而,运算器的运算速度却快得惊人,因而计算机才有高速的信息处理功能。运算器中的数据取自内存,运算的结果又送回内存。运算器对内存的读/写操作是在控制器的控制之下进行的。

2.控制器控制器是计算机的神经中枢和指挥中心,只有在它的控制之下整个计算机才能有条不紊地工作,自动执行程序。控制器的功能是依次从存储器取出指令,翻译指令、分析指令、向其他部件发出控制信号,指挥计算机各部件协同工作。运算器和控制器合称为中央处理器(CentralProcessingUnit,CPU)。

3.存储器存储器的主要功能是存放程序和数据。对存储器可以进行读写操作

读操作:从存储器中取出信息,不破坏原有的内容。

写操作:把信息存入存储器,原来的内容被抹掉。

存储器通常分为内存储器和外存储器。(1)内存储器内存储器简称内存(又称主存),是计算机中信息交流的中心。内存要与计算机的各个部件打交道,进行数据交换。因此,内存的存取速度直接影响计算机的运算速度。(2)外存储器外存储器设置在主机外部,简称外存(又称辅存),主要用来长期存放暂时不用的程序和数据。通常外存不和计算机的其他部件直接交换数据,只和内存交换数据,而且不是按单个数据进行存取,而是成批地进行数据交换。常用的外存是磁盘、磁带、光盘等。

4.输入设备输入设备用来接受用户输入的原始数据和程序,并将它们转变为计算机可以识别的形式(二进制代码)存放到内存中。常用的输入设备有键盘、鼠标、扫描仪、光笔、数字化仪、麦克风等。5.输出设备输出设备用于将存放在内存中由计算机处理的结果转变为人们所能接受的形式。常用的输出设备有显示器、打印机、绘图仪、音响等。1.1.3计算机软件系统计算机软件(ComputerSoftware)是相对于硬件而言的,它包括计算机运行所需的各种程序、数据及其有关技术文档资料。只有硬件而没有任何软件支持的计算机称为裸机。硬件是软件赖以运行的物质基础,软件是计算机的灵魂,是发挥计算机功能的关键。

通常软件可分为系统软件和应用软件两大类。用户与计算机系统各层次之间的关系如图1-3所示。图1-3用户与计算机系统各层次之间的关系1.系统软件系统软件是管理、监控和维护计算机资源的软件,用来扩大计算机的功能、提高计算机的工作效率、方便用户使用计算机的软件。它包括操作系统、程序设计语言、语言处理程序、数据库管理程序、系统服务程序等。2.应用软件应用软件是用户利用计算机及其提供的系统软件,为解决实际问题所开发的软件的总称。应用软件一般分为两大类:通用软件和专用软件。

通用软件支持最基本的应用,如文字处理软件(Word)、表处理软件(Excel)等。专用软件是专门为某一专业领域而开发的软件,如财务管理系统、计算机辅助设计(CAD)软件和本部门的应用数据库管理系统等。1.2数制与编码

在计算机系统中,数字和符号都是用电子元件的不同状态表示的,即以电信号表示。根据计算机的这一特点,提出这样的问题:数值在计算机中是如何表示和运算的?这就是本节要讨论的“数制”问题。1.2.1数制的基本概念用一组固定的数字(数码符号)和一套统一的规则来表示数值的方法称为数制(numbersystem),也称为计数制。数制的种类很多,除了十进制数,还有二十四进制(24小时为一天),六十进制(60秒为1分钟、60分钟为1小时),二进制(手套、筷子等两只为一双)。

不论是哪一种数制,其计数和运算都有共同的规律和特点:(1)逢R进一

R是指数制中所需要的数字字符的总个数,称为基数(Radix)。例如:十进制数用0、1、2、3、4、5、6、7、8、9这十个不同的符号来表示数值。在十进制中基数是10,表示逢十进一。(2)位权表示法位权(也叫权)是指一个数字在某个位置上所代表的值,处在不同位置上的数字所代表的值不同,每个数字的位置决定了它的值或位权。例如:在十进制数586中,5的位权是100(即102)。位权与基数的关系是:各进位制中位权的值是基数的若干次幂。因此,用任何一种数制表示的数都可以写成按位权展开的多项式之和。例如:十进制数256.07可以用如下形式表示:1.2.2常用的数制不同的计数制以基数(Radix)来区分。若以R代表基数,则二进制数R=2,使用0、1共2个数符八进制数R=8,使用0、1、2、…6、7共8个数符十进制数R=10,使用0、1、2、…8、9共10个数符十六进制R=16,使用0、1、2、…8、9、A、B、C、D、E、F共16个数符1.十进制数(Decimal)按“逢十进一”的原则进行计数,称为十进制数,即每位计满10时向高位进1。对于任意一个十进制数,可用小数点把数分成整数部分和小数部分。十进制数的特点是:数字的个数等于基数10,逢十进一,借一当十;最大数字是9,最小数字是0,有10个数字字符0、1、2、3、4、5、6、7、8、9;在数的表示中,每个数字都要乘以基数10的幂次。

如在十进制数436.82中,小数点左边第一位的6代表个位,它的数值为6×100;小数点左边第二位的3代表十位,它的数值为3×101;左边第三位的4代表百位,它的数值为4×102;小数点右边第一位的值为8×10-1;小数点右边第二位的值为2×10-2。可见,数码处于不同的位置,代表的数值是不同的。十进制数的性质是:小数点向右移动一位,数值扩大10倍;反之,小数点向左移动一位,数值缩小10倍。2.二进制数(Binary)按“逢二进一”的原则进行计数,称为二进制数,即每位计满2时向高位进1。(1)二进制数的特点二进制数的特点是:数字的个数等于基数2;最大数字是1,最小数字是0;即只有两个数字字符:0,1;在数值的表示中,每个数字都要乘以2的幂次,这就是每一位的位权。第一位的位权是20,第二位是21,第三位是22,后面依次类推。表1-1给出了二进制的位权和十进制数的对应关系。二进制位数7654321-1-2-3-4位权(十进制表示)262524232221202-12-22-32-464321684210.50.250.1250.0625表1-1二进制的位权与十进制数值的关系

任何一个二进制数,都可以用以下方法表示为十进制数:

二进制数的性质是:小数点向右移动一位,数值就扩大2倍;反之,小数点向左移动一位,数值就缩小2倍。例如:把二进制数110.101的小数点向右移动一位,变为1101.01,比原来的数扩大了2倍;把110.101的小数点向左移动一位,变为11.0101,比原来的数缩小2倍。(2)二进制算术运算二进制算术运算与十进制运算类似,同样可以进行算术运算。二进制求和法则如下:0+0=00+1=11+0=11+1=10(逢二进一)二进制求差法则如下:0-0=01-0=110-1=1(借一当二)1-1=0二进制求积法则如下:0×0=00×1=01×0=01×1=1二进制求商法则如下:0÷1=01÷1=1例1.1求1101.01+1001.11=?解1101.01+1001.11——————10111.00计算结果:1101.01+1001.11=10111.00例1.2求1101.01-1001.11=?解1101.01-1001.11—————0011.10计算结果:1101.01-1001.11=11.10例1.3求1101×110=?解1101×110————000011011101—————1001110计算结果:1101×110=10011103.八进制数(Octal)八进制数的进位规则是“逢八进一”,其基数R=8,采用的数码是0、1、2、3、4、5、6、7,每位的位权是8的幂次。例如,对于八进制数376.4可表示为4.十六进制数(Hexadecimal)十六进制数的特点是:①采用的16个数码为0、1、2、…、9、A、B、C、D、E、F。符号A~F分别代表十进制数的10~15。②进位规则是“逢十六进一”,基数R=16,每位的位权是16的幂次。例如,对于十六进制数3AB.11可表示为

5.常用数制的对应关系(1)常用数制的基数和数字符号常用数制的基数和数字符号如表1-2所示。(2)常用数制的对应关系十进制二进制八进制十六进制0123456789101112131415160110111001011101111000100110101011110011011110111111110012345671011121314151617200123456789ABCDEF10表1-3常用数制的对应关系1.2.3数制间的转换将数由一种数制转换成另一种数制称为数制间的转换。由于计算机采用二进制,而在日常生活中人们习惯使用十进制,所以在计算机进行数据处理时就必须把输入的十进制数换算成计算机所能接受的二进制数,计算机运行结束后,再把二进制数换算成人们习惯的十进制数输出。这两个换算过程完全由计算机系统自动完成。1.二进制数与十进制数间的转换(1)二进制数转换成十进制数只要将二进制数按位权展开,然后将各项数值按十进制数相加,便可得到等值的十进制数。例如:(2)十进制数转换成二进制数十进制数转换成二进制数需要将整数部分和小数部分分别转换。①整数转换整数转换用除2取余法。例1.5将(57)10转换为二进制数:解:设用除2取余法得:结果:

②小数转换小数转换用乘二取整法。例1.6将(0.834)10转换成二进制小数。解:设用乘二取整法得:结果:

将一个带有整数和小数的十进制数转换成二进制数时,必须将整数部分和小数部分分别按除2取余法和乘2取整法进行转换,然后再将两者的转换结果合并起来即可。同理,若将十进制数转换成任意R进制数(N)R,则整数部分转换采用除R取余法;小数部分转换采用乘R取整法。2.二进制数与八进制数、十六进制数间的转换八进制数和十六进制数的基数分别为8=23,16=24,所以三位二进制数恰好相当于一位八进制数,四位二进制数相当于一位十六进制数,它们之间的相互转换是很方便的。

二进制数转换成八进制数的方法是从小数点开始,分别向左、向右,将二进制数按每三位一组分组(不足三位的补0),然后写出每一组等值的八进制数。例1.7将二进制数100110110111.00101转换成八进制数解结果:

八进制数转换成二进制数的方法恰好和二进制数转换成八进制数相反,即从小数点开始分别向左、向右将八进制数的每一位数字转换成三位二进制数。如对例1.7,按相反的过程转换,有:

二进制数转换成十六进制数的方法和二进制数与八进制数的转换相似,从小数点开始分别向左、向右将二进制数按每四位一组分组(不足四位补0),然后写出每一组等值的十六进制数。例1.8将二进制数1111000001011101.0111101转换成十六进制数。结果:

1.2.4数在计算机中的表示方式由于计算机采用二进制,所有数据信息在计算机内部都必须以二进制编码的形式表示。也就是说,一切输入到计算机中的数据都是由0和1两个数字进行组合的。对于数值型数据来说有正有负,在数学中用符号“+”和“-”表示正数和负数,但在计算机中数的正、负号也要用0和1来表示。1.带符号数的表示方法在计算机中,对有符号的数常用原码、反码和补码三种方式表示,其主要目的是解决减法运算的问题。任何正数的原码、反码和补码的形式完全相同,负数则各自有不同的表示形式。(1)数的原码表示正数的符号位用0表示,负数的符号位用1表示,有效值部分用二进制绝对值表示,这种表示法称为原码。原码对0的表示方法不唯一,即正的0(000…00)和负的0(100…00)。例如:X=+76;Y=-76则:(2)数的反码表示正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位取反,即“0”变“1”,“1”变“0”。例如:(+76)原=(+76)反=01001100(-76)原=11001100(-76)反=10110011

可以验证,任何一个数的反码的反码即是原码本身。(3)数的补码表示正数的补码和原码相同,负数的补码是其反码加1。例如:(+76)原=(+76)反=(+76)补=01001100(-76)原=11001100(-76)反=10110011(-76)补=10110100

可以验证,任何一个数的补码的补码即是原码本身。

引入补码的概念之后,减法运算可以用加法来实现,并且两数的补码之“和”等于两数“和”的补码。因此,在计算机中,加减法基本上都是采用补码进行运算。2.定点数与浮点数数值除了有正、负数外,还有带小数点的数值。当所要处理的数值含有小数部分时,计算机还要解决数值中的小数点的表示问题。在计算机中,通常采用隐含规定小数点的位置来表示有小数点的数。根据小数点的位置是否固定,数的表示方法可以分为定点整数、定点小数和浮点数三种类型。定点整数和定点小数统称为定点数。(1)定点整数定点整数是指小数点隐含固定在整个数值的最后,符号位右边的所有位数表示的是一个整数。如果用4位表示一个定点整数,则0110表示二进制数“+110”,即十进制数“+6”。(2)定点小数定点小数是指小数点隐含固定在某一个位置上的小数。通常将小数点固定在最高数据位的左边。如果用4位表示一个定点小数,则0110表示二进制数“+0.110”,即十进制数“+0.75”。

由此可见,定点数可以表示纯小数和整数。定点整数和定点小数在计算机中的表示没有什么区别,小数点完全靠事先约定而隐含在不同位置,如图1-5所示。(3)浮点数浮点数是指小数点位置不固定的数,它既有整数部分又有小数部分。在计算机中通常把浮点数分成阶码(也称为指数)和尾数两部分来表示,其中阶码用二进制定点整数表示,尾数用二进制定点小数表示,阶码的长度决定数的范围,尾数的长度决定数的精度。为保证不损失有效数字,通常还对尾数进行规格化处理,即保证尾数的最高位为1,实际数值通过阶码进行调整。

浮点数的格式多种多样,例如:某计算机用32位表示浮点数,阶码部分为8位补码定点整数,尾数部分为24位补码定点小数。采用浮点数的最大特点是比定点数表示的数值范围大。例如:+110110的数值等于26×0.110110,阶码为6,即+110,尾数为+0.110110。其浮点数表示形式如图1-6所示。图1-6浮点数示例1.2.5字符编码计算机是以二进制方式组织、存放信息的,信息编码就是指对输入到计算机中的各种数值型和非数值型数据用二进制进行编码的方式。对不同机器、不同类型的数据,其编码方式是不同的,编码的方法很多。为了使信息的表示、交换、存储或加工处理方便,在计算机系统中通常采用统一的编码方式,因此制定了编码的国家标准或国际标准。如:位数不等的二进制码、BCD码、ASCII码等。计算机使用这些编码在计算机内部和键盘等终端设备之间以及计算机之间进行信息交换。

在输入过程中,系统自动将用户输入的各种数据按编码的类型转换成相应的二进制形式存入计算机的存储器中。在输出过程中,再由系统自动将二进制编码的数据转换成用户可以识别的数据形式输出给用户。字符是计算机中使用最多的非数值型数据,是人与计算机进行通信、交互的重要媒介,国际上广泛使用美国信息交换标准码(ASCII:AmericanStandardCodeforInformationInterchange)。

ASCII码有7位码和8位码两种形式。7位ASCII码是用7位二进制数进行编码的,所以可以表示128个字符。这是因为1位二进制数可以表示两种状态,0或1(21=2);两位二进制数可以表示4种状态,00、01、10、11(22=4);以此类推,7位二进制数可以表示27=128种状态,每种状态都唯一对应一个7位二进制码,这些码可以排列成一个十进制序号0~127。

ASCII码表的128个符号是这样分配的:第0~32号及127号(共34个)为控制字符,主要包括换行、回车等功能字符;第33~126号(共94个)为字符,其中第48~57号为0~9十个数字符号,65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。例如,大写字母A的ASCII码值为1000001,即十进制数65,小写字母a的ASCII码值为1100001,即十进制数97。这些字符基本满足了各种程序设计语言、西文文字、常见控制命令等的需要。

为了使用方便,在计算机的存储单元中,一个字符的ASCII码占一个字节(8个二进制位),其最高位只用作奇偶校验位,如图1-7所示。图1-7一个字节的ASCII码表示

奇偶校验是指在代码传送过程中,用来检验是否出现错误的一种方法。一般分为奇校验和偶校验两种。奇校验规定,正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7处添1来满足;偶校验规定,正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7处添1来满足。

例如:将“COME”中的4个字符用带奇校验的ASCII码存储。解:先由附录B查出十进制ASCII码,然后转换成二进制ASCII码,再根据奇校验的规定在左面补上奇偶校验位,如表1-4所示。1.2.6存储单位各种各样的数据在计算机内都用二进制形式存储,在计算存储空间的大小时,要用到不同的存储单位。在这一节,我们要讨论计算机中数据的存储单位问题。1.位(bit)位是计算机的最小存储单位,简写为“b”,表示二进制中的一位。位也称为“比特”,是bit的音译。一个二进制位只能表示2种状态,即只能存放二进制数“0”或“1”。2.字节(Byte)字节是计算机的最小存储单元,也是处理数据的基本单位,简写为“B”,表示二进制中的8位,即1B=8b。字节也称为“拜特”,是Byte的音译。常用的存储单位有:KB、MB、GB、TB。1KB表示1K字节,读作“千字节”,是2的10次方字节,等于1024个字节;相应的1MB读作“兆字节”,是2的20次方字节,等于1024KB;1GB读作“吉字节”或者“千兆字节”,是2的30次方字节;1TB读作“太字节”,是2的40次方字节。3.常用单位的前缀当我们说64KB的时候,KB是Kilobyte(千字节)的缩写。Kilo是一种度量前缀,表示1000。如1Kilometer是1千米,1Kilogram是1000克。由于数据在计算机中用二进制形式存储,为了计算的方便,当K用在度量存储空间的时候,这里的1000仅仅是一个近似值。它的实际值是2的10次方,等于1024。

在描述计算机存储容量时,常用的存储单位KB、MB、GB、TB的前缀的含义见表1-6。

例1.9为了满足一台1024列768行像素的单色显示器存储需要,需要使用多小字节?解:我们可以说它具有1024列,每列包含768个像素。由于是单色显示器,每个像素需要1位存储空间,也就是说,一个字节能存放8个像素。所以共需要:

例1.10假设显示屏上的每个像素都要用两个字节来存储,一台1024列768行像素的显示器需要多少KB的存储空间。解:所需要的存储空间为:

例1.11计算机动画对计算机存储的需求一直都在增长。有一种格式的计算机动画要把一系列图片存储在计算机中。假设图片显示在屏幕上一个包含1024列768行像素的长方形矩阵中,而且一个像素需要一个字节的存储空间,要存储一段包含32幅图片的动画需要多少存储空间?在求得字节数以后,再把答案转化为MB。解:一个图片所包含的像素个数为由于一个像素需要一个字节的存储空间,所以32幅图片所需要的字节数为将其转化为MB,有

例1.12如果用1000B来近似表示1KB,计算出它的绝对误差和相对误差。解:绝对误差是指近似值与精确值的差的绝对值。相对误差是指绝对误差与精确值的比率,常用百分比表示。1KB的实际值是1024B,近似值是1000B,故所求绝对误差为相对误差为

例如,在进行两数相加时,首先写出被加数和加数,这种方法曾用来计算两个十进制数的加法。然后按照由低位到高位的顺序,根据二进制求和法则把两个数字逐位相加即可。1.3计算机程序1.3.1程序的概念通常,完成一项复杂的任务,需要进行一系列的具体工作。这些按一定的顺序安排的工作即操作序列,就称为程序(program)。例如,学校里开会的程序步骤:

(1)宣布大会开始。

(2)绍出席大会的领导。

(3)领导讲话

(4)宣布大会结束。

对于计算机来说,计算机要完成某种数据处理任务,我们可以设计计算机程序,即规定一组操作步骤,使计算机按该操作步骤执行,完成该数据处理任务。在为计算机设计程序时,必须用特定的计算机语言描述。用计算机语言设计的程序,即为计算机程序。程序就是计算机为完成某一个任务所必须执行的一系列指令的集合。1.3.2寄存器

CPU中设有寄存器,与运算器或控制器直接相连,可以存放数据或计算的中间结果。寄存器的数据存取速度快,但是寄存器不能无限制的增加,多了就会影响速度。为了解决这个矛盾,在存储器中特别划分出了一块区域,称为栈,其特点是存取数据都在一端,该端称为栈顶。栈的存取不需要计算地址,因此速度快,可以作为寄存器的补充。

累加器A:是一个8位寄存器,它与运算器(ALU)一起完成各种运算。ALU是一个组合逻辑电路,本身不能保留信息,只有与累加器A一起才能完成各种运算:累加器A在运算前向ALU提供操作数,运算后暂存运算结果。

程序计数器PC:为16位寄存器,用来寄存指令的地址。CPU通过PC取来一条指令执行时,PC便“指向”下一条指令,即PC的值变为下一条将要执行的指令的地址。除非遇到转移指令或子程序调用指令,否则CPU都是通过PC顺序地提取指令。例如,一条指令占2个字节,取出这条指令之后,PC的值自动加2。1.3.3程序的执行过程程序是一组指令,指令联系着存储器和CPU。程序和数据都存储在内存中,所以执行程序时CPU需要频繁地于内存进行数据交换。指令由操作码和操作数两部分组成:操作码:表示该指令应进行什么性质的操作操作数:数据所在的存储单元的地址或直接就是数据。例如,“01H1000H”是一条操作指令,其中01H是操作码,1000H是操作数。具体含义是:“将地址为1000H存储单元中的数据放到累加器A中”。

下面我们通过一个程序,了解计算机的组成原理和工作过程。这是一个简单的求和程序:

y=3+4

3、4和y存储在存储器中数据存储区,假如地址依次为3000H、3001H、3002H。注意,y不是数据,只是地址为3002H的存储单元的标示符,这个单元将要存放计算结果。程序由4条指令组成,如表1-7所示表1-7求和程序y=3+4所包含的指令

这组指令依次存储在存储器中的程序存储区,地址分别为2000H、2003H、2006H、和2009H,前3条指令各占3个字节,第4条指令占一个字节。一条指令(013000H)的实际存储如图1-8所示。01H2000H00H2001H30H2002H图1-8指令013000H的存储

程序开始时累加器A和存储器的状态如右图所示。PC指向第一条指令,累加器A为空(或者为上一次使用累加器A的程序存储在累加器中的数据),存储器的程序区中2000H-2009H存放四条指令,数据区存放程序执行时需要的数据,其中3000H存放数据3,3001H存放数据4,3002H用于存放最终的结果y。

右图是执行第一条指令之后的存储器和累加器A的状态,第一条指令的作用是将地址为3000H单元中的数据放入累加器A,而3000H单元中的数据为3,所以此时累加器A中的内容变为3,PC指向下一条指令,即第二条指令。

右图给出第二条指令执行之后的结果,第二条指令的作用是将地址为3001H单元中的数据与累加器A中的数据相加,结果保留在累加器A。3001H单元中存放的数据为4,累加器A中的数据为3,相加后结果为7,将7保存在累加器A中,所以此时累加器A的内容变为7,而PC指向下一条指令,即第3条指令。第2章C语言概述

1.C语言是在B语言的基础上发展起来的。1963年,CPL(CombinedProgrammingLanguage)语言1967年,BCPL(BasicCombinedProgrammingLanguage)语言1970年,B语言(取BCPL的第一个字母)1972年,C语言(取BCPL的第二个字母)2.C语言的版本:标准C,ANSIC2.1C语言的发展历史1978年,B.W.Kernighan和D.M.Ritchie合著了《TheCprogramminglanguage》,

称为标准C。1983年,美国国家标准化协会(ANSI)对C语言制定了新的标准,称为ANSIC。在微型机上使用的C语言编译系统有MicrosoftC,TurboC,QuickC等,它们的不同版本又略有差异。C++等面向对象语言(第四代语言)是C语言的发展;Java语言也是以C为基础的。

VC++,VJ++等是可视化语言。2.2C语言的特点(1)简洁紧凑(2)介于汇编语言与高级语言之间(3)是一种结构化语言(4)有丰富的数据类型(5)有丰富的运算符(6)具有较高的移植性(7)灵活性(8)缺点2.3C语言程序设计初步2.3.1简单的C程序实例例2.1在屏幕上输出一行信息:Hello,Everyone!#include<stdio.h>voidmain(){printf("Hello,Everyone!\n");}编译预处理主函数语句例2.2一个简单的加法计算程序,求两个整数之和并输出。#include<stdio.h> voidmain() {}Inputtwointegers:35↙sum=8

int

x,y,sum; /*定义存放整数的变量x、y、sum*/

printf("Inputtwointegers:");

scanf("%d%d",&x,&y);/*给变量x,y输入整数*/sum=x+y; /*计算x+y,把结果赋给sum*/

printf("sum=%d\n",sum); /*输出sum的值*/程序运行情况:例2.3输入三个数,求其中最大的数。a,b,c=?38-6↙max=8.000000#include<stdio.h>floatmax(floatx,floaty){}voidmain(){floata,b,c,d;

printf("a,b,c=?\n");

scanf("%f%f%f",&a,&b,&c);d=max(a,b);d=max(d,c);

printf("max=%f\n",d);}floatz;if(x<y)z=y;elsez=x;returnz;2.3.2C程序结构

C程序由函数、编译预处理命令及注释三部分组成。

1.函数函数包括两部分:①函数首部,②函数体。

floatmax(floatx,floaty){floatz;if(x<y)z=y;elsez=x;returnz; }函数类型函数名(参数){

函数体

}2.编译预处理命令以“#”号开头的行。不同的编译预处理命令完成不同功能。如“#include<stdio.h>”。3.注释注释部分在编译时均被忽略掉。注释的目的是增加程序可读性。可用/*……*/对C程序中的任何部分作注释.2.4C程序在计算机上执行2.4.1C程序执行的步骤

编辑、编译、连接、运行第3章基本数据类型与常用库函数

第3章基本数据类型与常用库函数3.1字符集与标识符3.2数据类型与基本数据类型3.3常量与变量3.4数据的输入/输出函数3.5常用库函数3.1字符集与标识符1.C语言的字符集大写英文字母(26个):A-Z小写英文字母(26个):a-z阿拉伯数字(10个):0-9特殊字符(30个):+-*/%<>=^~|&!#′

″,.:;()[]{}_?\空格2.标识符C语言规定:标识符由字母、数字和下划线组成第一个字符必须为字母或下划线大小字母有区别合法标识符非法标识符sum、area、PI、_int、a_sum、s1235、D1Old234P、cad-y、a2.3、a&b标识符分以下三类。(1)关键字,如:int等(2)预定义标识符,如:printf等。(3)用户标识符,如:sum等3.2数据类型与基本数据类型

3.2.1数据类型3.2.2基本数据类型有整型、实型和字符型。1.整型数据基本整型(int)、短整型(short)、长整型(long)

占字节数类型标识符数值范围有符号整数2int-32768~327672short-32768~327674long-2147483648~2147483647无符号整数2unsigned0~655352unsignedshort0~655354unsignedlong0~42949672952.实型数据即实数,又称为浮点数。

单精度实型(float类型)用4个字节存放一个实数。双精度实型(double类型)用8个字节存放一个实数。

占字节数类型标识符数值范围单精度实型4float±(10-38~1038),6位有效数字双精度实型8double±(10-308~10308)16位有效数字3.字符型数据在内存中以相应的ASCII码存放。例如字符'B'的ASCII码为66,它在内存中以如下形式存放:010000103.3.1常量常量:其值不变的量。1.整型常量即整常数。三种形式:

1)十进制整数:如123、-456、0。

2)八进制整数:如010、-0123。

3)十六进制整数:如0x123。3.3常量与变量2.实型常量又称浮点数,有两种形式:

1)小数形式:0.123、.123、-123.0、123.、0.0(必须有小数点)2)指数形式:123e3或123E3(代表123x103)(e或E前必须有数字,且e后必须有整数)

3.字符常量用单引号括起来的单个普通字符或转义字符.如‘a’‘A’‘?’‘\n’‘\101’字符常量的值:该字符的ASCII码值如‘A’——65,‘a’——97,‘0’——48,‘\n’——10字符数据可以参加运算,例如‘A’+2的值为67,即’C’的ASCII码<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符4.字符串常量

”Howdoyoudo”,”CHINA”,”a”CHINA\0例字符串“CHINA”在内存中例空串””\0

注意:’a’是字符常量,”a”是字符串常量。每个字符串末尾自动加一个’\0’作为字符串结束标志3.3.2符号常量符号常量:给常量所起的名字。例如:#definePI3.14159则PI即3.14159【例3.1】输入一个半径值,求圆周长和圆面积。#include<stdio.h>#definePI3.14159voidmain(){floatr,c,area;

scanf("%f",&r);c=2*PI*r;area=PI*r*r;

printf("c=%f\narea=%f\n",c,area);}1↙1↙c=6.283180area=3.1415903.3.3变量变量:可以改变的量。1.变量的定义

类型标识符变量名列表;例如:

int

a,b,c;

floatx,y,z;2.变量赋初值例如:

intx,sum=0;

inta=1,b=1,c=1;

不能写成inta=b=c=1;

注意:变量定义后未初始化,其值不定。3.4数据的输入/输出函数3.4.1字符输入/输出函数1.字符输入函数(getchar)函数原型:int

getchar()

函数功能:从键盘读取一个字符。2.字符输出函数(putchar)函数原型:int

putchar(charx)

函数功能:向屏幕输出一个字符x。【例3.2】getchar函数和putchar函数应用举例。#include<stdio.h>voidmain(){charc1,c2,c3;c1=getchar();c2=getchar();c3=getchar();putchar(c3);putchar(c2);putchar(c1);} abc↙abc↙cba

3.4.2格式输出函数printf

使用方式:printf(格式控制字符串,输出项)例如

inta=3;floatx=5;

printf(“a=%d,x=%f\n”,a,x);输出:a=3,x=5.0000001、整数的输出

例如:inta=12;

printf(“a=%d,%o,%x”,a,a,a);

输出:a=12,14,c例如:longa=1234567;

printf(“a=%ld,%lo,%lX”,a,a,a);输出:a=1234567,363227,1E697指定宽度m:%md%mo%mx例如:inta=12345,b=-1;printf(“a=%4d,b=%4d\n”,a,b);

输出:a=12345,b=-12、字符、字符串的输出printf(“%c,%s\n”,‘c’,“Windows”);输出:c,Windowsprintf(“%4c,%4.2s\n”,‘c’,“Windows”);输出:c,Wi

3、实数的输出floata;doubleb;a=1/3.0;b=1/3.0;

printf("a=%f,b=%18.16f\n",a,b);输出:a=0.333333,b=0.3333333333333333例如:printf("%e",123456789123.0);

输出1.234568e11

注意!:

%f%e只能输出实数,不能输出整数%d%o%x只能输出整数,不能输出实数3.4.3格式输入函数scanf

scanf(格式控制字符串,地址列表)例3.3用scanf函数输入数据。#include<stdio.h>voidmain(){int

a,b,c;

scanf("%d%d%d",&a,&b,&c);

printf("%d,%d,%d\n",a,b,c);}123↙ 1,2,31.格式说明符的使用

附加格式说明符:

l

输入长整型数据(%ld,%lo,%lx)

和double型数据(%lf,%le)。格式字符输入说明

d十进制整数。

o八进制整数。

x十六进制整数。

c单个字符。

s字符串。

f,e

实数。2.指定输入数据的宽度scanf(“%3d%3d”,&a,&b);输入:123456,则a=123,b=456scanf(“%3c”,&ch);输入:abc,则ch=‘a’3.输入缓冲区

4.输入项之间的分隔符C语言确定一个数据项的结束,有下列几种方法:①遇到空格,或按回车键,或跳格键(Tab)。②按指定的宽度结束,如“%3d”,只取3列。③遇到非法输入。例如:inta;charch;floatx;

scanf("%d%c%f",&a,&ch,&x);输入:1234a123o.78↙这时:a=1234,ch=‘a’,x=1232.5常用库函数调用库函数时,应注意下面两点:(1)用#include预处理命令将对应的头文件包含到程序中;(2)确定函数参数的类型、返回值的类型,以保证正确地使用该函数。例如数学函数中的求平方根函数sqrt的原型如下:

doublesqrt(doublex)【例3.4】输入一个正数,求它的平方根值。#include<stdio.h>#include<math.h>voidmain(){floatx,y;

scanf("%f",&x);if(x<0)x=-x;y=sqrt(x);printf("%.4f\n",y);}

2↙2↙1.4142第4章运算符和表达式第4章运算符和表达式4.1算术运算符和算术表达式4.2自增、自减运算4.3位运算4.4赋值运算4.5关系表达式与逻辑表达式4.6条件表达式与逗号表达式表达式

:用运算符将要运算的对象连接起来的式子运算符的优先级:如2+5*4运算符的结合性:如3.0*5/2书写表达式规则:如可以写作1.0/2*(a*x+(b+x)/(a+x))

4.1算术运算符和算术表达式

运算符表达式

+3+5、+3-5-2、-3*3*5

/3/2(结果为1)

3/2.0,3.0/2,3.0/2.0(结果为1.5)%7%4(结果为3)

(求余)-9%5(结果为-4)

9%(-5)(结果为4)

2.0%3(错误,2.0不是整数)1.单目运算符2.双目运算符

字符以其ASCII码参加运算:

‘a’+1为98‘b’-’a’为1‘8’-’0’为8例:设a为两位整数,求其各位数字之和。解:a/10+a%10(如a=24,则结果为6)例:求一个整数b的十位上的数字。解:(b%100)/10(如b=4321,则结果为2)

3.算术运算中的类型转换

(1)自动转换规则如下doublefloatlongunsignedintchar,short低高例如:2+’a’+1.52+97+1.599+1.599.0+1.5100.5(2)强制类型转换一般形式为:

(类型名)表达式例如:

(double)a(将a转换成double类型)(int)(x+y)(将x+y的值转换成整型)(float)(5%3)(将5%3的值转换成float型)(int)3.14%2(即3%2)4.2自增、自减运算

1.运算符:

++、--2.使用格式:

++ii的值先加1,后使用

如i=3;j=++i;j:4,i:4

i++i的值先使用,后加1

如i=3;j=i++;j:3,i:4--ii的值先减1,后使用i--i的值先使用,后减1

又如:

i=3;printf(“%d”,++i);

i=3;printf(“%d”,i++);3.优先级与结合性

++、--的优先级与单目运算符(+、-)相同,比双目运算符(*、/、%、+、-)高

++、--具有右结合性例如:-a++相当于:-(a++)4.使用自增、自减运算符的注意事项略4.3位运算

1.位运算符的种类

C语言共有六种位运算符:

&按位与运算符

|按位或运算符

^按位异或运算符

<<二进制左移运算符

>>二进制右移运算符

~按位取反运算符2.按位与运算(&)

当对应位均为1时,结果为1;否则为0。例如,12&10的运算如下:

12:00001100&10:00001010_________________

结果:00001000

又如,只保留a的第5位,其余位置0:

a:11010010&020:00010000________________________a&020:000100003.按位或运算(|)

对应位均为0时,结果为0;否则结果为1。例如:

0123:01010011|014:00001100___________________0123|014:01011111例如:若想使a中的高四位(左端四位)不变,低四位(右端四位)置1,可用:a=a|017。4.按位异或运算(^)

当对应位相同时,结果为0;否则为1。例如:00110011^11000011_____________11110000

又如,使a的高四位不变;低四位取反:

a:01101010^017:00001111___________________a^017:011001015.按位取反运算(~)

使每一位上的0变1;1变0。

例如;~0115是将八进制数115按位求反。即:

~01001101_______________

结果:10110010

6.左移运算(<<)

例如:

chara=6,b;b=a<<2;

用二进制数如下:

a:00000110(a=6)b=a<<2:00011000(b=24)

7.右移运算(>>)

inta=-071400,b;b=a>>2;

符号位

a的二进制原码表示:1111001100000000a的二进制反码表示:1000110011111111a的二进制补码表示:1000110100000000(机内存储形式)b=a>>2:1110001101000000b的二进制原码表示:1001110011000000b的八进制数:-0163004.4赋值运算1.赋值表达式

变量名=表达式如a=3b=2*a+102.赋值语句

变量名=表达式;

如a=3;c=b=a+3;右结合3.赋值时数据类型的转换在赋值语句

变量名=表达式;中,当左右类型不同时,系统自动转换,具体规则见表4.1。4.复合赋值运算

+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=例如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x/=2*y-10等价于x=x/(2*y-10)a&=b等价于a=a&b4.5关系表达式与逻辑表达式4.5.1关系运算符1.六种关系运算符>(大于)>=(大于等于)<(小于)<=(小于或等于)==(等于)!=(不等于)注意:两字符间不可以加空格,如:<=就不能写成:<=。2.运算优先级与结合性

(1)“>、>=、<、<=”优先级相同,“==、!=”优先级相同,且前四种优先级高于后两种。

(2)比算术运算符的优先级低、比赋值运算符的优先级高(参见附录C)。

(3)结合性为“自左向右”3.关系表达式

例如:

a>b,a+b>b+c,(a=3)>(b=5),‘a’<’b’,(a>b)>(b<)

关系表达式成立,其值为1;关系表达式不成立,其值为0。【例4.1】分析下面程序的运行结果。#include<stdio.h>voidmain(){floatx,y=0.6;y=y*11;x=6+0.6;if(x==y)printf("OK,x==y");elseprintf("NO,x!=y");}程序运行结果:NO,x!=y#include<math.h>fabs(x-y)<1e-54.5.2逻辑运算符1.三种逻辑运算符

!(逻辑非)

&&(逻辑与)

||(逻辑或)运算结果:用1表示“真”,用0表示“假”,例如

!a

a&&b

a||b2.运算优先级与结合性(1)优先级从高到低:!、&&、||,(2)“!”的结合性是“从右到左”。“&&”和“||”的结合性是“从左到右”。例如:判别“a小于4且|b|>3”的逻辑表达式可写为a<4&&(b>3||b<-3),若写成a<4&&b>3||b<-3,则是错误的。

3.逻辑表达式在逻辑运算中,将非0值视为真、将0视为假。

【例4.2】根据下列条件,写出C的逻辑表达式。(1)条件“|x|<10”。

逻辑表达式为

-10<x&&x<10。

注意,不能写为-10<x<10。(2)条件“|x|是一个具有两位数的整数”。

逻辑表达式为

x>=10&&x<=99||x>=-99&&x<=-10。(3)条件“y年是闰年”。

y是闰年的条件为符合下面二者之一:①能被4整除,但不能被100整除。②能被400整除。逻辑表达式为

y%4==0&&y%100!=0||y%400==0。(4)条件“长度分别为a、b、c的三条线段能够组成三角形”。

逻辑表达式为

a+b>c&&a+c>b&&b+c>a。4.6条件表达式与逗号表达式4.6.1条件表达式1.条件运算符

?:

2.条件表达式表达式1?表达式2:表达式3

例如x<0?-x:x【例4.3】用条件表达式求解下列问题。(1)求两个变量a、b的最大值。

解s=(a>b)?a:b;(2)求三个变量a、b、c的最大值。

解s=(s=a>b?a:b)>c?s:c;(3)对字符变量ch,若为小写字母,则改为大写字母,其余字符不变。

ch=(ch>=’a’&&ch<=’z’)?(ch+’A’-‘a’):ch;(4)输出整型变量x的绝对值。

解(x>0)?printf(“%d”,x):printf(“%d”,-x);【例4.4】任意输入三个整数,按从大到小输出。程序如下:#include<stdio.h>voidmain(){inta,b,c,m,n,k;

scanf("%d%d%d",&a,&b,&c);m=(m=a>b?a:b)>c?m:c;/*将a、b、c中的最大数赋给m*/n=(n=a<b?a:b)<c?n:c;/*将a、b、c中的最小数赋给n*/k=a+b+c-m-n;/*将a、b、c中的中间数赋给k*/

printf("%d%d%d\n",m,k,n);/*从大到小输出三个数*/}程序运行情况:3-59↙93-54.6.2逗号表达式形式:表达式1,表达式2,……,表达式n结合性:从左向右优先级:最低逗号表达式的值:取最后一个表达式的值例如:(1)a=2+3,4*5;(2)inta=2,c;c=(b=a++,a+2);(3)inta=2,c;c

温馨提示

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

评论

0/150

提交评论