资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第1章 C语言程序设计概述,C语言程序,简单C语言程序的结构和格式,结构化程序设计,编程实践,算法及其描述,1.1 C语言程序,一、计算机语言与计算机程序,计算机语言,计算机语言是计算机能够理解和识别的语言,是人与计算机进行信息交流的工具。它通过一定的方式向计算机传送操作指令,从而使计算机能够按照人们的意愿进行各种操作处理。,计算机语言的种类很多,大体上经过了由低级语言到高级语言的发展过程,目前广泛使用的有C、C+、VB、VC+、Java、Delphi等。,计算机程序,计算机程序就是按照计算机语言规则组织起来的一组指令,或者说计算机程序是计算机能够自动执行的一组指令的集合。著名计算机科学家尼克劳斯,沃思(Niklaus Wirth)提出:,数据结构+算法=程序,这一公式展示出了程序的本质。,程序设计就是编写程序,它是在对算法进行正确描述的基础上进行的,是用计算机语言实现算法的过程。,编写程序的基本要求是首先保证语法上的正确性,然后是保证逻辑的正确性。,1.1 C语言程序,二,、C语言概述,一般认为,C语言具有如下特点:,简洁、紧凑,使用方便、灵活,C语言一共有32个关键字,9种控制语句。程序书写形式较自由,降低了格式要求,从而降低了程序员的劳动强度。,提供了丰富的运算符,C语言把括号、赋值、强制类型转换等都作为运算符处理,使C语言的运算类型极其丰富,表达式类型多样,从而可以在C语言中实现其他高级语言难以实现的运算。,数据结构丰富,具有现代化语言的各种数据结构,C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构。,良好的结构化设计语言,C语言具有结构化的控制语句(如if,else语句、while语句、do,while语句、switch语句、for语句),用函数作为程序的模块单位,便于按模块化方式组织程序,易于调试和维护。,返回,语法限制不太严格,程序设计自由度大,如对数组下标越界不作检查,由程序员自己掌握程序的正确性等,给了程序员较大的自由度。,可以直接对硬件进行操作,由于语言实现了对硬件的编程操作,因此语言集高级语言和低级语言的功能于一体,既可用于应用软件的开发,也适合于系统软件的开发。,可移植性强,虽然C语言具有低级语言的功能,但与汇编语言相比,它不依赖于机器硬件,在硬件结构不同的各种型号的计算机之间不做修改或稍作修改即可实现程序的移植。,1.2 简单C语言程序的结构和格式,一,、C语言程序实例,例1-1 最简单的C语言程序,输出,“,Hello,World!,”,。,#include,main(),printf(Hello,world!n);,例1-2 一个简单的C语言程序,其功能是求某个学生英语(eng)、数学(math)、C语言程序设计(c_pro)三门课的总成绩,并将结果显示在屏幕上。,/*example1-2 p102.c*/,#include,int sum(int a,int b,int c);,main(),int eng,c_pro,math;,int total;,eng=90;c_pro=96;math=92;,total=sum(eng,c_pro,math);,printf(sum=%3dn,total);,int sum(int a,int b,int c),return a+b+c;,总结上述两个程序,不难发现它们具有一个共同的特点,即每个程序都有一个main()函数,由于main()函数的函数体内容的不同,程序也就各自具有了不同的功能。事实上,任何一个C语言程序,main()函数都是不可缺少的。main()函数的一般结构为:,main(),函数体,1.2 简单C语言程序的结构和格式,二,、C语言程序的结构,C语言程序的基本结构为:,编译预处理命令,用户函数声明,全局变量定义,main(),函数体,fun1(),函数体,fun2(),函数体,funn(),函数体,1.2 简单C语言程序的结构和格式,三,、C语言程序的书写格式,语言程序书写格式较自由,一行内可写多条语句,若一条语句较长,也可以分写在多行上。,语句用分号,“,;,”,结尾,分号,“,;,”,是语句的一部分;也可以在一对花括号内写若干条语句,构成复合语句。,用语言编程时,建议一行写一条语句,遇到复合语句向右缩进,必要时对程序加上注释行。这样写出的源程序结构清楚、易于阅读、调试、维护和修改。,1.2 简单C语言程序的结构和格式,四,、标识符与关键字,1标识符,在程序中用来标识变量名、符号常量名、函数名、数组名和文件名等的有效字符序列统称为标识符。除库函数的函数名由系统定义外,其余都由用户自己定义。C语言规定,标识符只能由字母(AZ,az)、数字(09)和下划线,“,_,”,组成,且第一个字符必须为字母或下划线。,以下标识符是合法的:,a,PI,s123,_add,name_1,以下标识符是非法的:,45D 不允许以数字开头,ab 使用了非法字符,“,”,name-1 使用非法字符,“,-,”,(减号),返回,定义标识符时建议遵循如下原则:,在标识符中,大小写是有区别的,如max和MAX是两个不同的标识符。在定义标识符时,变量名、函数名等尽量用小写,符号常量用大写。,标准C不限制标识符的长度,但它受各种版本的C语言编译系统的限制,同时也受到具体机器的限制。例如在某些版本中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。因此,在编写程序时,应了解所用系统对标识符长度的规定,以免出现错误。,标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,程序中使用的标识符应,“,见名知意,”,,命名时尽量选取具有相关含义的英文单词或汉语拼音,如:score、area、name等,以增加程序的可读性。,关键字不能用作用户定义的标识符。,2关键字,关键字又称保留字,是语言规定的具有特定意义的字符串,如标准输入输出函数名scanf和printf、控制命令字if、while等都是系统的关键字。,ANSI C共有32个关键字。,1.3 结构化程序设计,对简单的问题进行程序设计时,其主要工作是选择或设计能解决问题的算法和确定数据结构。一旦算法和数据结构确定后,就可选用合适的程序设计语言来编制程序。程序设计的大致步骤是:设计数据结构和算法,画流程图,编写程序和测试程序。,随着计算机应用的日益广泛,计算机软件的规模和复杂性不断增加,软件的测试和维护也越来越困难。荷兰学者E.W.Dijkstra于1965年提出了,“,结构化程序设计,”,思想。1966年,Boehm和Jacopini提出三种基本结构作为程序设计的基本单元。,1顺序结构,顺序结构是最简单的一种结构,程序中的语句是按其在程序中的先后顺序逐条执行的,没有分支和转向。一般赋值语句、输入输出语句可以构成顺序结构。,2选择结构,选择结构又称分支结构,一般if语句、switch语句可构成选择结构。程序执行到这些语句时,将根据不同的条件去执行不同分支中的语句。,3循环结构,循环结构亦称重复结构,程序有限次地重复执行某一操作。循环结构有两种类型:当型循环和直到型循环。,返回,1.4 编程实践C语言程序的上机环境与步骤,一、C语言程序的上机步骤,从编写一个C语言程序到完成运行,一般需要经过以下几个步骤:,1编辑,利用文本编辑软件录入C语言程序,并以磁盘文件的形式保存起来,这类文件称为C语言的源程序文件,一般用.c作为文件的扩展名。编辑软件给用户提供书写程序的软件环境,用来输入源程序,也可以打开一个已经存在的源程序,进行修改。,2编译,就是将已编缉好的源程序翻译成二进制的目标代码。编译后生成的目标文件,扩展名为.o(unix下)或.obj(MS-DOS下)。,应当指出,编译后生成的目标代码,还不能运行。因为每一个模块往往是单独编译的,必须把单独编译的各个模块的目标代码与系统提供的标准模块连接后才能运行。,3连接,将各模块的目标代码与系统的标准模块经过连接处理后,得到具有绝对地址的可执行文件,扩展名为.out(unix下)或.exe(MS-DOS下)。,4运行,运行一个经过编译和连接后的可执行文件,得到操作结果。如果运行结果不正确,可回到第1步,重新对源程序进行编辑修改,然后再进行编译、连接和运行,这个过程可重复多次,直到取得正确的结果为止。,1.4 编程实践C语言程序的上机环境与步骤,二、Turbo C集成开发环境,1Turbo C 2.0的主窗口,返回,二、Turbo C集成开发环境,2环境配置窗口,二、Turbo C集成开发环境,3创建新文件,二、Turbo C集成开发环境,4输入源程序,二、Turbo C集成开发环境,5保存源程序,二、Turbo C集成开发环境,6编译单个源程序文件,二、Turbo C集成开发环境,7连接单个源程序文件,1.5 算法及其描述,一、算法概述,算法是为了解决一个问题而采取的方法和具体步骤,是计算机处理问题所需要的过程。无论是形成解题思路还是编写程序,都是在实施某种算法。,例1-3 求100以内所有自然数的和,即求1+2+3+,+99的值,写出相应算法。,用自然语言对该算法的描述可表示如下:,步骤:0sum。,步骤:1i。,步骤:sum+isum。,步骤:i+1i。,步骤:如果i99,到步骤;否则,返回到步骤。,步骤:显示sum的值,算法结束。,1.5 算法及其描述,二、程序流程图,常用的流程图符号及其功能,1.5 算法及其描述,二、程序流程图,例1-4 将例1-3中的算法用流程图表示。,返回,第2章,数据类型、运算符与表达式,语言的数据类型,常量与变量,运算符与表达式,不同类型数据间的转换,2.1语言的数据类型,数据是计算机程序处理的所有信息的总称,数值、字符、文本等都是数据,在各种程序设计中几乎都要使用和处理数据,程序设计的过程就是对数据加工的过程。,程序中的数据,编译程序都会为其分配一块内存空间存放,数据的改变其实就是存储空间中内容的改变。但分配多大的内存空间来容纳这个数据,可由数据的类型决定;另外对于数据的变化范围也可由数据类型来体现。数据的类型决定了一个数据所占的内存数、数据的取值范围及可对数据进行的操作。,为了对数据进行存储和处理,C语言根据数据的取值范围、运算属性及存储方式等,将数据分成不同的数据类型,在程序中用到的所有数据都必须指定其数据类型。,C语言中的数据类型十分丰富,可分为:基本类型,构造类型,指针类型,空类型四大类,其分类表示如下:,2.1语言的数据类型,2.1 语言的数据类型,说明如下:,基本类型:由系统事先定义好的不可再分割的类型,可以直接利用这些类型定义数据。其中的数值类型的数据主要用于科学计算,而字符类型主要用于处理文本数据。,构造类型:是利用已定义的一个或多个数据类型构造的更为复杂的类型,一个构造类型可以分解成若干个,“,成员,”,或,“,元素,”,,每个,“,成员,”,或,“,元素,”,都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有数组类型、结构体类型和共用体类型3种。,指针类型:是一种特殊的、同时又是具有重要作用的数据类型,其值用来表示某个变量在内存中的地址。,空类型:主要用于特殊指针变量和无返回值函数的说明。,返回,2.2 常量与变量,一,、常量,常量是指在程序运行过程中其值不能被改变的量,如程序中的具体数字、字符等。根据表示形式的不同,分为直接常量和符号常量。,直接常量就是具体的数据,又称为字面常量,有整型常量、浮点型常量、字符常量和字符串常量等类型,单从字面形式上即可判断出数据属于哪一种数据类型。例如:很容易判断出456是整型常量,4.6是实型常量,,b,是字符型常量等等,本章后面几个小节中还会详细讲解。,符号常量是指用标识符来代表一个常量,即直接常量的符号表示,从字面上看不出其类型和值。符号常量必须在程序中特别指定。例如:,#define PI 3.14,该命令定义了一个符号常量PI,它表示常数3.14。符号常量的使用方法将在第9章详细介绍。,2.2 常量与变量,一,、常量,1整型常量,整型常量即整数,按不同的进制区分,整型常量有三种表示形式。,十进制数:以非0开始的数,如:20、-50、+39等,其每个数字位可以是09。,八进制数:以0开始的数,如:06、0102、0607,与之对应的十进制数分别为6、66、391。因此,在C语言程序中,不能在一个十进制数前任意添加数字,“,0,”,。在用八进制数表示的整型常量中,其每个数字位可以是07。,十六进制数:以0X或0 x开始的数,如:0X0D、0XFF、0 x4e、0 x123,与之对应的十进制数分别为13、255、78、291。在用十六进制数表示的整型常量中,其每个数字位可以是09和AF(或af)。,2.2 常量与变量,一,、常量,2实型常量,实型常量即实数,又称浮点数,它只有十进制一种数制,但有两种不同的表示形式。,一般形式:由数字、小数点以及正负号组成,如:2.56、-56.3、0.056、.056、0.0,小数点不能省略。,指数形式:采用科学计数法表示的形式,由尾数、字母e(或E)和指数组成,将形如a,10b的数值表示成如下形式:,aEb 或 aeb,如:2.96E3、-0.78e6、.92e-6等。其中,a、e(或E)、b任何一部分都不允许省略,e(或E)后的指数部分必须为整数。,下面都不是合法的实型常量的表示形式:,3e3.0 e3 .e3,2.2 常量与变量,一,、常量,3字符常量,字符常量是用单引号括起来的单个字符。例如:,a,、,A,、,=,、,+,、,9,等。在语言中,使用字符常量时要注意以下几点:,单引号只作为字符常量的定界符,它本身并不是字符常量的一部分。,字符常量在内存中占用一个字节,可以是ASCII字符集中任意字符,包括空格符,(此处用,“”,来代表一个空格,不能写成两个连续单引号,的形式)。,C语言规定,所有字符常量都作为整型量来处理,其值就是该字符对应的ASCII值,因此字符常量,a,的值为97,,A,的值为65,数字字符,0,的值为48,则,A,+3的值就是,A,的ASCII值65与整数3相加,结果为68。,2.2 常量与变量,一,、常量,3字符常量-转义字符,C语言还允许使用一种以,“,”,开头的特殊形式的字符常量。这种字符常量称为转义字符,以反斜线,“,”,开头,后跟一个或几个字符。转义字符具有特定的含义,主要用于表示ASCII字符集中用一般字符不便于表示的控制字符或某些其他功能字符。常用的转义字符如下所示。,2.2 常量与变量,一,、常量,4字符串常量,字符串常量是用双引号括起来的字符序列,常用来表示程序中的文本数据,如I like C program.、a、等。,注意:双引号只作为字符串常量的定界符,它本身并不是字符串常量的内容,当计算字符串的长度时,双引号不计算在内。,在C语言中,系统在每个字符串的后面自动加入一个字符0作为字符串的结束标志,以便程序确认字符串在何处结束。,请注意字符常量和字符串常量的区别:,字符常量由单引号括起来,字符串常量由双引号括起来。,字符常量占一个字节的内存空间;字符串常量占的内存字节数等于字符串中的字符数加1,增加的一个字节存放字符串结束标志,0,(ASCII码为0)。例如,,101,、,a,是字符常量,在内存中只占一个字节;而,“,I like C program.,”,,,“,a,”,是字符串常量,前者占十八个字节的存储空间,后者占两个字节的存储空间。而,“”,(两个连续的双引号)称为空串,但要占用一个字节的存储空间来存放,0,。,2.2 常量与变量,二,、变量,在计算机内部,数据是以二进制的形式存储和运算的。数据的最小单位是二进制的1位(bit,简称b),每8个存储位组成一个字节(Byte,简称B),为了区分内存中的各单元,需要对其进行编号,编号是以字节为单位进行。,变量是指在程序的运行过程中其值可以改变的量。变量实质上代表内存中的某段存储空间。在程序中,变量用变量名标识,每个变量具有特定的数据类型,计算机按照一定的规则为变量分配存储空间,变量的值存储在变量所在的存储空间中。,2.2 常量与变量,二,、变量,1整型变量,整型变量分为基本型、短整型和长整型三种,分别用int、short int和long int作为类型说明符,不同类型的整型变量在内存中占用的存储空间的长度不同。,按存储时最高位的性质,整型变量又分为有符号整型变量和无符号整型变量两类,分别用signed和unsigned说明。有符号整数存储时,其存储空间的最高位为符号位,其他位为数值位;无符号整数存储时所有位都表示数值。整数在内存中以补码的形式存储,一个正数的补码是其本身。,不同类型的整型变量所占用的字节数和取值范围如下所示。,2.2 常量与变量,二,、变量,2实型变量,按照存储数据的精度,实型变量可分为单精度(float)、双精度(double)两种。,在内存中单精度型数据占4个字节(32位)的存储空间,其数值范围约在-1.0E381.0E38之间,只能提供七位有效数字,绝对值小于1.0E-38的数被处理成零值。双精度型数据占8个字节(64位)的内存空间,其数值范围约在-1.0E3081.0E308之间,可提供1516位有效数字,绝对值小于1.0E-308的数被处理成零值。,C编译系统将实型常量作为双精度来处理。可以在实数的后面加字母f或F(如0.65f,64.89F),来表示单精度实数。,2.2 常量与变量,二,、变量,3字符变量,字符型变量用来存放一个字符常量,用关键字char定义。,字符型数据在内存中占1个字节(即8位二进制位)的存储空间,其取值范围为-27+27-1,即十进制的-128+127。字符型数据也分为有符号型和无符号型。对于无符号字符型数据,相应的取值范围为0255。,2.2 常量与变量,三、,变量的定义、初始化与赋值,1变量的定义,变量用来存储数据,每个变量必须属于某种数据类型。因此,C语言中的每个变量在使用之前必须首先进行变量定义,为变量指定数据类型和变量名。,变量定义的一般格式为:,数据类型 变量名表;,当,“,变量名表,”,有多个变量时,各变量之间用,“,”,分割。例如:,int m,n;/*定义m、n为整型变量*/,char ch1;/*定义ch1为字符型变量*/,float x,y;/*定义x、y为单精度实型变量*/,2.2 常量与变量,三、,变量的定义、初始化与赋值,2变量的初始化,在定义变量的同时为变量赋一个初值,称为变量的初始化。,变量初始化的格式为:,数据类型 变量名1=初值1,变量名2=初值2,;,例如:,int m=1;/*定义m为整型变量,初值为1*/,也可以只为被定义变量的一部分赋初值,如:,int m,n=2;/*定义m、n为整型变量,只对n初始化,初值为2*/,如果对几个变量赋以相同的值,只能一个一个赋值,不能连赋。如:,int m=2,n=2;/*定义m、n为整型变量,都初始化为2*/,不能写为:,int m=n=2;/*错误的变量初始化形式*/,2.2 常量与变量,三、,变量的定义、初始化与赋值,3变量的赋值,变量的赋值是指把一个数据保存到系统给变量分配的存储单元中。在定义变量时,系统根据变量类型为其分配了相应的存储空间,如果变量在定义时没有初始化,其值可能是一个无法预料、没有意义的值。C语言中的赋值操作由赋值运算符,“,=,”,来完成,一般形式为:,变量=表达式;,说明:,“,=,”,在C语言中是赋值符号,不是等号,C语言中的等号用双等号,“,=,”,表示。,程序中可多次给同一个变量赋值。多次赋值后,变量中存放的是最后一次所赋的值。,赋值运算符的左侧只能是变量名,不能是常量或表达式。,赋值运算是把,“,=,”,号右边表达式的值赋给,“,=,”,号左边的变量,因此,象m=m+1这样的在数学中认为是不成立的表达式,在C语言中却是认可的,它表示将m原来的值加上1之后再赋给m。,允许辗转赋值。即允许一个表达式中包含多个,“,=,”,号。例如:,int m,n,k;m=n=k=1;,2.3 运算符与表达式,记述各种不同运算的符号,称为运算符。而参与运算的数据称操作数或运算量。C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、强制类型转换运算符等。,在学习运算符时应注意:,运算的优先级。如果一个操作数的两侧有不同的运算符,应先执行优先级别高的运算。,结合性。如果在一个操作数的两侧有两个相同优先级别的运算符,则按运算符的结合性所规定的结合方向处理。运算符的结合性分为两种,自左向右的结合,称为左结合;而自右向左结合的,称为右结合。,要求操作数的个数。,要求操作数的类型。,结果的类型。,表达式是用运算符将操作数连接起来的式子,操作数可以是常量、变量和函数。表达式均有值,表达式的值是指表达式中的操作数按照一定的运算规则和顺序,在各种运算符的作用下,得到的运算结果。,2.3 运算符与表达式,一、算术运算符与算术表达式,1算术运算符,C语言提供了5个双目算术运算:*、/、%、+、-,它们在进行运算时需要两个操作数,所以称双目运算符。其功能如下:,+:加法运算符。如:4+1。,-:减法运算符。如:6-9。,*:乘法运算符。如:4*9。,/:除法运算符。如:7/3。,%:模运算符,也称求余运算符。运算时要求%的两侧必须为整型数据,其左侧的运算数为被除数,右侧的运算数为除数,运算结果是两数相除后的余数,如23%15的结果为8。根据求余运算符%的取余特性,可以对整型量作一些特殊的处理。,判断数据的奇偶性,定义了整型变量a,根据表达式a%2的值,即可判断出a的奇偶性。当a%2的值为0,说明a为偶数,否则,a为奇数。,拆分整数的各位数字,若已定义a为整型变量,则表达式a%10可得到a的个位数,表达式a/10%10可得到a的十位数,而表达式a/100%10可得到a的百位数。,2.3 运算符与表达式,一、算术运算符与算术表达式,2算术表达式,用算术运算符和括号将操作数(如常量、变量、函数等)连接起来的、符合C语法规则的式子,称为算术表达式。如:,(b*a)c,100%8-(a+b)7,sin(x)+sin(y),其中,sin()是C语言提供的标准函数,用于完成数学上的正弦运算。,3算术运算符的优先级和结合性,算术运算符和圆括号的优先级高低次序如下:,2.3 运算符与表达式,二、关系运算符与关系表达式,1关系运算符,关系运算实际上是对两个操作数的大小进行比较,以判断比较的结果是否符合指定的条件。这不同于数学上的不等式,例如,数学上,“,ab,”,表示a比b大,而在C语言中表示比较a和b的大小。,C语言提供了6种关系运算符:(大于),=(大于或等于),=,”,不能写成,“,=,”,。,2优先级与结合性,关系运算符都是双目运算符,且都是左结合的。在六个关系运算符中,前四种(,=,c+d等价于(a+b)(c+d)。,2.3 运算符与表达式,二、关系运算符与关系表达式,3关系表达式及关系表达式的值,用关系运算符将两个表达式连接起来的式子称为关系表达式。关系运算符两边的表达式可以是C语言中的任意合法表达式。例如,下面的关系表达式都是合法的:,a+bc+d,x3*2,a=b,65=A,关系表达式的值只有两种:真或假。如果关系表达式成立,即为,“,真,”,,在C语言中用1表示;关系表达式不成立,即为,“,假,”,,在C语言中用0表示。,例如,若有定义:,int x=2,y=3;,则表达式xy的值为0,表达式x=y的值为1。,2.3 运算符与表达式,三、逻辑运算符与逻辑表达式,1逻辑运算符及其优先级,C语言提供了三种逻辑运算符:&(逻辑与),|(逻辑或),!(逻辑非)。,其中,&和|是双目运算符,具有左结合性;!是单目运算符,具有右结合性。它们的优先级也不一样,!最高,&次之,|最低。,逻辑运算符的功能如下:,a&b:只有当a、b都为真时,结果为真,否则为假。,a|b:只有当a、b都为假时,结果为假,否则为真。,!a:a为真,结果为假;a为假,结果为真。,在进行判断时,把,“,非零,”,作为,“,真,”,,把0作为,“,假,”,。,2.3 运算符与表达式,四、位运算符,C语言具有汇编语言的一些功能,其中就包括了位运算。位运算是指对二进制位进行的运算。位运算的对象只能是整型或字符型数据,而不能是其他类型的数据。C语言提供了6种位运算符,如下所示。,2.3 运算符与表达式,四、位运算符,1按位取反运算符,其功能是对操作数的各二进制位取反,即1变0,0变1。例如:,2按位与运算符,对参加运算的两个操作数,按二进制位逐位进行与运算。如果两个相应的二进制位都为1,则该位的结果为1,否则为0。例如:,分析以上的运行结果可知,任何位上的二进制数,只要和0,“,与,”,,该位即被清零;和1,“,与,”,,该位保持不变,因此,按位与运算经常用于取一个数的某些位。,2.3 运算符与表达式,四、位运算符,3按位或运算符,对参加运算的两个操作数,按二进制位逐位进行或运算。如果两个相应的二进制位都为0,则该位的结果为0,否则为1。例如:,任何位上的二进制数,只要和1,“,或,”,,该位即被置1;和0,“,或,”,,该位保持不变,因此,按位或运算经常用于将一个数的某些位置。,4按位异或运算符,对参加运算的两个操作数,按二进制位逐位进行异或运算。如果两个相应的二进制位不一样,则该位的结果为1,否则为0。例如:,由运行结果可知,原为1的位和1,“,异或,”,结果为0;原为0的位和1,“,异或,”,结果为1;而和0,“,异或,”,的位均保持不变。因此,按位异或运算经常用于将一个数的某些位翻转。,2.3 运算符与表达式,四、位运算符,5左移运算符,把,“,”,左边操作数的各二进制位向左移动若干位,移动的位数由,“,”,右边的数指定,从左边移出的高位部分被丢弃,右边空出的低位部分补0。例如:,char a=6;,变量a的二进制表示为:00000110,表达式a,”,左边操作数的各二进制位向右移动若干位,移动的位数由,“,”,右边的数指定,从右边移出的低位部分被丢弃,左边空出的高位部分补0。例如:,char a=0 x18;,变量a的二进制表示为:00011000,表达式a3用于将a的值右移3位,左边空出的3位补0,其结果用二进制表示为:00000011。,2.3 运算符与表达式,五、赋值运算符与赋值表达式,赋值运算符分为两类,一类是简单的赋值运算符,“,=,”,;另一类是复合的赋值运算符,是在赋值运算符,“,=,”,之前加上+、-、*、/、%、&、|、构成的,其优先级与赋值运算符,“,=,”,相同。,构成复合赋值表达式的一般形式为:,变量op=表达式(op为运算符+、-、*、/、%、&、|、),它等价于:,变量=变量 op(表达式),例如:,a+=5 等价于a=a+5,m*=n+5 等价于m=m*(n+5),复合的赋值运算符只是一种简化了的书写方式,其结合性和赋值运算符,“,=,”,一样,都是右结合的。例如,表达式c=b*=a+3;,相当于b=b*(a+3);c=b;两个表达式。,2.3 运算符与表达式,六、逗号运算符与逗号表达式,在C语言中,逗号还可以作为运算符。用逗号将表达式连接起来的式子,称为逗号表达式。逗号运算符的结合性为左结合,它的优先级是所有运算符中最低的。,逗号表达式的一般形式为:,表达式1,表达式2,表达式n,求值过程:先求表达式1的值,再求表达式2的值,,,最后求表达式n的值,表达式n的值就是整个逗号表达式的值。,七、条件运算符与条件表达式,条件运算符由?和:组成,它是一个三目运算符,即有三个参与运算的操作数,它是一种在两个表达式的值中选择一个的操作。,由条件运算符组成的条件表达式的一般形式为:,表达式1?表达式2:表达式3,其求值规则为:如果表达式1的值为真,则表达式2的值就是整个条件表达式的值;否则表达式3的值就是整个条件表达式的值。,2.3 运算符与表达式,八、自增自减运算符,+和-是C语言提供的两个特殊的运算符,分别称为自增运算符和自减运算符,其功能是对变量进行加1或减1运算。,自增自减运算符均为单目运算符,都具有右结合性,有以下几种形式:,+i、i+、-i和i-。,其中,+i和-i称为前缀形式,i+和i-称为后缀形式,它们在使用时是有区别的,后缀形式(i+和i-)表示i先参与运算后再增(减)值,前缀形式(+i和-i)为i先增(减)值后再参与运算。,例如:int x=5,y;,执行y=x+;后,x的值为6,y的值为5(等价于y=x;x+;)。,而int x=5,y;,执行y=+x;后,x的值为6,y的值为6(等价于x+;y=x;)。,使用自增自减运算符时,应注意自增自减运算的运算对象只能是变量,而不能用于常量或表达式。如5+或(x+y)+都是错误的。,九、长度运算符,C语言还提供了一个测定某一种类型数据所占存储空间长度的运算符sizeof,其格式为:,sizeof(数据类型或表达式),返回,2.4不同类型数据间的转换,C语言允许在一个表达式中出现多种数据类型,在进行运算时,不同类型的数据首先要进行类型转换,然后再进行运算。,在C语言中,共有两种类型的转换:第一种是自动类型转换,即在运算时不必由用户指定,系统自动进行的类型转换;第二种是强制类型转换,即使用强制类型转换符来实现的类型转换。,1自动转换,自动转换的基本原则是:为了得到较高精度的运算结果,精度低、表示范围小的操作数类型向精度高、表示范围大的操作数类型转换。转换规则如下所示。,2.4不同类型数据间的转换,2强制类型转换,C语言提供了一种,“,强制类型转换,”,运算符,用它可以强迫表达式的值转换为某一特定的类型。一般形式为:,(数据类型)(表达式),其中的表达式应该用括号括起来,若是单个变量,则可以省略括号。,例如,如果已经声明x为double型数据,则x%3是不合法的(求余运算符%的两侧必须为整型数据),可以使用如下形式:(int)x%3,将x的值强制转换成int型后再参加运算。,返回,第3章,顺序结构程序设计,C语言的基本语句,格式输入输出函数,字符输入输出函数,顺序结构程序设计举例,3.1 C语言的基本语句,一个完整的语言程序由一个main()函数(主函数)和其他若干函数组成。而函数由函数头与函数体组成,函数体包括变量定义与执行语句。其中的执行语句部分由若干C语句组成,每个C语句完成一定的操作任务,以分号结束。,C语言中的语句可以分为以下5类:,空语句,函数调用语句,表达式语句,复合语句,流程控制语句,3.1 C语言的基本语句,1空语句,只有分号,“,;,”,组成的语句称为空语句。空语句是什么也不执行的语句,一般用于语法结构上要求有一条语句但实际没有任何操作的场合。例如:,while(getchar()!=#),;,这里的循环体为空语句。,2函数调用语句,由函数调用表达式加一个分号构成函数调用语句。其一般形式为:,函数名(实际参数表);,例如:,printf(,“,This is a C statement.,”,);,scanf(%d,3.1 C语言的基本语句,3表达式语句,表达式语句是在表达式最后加上一个分号,“,;,”,组成。一个表达式语句必须在最后出现分号,分号是表达式语句不可缺少的部分。C程序中大多数语句是表达式语句。,表达式语句的一般形式为:,表达式;,例如:,a=3,y=4;,x=a+b;,i+;,3.1 C语言的基本语句,4复合语句,把多条连续的语句用一对花括号括起来组成的语句,称为复合语句。复合语句的一般格式为:,数据说明部分;,执行语句部分;,例如:,int a;,a=3,y=4;,x=a+b;,i+;,在程序中应把复合语句看成是单条语句,而不是多条语句。,3.1 C语言的基本语句,5流程控制语句,流程控制语句用于控制程序的流程,以实现程序的各种结构方式,它们由特定的语句定义符组成。,语言有九种控制语句:,if语句,switch语句,while语句,do while语句,for语句;,break语句,continue语句,goto语句,return语句,返回,3.2 格式输入输出函数,利用计算机解决问题的一般步骤为:,先分析问题,再编写程序,最后运行和调试程序直至得到正确的结果。,为了让计算机处理各种数据,首先把源数据输入到计算机中,计算机处理结束后,用户要想看到结果,必须将目标数据输出到屏幕上,或用打印机打印出来。同时,在程序执行时,也有可能需要用户输入计算时所需的数据,以便得到不同的目标结果。,因此,借助于输入和输出,用户就可以和计算机进行信息的交流。C语言没有提供专门的输入/输出语句,数据的输入/输出是由函数实现的。,在C语言的标准函数库中提供了多种输入输出函数,使输入/输出灵活、方便。C语言的标准函数库中的输入输出函数,有一些公用的信息写在头文件stdio.h中,在使用C语言标准函数库中的输入输出函数时,一般应在程序的开头加上编译预处理命令:,#include 或#include,“,stdio.h,”,3.2 格式输入输出函数,一、格式输出函数printf(),1printf()函数的一般格式,printf()函数是格式输出函数,其功能是按照用户指定的格式,在标准输出设备(显示器)上输出数据。其一般格式如下:,printf(格式控制字符串,输出数据列表);,例如:,printf(%d,%c,m,ch);,“,格式控制字符串,”,由两种成分组成:格式说明项和普通字符。,printf()函数执行后的输出结果完全由,“,格式控制字符串,”,控制,输出时从,“,格式控制字符串,”,的第一个字符开始,若为普通字符(包括转义字符),则被简单的输出,当遇到格式说明项,就到,“,输出数据列表,”,中找到对应的数据项并计算出该数据项的值,然后按照格式说明项规定的格式,将计算结果输出在该格式说明项的位置上。,例如:,int a=3,b=5;,printf(a+b=%dn,a+b);,“格式控制字符串”用于控制输出数据的基本格式,“输出数据列表”给出将要输出的数据项,可以是常量、变量和表达式,输出项之间用逗号分隔,普通字符(包括转义字符)将被简单的复制与显示。,一个格式说明项将引起一个输出数据项的转换与显示,它由“%”和格式字符组成,中间还可插入一些可选的附加格式说明字符,其完整的格式为:,%-0m.nh|l 格式字符,其中,方括号中的项为可选项。,该printf()语句的输出结果为:a+b=8,3.2 格式输入输出函数,一、格式输出函数printf(),2printf()函数的输出格式控制,printf()函数强大的输出功能主要是通过灵活使用,“,格式控制字符串,”,来体现的,在其格式说明项中,不同类型的数据,要使用不同的格式字符。,3.2 格式输入输出函
展开阅读全文