收藏 分享(赏)

第2章 C语言程序基础知识.ppt

上传人:hwpkd79526 文档编号:8159703 上传时间:2019-06-11 格式:PPT 页数:93 大小:1.12MB
下载 相关 举报
第2章 C语言程序基础知识.ppt_第1页
第1页 / 共93页
第2章 C语言程序基础知识.ppt_第2页
第2页 / 共93页
第2章 C语言程序基础知识.ppt_第3页
第3页 / 共93页
第2章 C语言程序基础知识.ppt_第4页
第4页 / 共93页
第2章 C语言程序基础知识.ppt_第5页
第5页 / 共93页
点击查看更多>>
资源描述

1、第二章 C语言程序设计的基础知识,第二章 C语言程序设计的基础知识,本章教学目标: 掌握C语言程序设计的基础知识 熟悉C语言程序编写的基本框架,并能用C语言编写简单的程序 本章重点内容: C语言的字符集、标示符 C语言的组成和基本结构 C语言的数据类型 C语言的常量和变量 C语言的运算符和表达式,2.1 C语言的字符集和标识符,2.2.1 字符集字符是组成语言的最基本的元素。C语言字符集由字母、数字、空格、标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。 字母:小写字母az共26个,大写字母AZ共26个。 数字:09共10个数字。 空白符空格符、制表符(

2、Tab键)、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略不计。 标点和特殊字符比如:加号()、减号()、分号()、逗号()等。,2.1 C语言的字符集和标识符,2.2.2 标识符标识符是给程序中的某个对象所起的名字,这些对象可以是数据类型、变量、常量、函数、数组结构体和文件等。C语言规定:一个标识符由字母、数字和下划线组成,第一个字符必须是字母或下划线。通常以下划线开头的标识符是编译系统专用的,所以在编写C语言程序时,最好不要使用以下划线开头的标识符。,2.1 C语言的字符集和标识符,例2-1:合法标示符和非法标示符。 以下能

3、用作用户标识符的是: WORD as_b3 _224N Else int_2_ Li_ming _main If 22A lea_1 avg3 Xyw8 day 以下不能用作用户标识符的是: sizeof -wer x-i-a-o 2_int_ printf $_238 M.J.YORK #xy a*b 8Tea,2.2 C语言程序的基本结构和书写规则,2.2.1 C语言程序的基本结构一个完整的C语言程序结构有以下两种表现形式:仅由一个main( )函数(又称主函数)构成。由一个且只能有一个main( )函数和若干个其他函数结合而成。其中,自定义函数由用户自己设计。,2.2 C语言程序的基本

4、结构和书写规则,例2-2:仅由main( )函数构成的语言程序。 #include void main( ) printf(“This is a C programn”); ,2.2 C语言程序的基本结构和书写规则,例2-3:由main( )函数和子函数max( )构成的语言程序。 #include int max(int x, int y) return(xy? x:y); void main( ) int num1,num2; printf(“Input the first integer number: ”); /* 输入提示语句 */ scanf(“%d”, / 输出函数max的返回值

5、 ,2.2 C语言程序的基本结构和书写规则,C语言程序结构有以下基本特点: 函数(如:main函数和max函数)是语言程序的基本单位,每一个函数完成相对独立的功能。C源程序是由一个主函数和若干个其它函数组成的。main( )函数的作用,相当于其它高级语言中的主程序;其它函数的作用,相当于子程序。 C程序中包含预处理命令,预处理命令通常放在程序最开始的位置。 main是函数名,函数名后面的一对圆括号“( )”是用来写函数的参数的。参数可以有,也可以没有,但圆括号不能省略。“ ”括起来的部分是函数体,包含了实现函数功能的语句。 一个C语言程序总是从main( )函数开始执行,在main( )函数中

6、结束。主函数执行完毕,程序执行结束。,2.2 C语言程序的基本结构和书写规则,C语言程序结构有以下基本特点: 主函数main( )既可以放在max( )函数之前,也可以放在max( )函数之后。习惯上,将主函数main( )放在最前面。 一个说明或一个语句占一行。 允许使用注释,可以在程序的任何位置加注释,注释可以是中文。注释不属于C语言语句,不会影响C程序的执行结果。 C语言的注释格式为: /* */ 或者 /,2.2 C语言程序的基本结构和书写规则,2.2.2 源程序书写格式为了便于阅读和维护程序,更好的体现程序的层次结构,C语言的书写应遵循以下规则: C语言编译系统区分字母大小写,大小写

7、字母被视为两个不同的字符。C程序必须用小写字母书写。 所有语句都必须以分号“;”结束,函数的最后一条语句也不例外。 程序行的书写格式自由,既允许1行内写几条语句,也允许1条语句分写在几行上。比如【例2-3】的主函数main( ),也可改写成如下所示的格式:void main( ) int num1,num2;printf(“Input the first integer number: ”); scanf(“%d”, ,2.2 C语言程序的基本结构和书写规则,2.2.2 源程序书写格式为了便于阅读和维护程序,更好的体现程序的层次结构,C语言的书写应遵循以下规则: 用 括起来的部分,通常表示了程

8、序的某一层次结构。 一般与该结构语句的第一个字母对齐,并单独占一行。 低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。 书写C语言的注释时应注意:“/*”和“*/”必须成对使用,且“/”和“*”、以及“*”和“/”之间不能有空格,否则都出错;注释的位置,可以单占1行,也可以跟在语句的后面;如果1行写不下,可另起1行继续写。,2.3 数据类型,C语言的数据类型非常丰富,所谓数据类型是按被说明量的性质、表示形式、占据存储空间的多少、构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。本章主要介绍基本数

9、据类型。,2.3 数据类型,C语言的数据类型,2.3 数据类型,2.3.1整型数据整型(INTEGER)数据是不包含小数部分的数值型数据,只用来表示整数,以二进制形式存储。不同的编译器,整型数据所占的字节数是不一样。ANSI标准定义int是占2个字节,TC是按ANSI标准的,int是占2个字节的。但是在VC里,int占4个字节。根据整数的最高位是否作为符号位,可将整数分为有符号(signed)整型和无符号(unsigned)整型。根据整数在计算机内存中所占用的空间大小,可分为短整型(short int或short)、基本整型(int)和长整型(long int或long)。,2.3 数据类型,

10、2.3.1整型数据,2.3 数据类型,2.3.1整型数据 例2-4:整型数据的类型说明符。 short x = 10; 等价于 signed short x = 10; 同时等价于 signed short int x = 10; int age = 20; 等价于 signed int age = 20; long z = 10000L; (加L后说明10000是一个长整型常量,而不是一个基本整型常量),2.3 数据类型,2.3.2实数类型实型数据表示的是我们生活中带小数的数值。在C语言中,实型数据分为单精度和双精度两种,单精度用float表示,双精度用double表示 。,2.3 数据类型

11、,2.3.2实数类型在一般情况下,float型的数据在内存中占4个字节的存储空间,double型的数据在内存中占8个字节的存储空间。对于程序中的实型数据来说,float型的数据提供7位有效数字,double型的数据提供1516位的有效数字。一个实型常量赋值给一个实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据。,2.3 数据类型,例2-5:分析下列程序的运行结果。 #include void main( ) float a,b,sum; a=4; b=5; sum=a+b; printf(“%fn“,sum); ,例2-6:float型数据和double型数

12、据的不同。 #include void main() float x=5.55555555;double y=5.555555555555;printf(“x=%f n“,x);printf(“y=%lfn“,y);,2.3 数据类型,2.3.3字符型数据字符型数据是不具计算能力的文字数据类型,它包括中文字符、英文字符、数字字符和其他ASC字符,其长度(即字符个数)范围是0-254个字符。字符型数据类型的标示符为char,字符型数据在内存中占1个字节。,2.4 常量和变量,在C程序中不同类型的数据可以以常量形式出现,也可以变量形式出现。 常量是指在程序执行期间值不能发生变化、具有固定值的量。

13、变量则是在程序执行期间其值可以发生变化的量,当定义一个变量,编辑系统就会为其分配一块内存空间,用来存储可变的数据内容。当程序需要存取某个内存内容时,就可以通过变量名将数据由内存中取出或写入。,2.4 常量和变量,2.4.1常量 1、整型常量C语言整型常量一般有十进制、八进制和十六进制三种表达形式:(1) 十进制整数的表示和数学上的表示相同,由数字09组成。如:0、10、365、-12等。(2) 八进制整数的表示以0开头,由数字07组成。如:010、0365、-012、011等。(3) 十六进制整数的表示以0x或0X开头,由数字09、az或AZ组成。如:0x11、0Xffff、0xa5、-0XA

14、C等。,2.4 常量和变量,C语言规定,凡是在整型数后加小写字母l或大写字母L作为长整数处理;凡是在整型数后加后缀“U”或者“u”,表示该数为无符号整型。,2.4 常量和变量,2、实型常量在C语言中,实型常量只能用十进制形式表示,不能用八进制数和十六进制数表示。实型常量的两种表现形式:小数形式和指数形式,或者叫做小数点式和字母E(或e)式。 (1) 小数点式: 有且仅有一个小数点 小数点的左边和右边可以有一边没有数据,但不能同时没有数据 合法的表示形式:3.14、0.1、10.、0.0、.0、-10.08 不合法的表示形式:3、3.5 6、1*345,2.4 常量和变量,2、实型常量(2) 字

15、母E(或e)式:分为小数部分和指数部分分别存放。指数形式表示实数时必须有尾数部分和指数部分有且仅有一个字母E(或e)尾数部分既可以用小数表示也可以用整数表示指数部分只能是整数而不能是实数,2.4 常量和变量,合法的表示形式: 1e5、1.2E+4、3.0e-2、.12e6 、23e5 不合法的表示形式: e3、12.-e 、2.5e可以使用后缀F或f表示单精度(float)类型,使用后缀L或l表示长双精度(long double)类型。默认状态下,实型常量被识别为双精度(double)类型。比如123.56是double类型,123.56f是float类型,123.56L是long doubl

16、e类型。,2.4 常量和变量,3、字符型常量用一对单引号( )括起来的一个字符是字符型常量。值得注意的是,一对单引号只是字符与其它部分的分隔符,或者说是字符常量的定界符,不是字符常量的一部分,当输出一个字符常量时不输出此单引号。例如:a,A,#等是字符型常量,而ABC不是字符型常量。字符型常量的两种表现形式:(1) 由一对单引号括起来的单个字符:例如:A、#x、$使用字符常量时要注意数字字符和数字的区别。例如,5表示字符5,而不是数值5,字符5的ASCII码值是53。,2.4 常量和变量,3、字符型常量(2)转义字符:转义字符是一种特殊的字符常量,由一对单引号括起来,以反斜杠“”开头,后面跟若

17、干字符。反斜杠之后的字符被转换为另外的含义,不同于字符原有的意义,故称为“转义字符”。转义字符通常用来表示C语言中的一些特殊的字符(例如控制字符)。,2.4 常量和变量,2.4 常量和变量,4、字符串常量 用一对双引号(“ ”)括起来的零个或多个字符序列称为字符串常量。字符串常量以双引号为定界符,但双引号并不属于字符串。例如,“Hello”是字符串常量,但AB既不是字符常量也不是字符串常量。 字符串常量在机器中存储时,系统会自动在字符串的末尾添加一个转义字符0作为字符串的结束标志。,2.4 常量和变量,如图2-7所示,字符串常量“Hello”在内存中实际占有6个字节大小的存储空间,而不是5个字

18、节大小的存储空间,因为0需要占一个字节大小的存储空间。 如图2-8所示,a和“a”的区别。,2.4 常量和变量,5、符号常量在语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义。其一般形式为:#define 标识符 常量其中,#define也是一条预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值。符号常量一经定义,凡是在程序中出现该标识符的地方均以该常量值代替。 符号常量的使用方法: #define不是C语句,该行的末尾没有分号,它是一个“预编译命令”,预处理命令都以“#“开头。 符号常量的标识符习惯上用大写字母表示,变量标识符用小写字母表示,

19、以示区别。 不要把符号常量与变量混淆, 符号常量只是一个符号,不占存储空间,它的值在其作用域内不能被改变,也不能再被赋值。符号常量只是简单地进行字符置换,不论置换的字符是否有含义都要进行置换。 使用符号常量的好处是:含义清楚、能做到“一改全改”。,2.4 常量和变量,例2-7:符号常量的使用。 #define PI 3.1415926 #define R 3.0 #include void main( ) float c,s; c=2*PI*R; s=PI*R*R; printf(“circumference=%fn”,c); printf(“area=%fn,s);,分析:命令行#defin

20、e PI 3.1415926的作用是在预编译时将程序中凡出现PI的地方全部用3.1415926代替。符号常量的优点是使程序容易理解,可读性好且容易维护。,2.4 常量和变量,例2-7:符号常量的使用。 #define PI 3.1415926 #define R 3.0 #include void main( ) float c,s; c=2*PI*R; s=PI*R*R; printf(“circumference=%fn”,c); printf(“area=%fn,s);,分析:命令行#define PI 3.1415926的作用是在预编译时将程序中凡出现PI的地方全部用3.1415926

21、代替。符号常量的优点是使程序容易理解,可读性好且容易维护。,2.4 常量和变量,2.4.2变量 1、变量的概念其值可以改变的量称为变量。一个变量应该有一个名字,这个名字称为变量名。变量在内存中占据一定的存储空间,这个存储空间的首地址称为变量的地址。这个存储空间中存储的数据,称为该变量的值。变量名、变量值和变量地址之间的关系如图所示。,2.4 常量和变量,2、变量声明变量的声明又称变量的定义。在程序中,变量必须先声明后使用,否则程序编译时会出现错误信息。变量声明的主要作用就是为变量在内存中分配存储空间,至于为变量分配哪个地址的存储空间通常由编译器来分配,用户不需要关心。,2.4 常量和变量,2、

22、变量声明C语言的变量声明主要是说明变量的名称及属于哪一种数据类型。变量声明的语法格式为:类型标识符 变量名1,变量名2,变量名3,; 在引用变量之前先声明变量的类型,系统在编译时就会根据指定的类型分配给该变量一定的存储空间,并决定数据的存储方式和允许操作的方式。 变量名由用户自己命名,但必须是C语言合法的标示符,即:必须由字母、数字和下划线组成,并且第一个字母不能为数字。,2.4 常量和变量,例2-8:变量的声明 #include void main( ) char ch1,ch2,ch3; /定义了三个字符型的变量,名称为ch1,ch2,ch3 float x,y; /定义了两个单精度型变量

23、,名称为x,y int student; /定义了一个整型变量,名称为student stadent=19; 程序运行后会出现“Undefined symbol statent in function main”的错误提示,这是因为student被误写stadent,系统认为student没有被定义。,2.4 常量和变量,3、变量的初始化C语言允许在声明变量时给该变量赋一个初值,这种给变量设置初值的工作称为初始化。如果没有给变量进行初始化,并不意味着该变量中没有数值,而只表明该变量中尚未定义特定的值。可以用两种方式对变量进行初始化: (1)在定义变量的同时给变量一个初始值; (2)先定义变量,

24、再使用赋值号“=” 赋初值。,2.4 常量和变量,例2-9:定义变量时初始化。 #include void main( ) int a=5, b=3,c; float x1=6.5, x2, x3=5.9; char ch=a, k=A; int x=1,y=1,z=1; ,2.4 常量和变量,例2-10:使用赋值号赋初值。 #include void main( ) int a,b,c;a=5; /使用赋值语句赋初值b=3; /注意赋值符号和等于号不同 ,2.4 常量和变量,对变量进行初始化时,需要注意的是: 定义变量时不能连续赋初值。 例如:int x=1,y=1,z=1; 不能写成int

25、 x=y=z=1; 在同一程序块中,变量不能被重复定义。 例如: #include void main( ) int x,y,z;float a,b,x; /变量x被重复定义了两次 ,2.4 常量和变量,4、变量的分类如果把变量与数据类型结合起来分类,变量可分为整型变量、浮点变量、字符变量。 (1)整型变量系统根据声明变量时所指定的数据类型为变量分配存储空间,使用整型变量时要注意不能超过变量的取值范围。,2.4 常量和变量,例2-11:整型数据的溢出。 #include void main() short x=32767,y;y=x+1;printf(“x=%d,y=%dn“,x,y);,2.

26、4 常量和变量,(2)实型变量实型变量分为个单精度型和双精度型变量,两者之间的区别在于后者的有效位数比前者的多、精度更高。对于一个无穷的小数,由于存储空间有限,计算机无法表示出小数点后面所有的值,只能表示实际值的近似值。因此,使用实型变量时,可能会有误差。实型变量的有效位数越多,与实际值就会越接近,精度就越高。,2.4 常量和变量,例2-12:对比float型数据和double型数据。 #include void main() float x=5555.55555;double y=5555.555555555555;printf(“x=%f n“,x);printf(“y=%lfn“,y);

27、,2.4 常量和变量,例2-13:float型的数据有效位数 #include void main() float x; x=7.1234567890; printf(“%20.18fn“,x); ,2.4 常量和变量,例2-14:实型数据的舍入误差。 #include void main( ) float a=123456789.0,b;b=a+1;printf(“a=%fn“,a);printf(“b=%fn“,b);,2.4 常量和变量,(3)字符型变量字符型变量用来存放字符常量,一个字符变量在内存中占一个字节,所以只能放一个字符。C语言中没有字符串变量,通常用字符数组来存放字符串,字符

28、数组将在后面章节为大家介绍。将一个字符常量放到一个字符变量中,实际上不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。因此,字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。例如:char a = A; 与 char a = 65; 是等价的。因为字符A在计算机中的形式是整型65。,2.4 常量和变量,例2-15:大写字母转换为小写字母。 #include void main() char a,b;a=X;b=Y;a=a+32;b=b+32;printf(“%c,%cn“,a,b);,2.5 运算符和表达式,1、运算符运

29、算符在C语言中主要用于执行程序代码的运算。例如:2+3,其操作数是2和3,而运算符则是“”。C语言运算符非常丰富,大致可以分为13种类型: (1)算术运算符: * / % + (2)关系运算符: = != (3)逻辑运算符: ! & | (4)位运算符: | & (5)赋值运算符: = 及其扩展,2.5 运算符和表达式,(6)条件运算符: ?: (7)逗号运算符: , (8)指针运算符: * & (9)求字节数: sizeof (10)强制类型转换: (类型) (11)分量运算符: - (12)下标运算符: (13)其它: 函数调用运算符( ),2.5 运算符和表达式,2、表达式用运算符和括号

30、将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。,2.5 运算符和表达式,2.5.1算术运算符 1、基本算术运算符:+、* 、/、% 说明: (1)为双目运算符号,要求有两个操作数。 (2)两整数相除,结果为整数,舍去小数部分。例如:9/5的值为1而不是1.8;5/2+1的值为3而不是3.5 (3)%要求两侧均为整型数据。例如:7%3的值为1 (4)字符型数据可以和数值型数据混合运算例如:A+32的值为a,2.5 运算符和表达式,2、算

31、术表达式: (1)定义:用算术运算符和括号将操作数(包括常量、变量和函数)连接起来的式子。例如:a*b+c/d 2*a+*PI*r*r c*sin(x)+d*cos(x) (2)优先级:( ) (*、/、% ) (+、) (先乘除后加减) (3)结合方向:从左至右 (4)表达式的值:数值型(int、long、unsigned、double),2.5 运算符和表达式,例2-16:已知 float a=2.0;int b=6,c=3;求解a*b/c-1.5+a+fabs(-5)=?,2.5 运算符和表达式,2.5.2自加和自减运算符 1、作用: 自增运算符的作用是使单个变量的值增,自减运算的作用是

32、使单个变量的值减。 i和i 等价于 i=i1 i和i 等价于 i=i1 2、用法与运算规则 自增、自减运算符都有两种用法: (1)前置运算(运算符放在变量之前):变量、变量 (2)后置运算(运算符放在变量之后):变量、变量 两者之间的区别: i(i):先使变量的值增(或减),然后将变化后的值作为表达式的值,即先增减、后使用。 i():先将变量的原值作为表达式的值,然后再使变量的值增(或减),即先使用、后增减。,2.5 运算符和表达式,2.5.2自加和自减运算符 3、说明: (1)和的操作对象是变量,不能用于常量和表达式。例如5和(a-b)都是非法的。 (2)和的结合方向:自右向左。 (3)优先

33、级:(、) ( *、/、%) (、)例如:jk;等价于 (j)k;变量j是和还是结合,取决于这两个运算符的优先级,优先级高于,所以j和结合。再例如:ij 应该写成:(i)(j)。,2.5 运算符和表达式,2.5.2自加和自减运算符 例2-17:i=3,则执行j=i;语句后,i和j的值分别是多少? 例2-18:i=3,则执行j=i;语句后,i和j的值分别是多少? 例2-19:a=3;b=a;c=b;a、b、c的值各为多少?,2.5 运算符和表达式,2.5.2自加和自减运算符 例2-20:写出以下程序的执行结果。 #include void main( ) int x=1,y; y=+x*x+x;

34、 printf(“%dn”,y); ,2.5 运算符和表达式,2.5.3取负值运算符取负值运算符用来改变一个操作数的正号或负号。在一个正数前加取负值运算符,则该数变为负数;在一个负数前加取负值运算符,则该数变为正数。 说明: (1)一元运算符:x b (2)优先级: (*、/ 、% ) (+、) 例2-21: int a=8,b=6,c=5,y; y=-a-b*c+a/c;执行后,y的值是多少? 分析:对于变量a,前面是取负值运算符,后面是减号,两者相比取负值运算符的优先级高,因此变量a选择和取负值运算符结合,即表达式等价于y=(-a)-b*c+a/c。通过计算可知y的值为-47。,2.5 运

35、算符和表达式,2.5.3取负值运算符 例2-22:自增自减运算符和取符号运算符综合应用。 #include void main( ) int i=5;printf(“%dn”,+i); /输出6printf(“%dn“,-i); /输出5printf(“%dn”,i+); /输出5,但i的值为6printf(“%dn”,i-); /输出6,但i的值为5printf(“%dn“,-i+); /输出-5,但i的值为6printf(“%dn”,-i-); /输出-6,相当于-(i-)printf(“%dn“,i); /输出5 ,2.5 运算符和表达式,2.5.4赋值运算符 1、简单赋值运算符 (1)

36、符号:= (2)格式:变量标识符=表达式 (3)作用:将一个数据(常量或表达式)赋给一个变量 2、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子。赋值表达式中的“表达式”,又可以是一个赋值表达式。 说明: (1)结合方向:自右向左。 (2)优先级:低于算术运算符、关系运算符、逻辑运算符。 (3)左侧必须是变量,不能是常量或表达式。,2.5 运算符和表达式,2.5.4赋值运算符 (4)赋值表达式的值与变量值相等,且可嵌套。 例如: a=3 /将常量3赋值给变量a d=func( ) /将函数func的返回值赋值给变量d a=b=5 /遵循右结合规则,等价于a=(b=5) a=b=10

37、+c /将10+c的值赋值给b,再将b的值赋值给变量a c=3*d+2 /将算数表达式的值赋值给变量c x=6y /将关系表达式的值赋值给变量x x=x&y /将逻辑表达式的值赋值给变量x a=5+c=6 /等价于a=5+(c=6) 表达式值为11,a=11,c=6 a=b=4+c=6 /等价于a=(b=4)+(c=6) 表达式值为10,a=10,b=4,c=6 a=b=10/c=2 /等价于a=(b=10)/(c=2) 表达式值为5,a=5,b=10,c=2,2.5 运算符和表达式,2.5.4赋值运算符 3、复合赋值运算符 (1)种类:+= = *= /= %= = = &= = |= (2

38、)含义:exp1 op= exp2等价于exp1 = exp1 op exp2 例如: a+=3 等价于a=a+3 x*=y+8 等价于 x=x*(y+8),而不是x=x*y+8 x%=5 等价于 x=x%5,2.5 运算符和表达式,2.5.4赋值运算符 例2-25:a=12 ;则表达式a+=a-=a*a的值是多少? 分析计算步骤: “a-=a*a”等价于“aaa*a”,计算可得a的值为12144132。 “a132”等价于“ a=a+(-132)”,计算可得a的值为132-132-264。 因此,表达式a+=a-=a*a的值为264。,2.5 运算符和表达式,例2-26:int a=2; a

39、%=4-1; 则表达式a+=a*=a-=a*=3的值是多少? 分析计算步骤: “a%=4-1;”等价于“ a=a%3”,计算可得 a的值为2。 “a*=3”等价于“aa*3”,计算可得 a的值为6。 “a6”等价于“a=a6”,计算可得a的值为0。 “a*=0”的运算中,a的值为0。 再进行“a+=0”的运算中,a的值为0。 因此,表达式a+=a*=a-=a*=3的值为0。,2.5 运算符和表达式,2.5.5逗号运算符 说明: (1)形式:表达式1,表达式2,表达式n (2)结合性:从左向右 (3)优先级:逗号表达式的优先级是所有运算符里最低的,只要没有用括号括起来,它总是最后一个计算。 (4

40、)逗号表达式的值:逗号表达式的值等于表达式n的值,但是这不意味着只需要执行最后一个表达式n,前面所有的表达式必须按照从左到右的顺序执行一遍。在很多情况下,使用逗号表达式并非要得到整个逗号表达式的值,而只是从左到右得到各个表达式的值。 (5)用途:常用于循环for语句中。,2.5 运算符和表达式,例2-27:逗号运算符示例一。 a=3*5,a*4 /a=15,表达式值为60 a=3*5,a*4,a+5 /a=15,表达式值为20 例2-27:逗号运算符示例二。 x=(a=3,6*3) /赋值表达式,表达式值为18,x=18 x=a=3,6*a /逗号表达式,表达式值为18,x=3,2.5 运算符

41、和表达式,例2-28:写出以下程序的执行结果。 #include void main( ) int a,b,c; a=1; b=2; c=3; printf(“%d,%d,%dn”,a,b,c); printf(“%d,%d,%dn”,(a,b,c),b,c); ,2.5 运算符和表达式,例2-29:写出以下程序的执行结果。 #include void main() int a=10;a=(3*5,a+4); printf(“a=%dn”,a); ,2.5 运算符和表达式,2.5.6条件运算符条件运算符由“?”和“:”两个字符组成,用来连接3个运算对象,是C语言中唯一的三目运算符。用条件运算符

42、将运算对象连接成的式子称为条件表达式。其中运算对象可以是算术表达式、关系表达式、逻辑表达式、赋值表达式和条件表达式。 1、一般形式: ?: 2、功能:计算表达式1的值,如果为非0,则计算表达式2的值,并将其作为整个条件表达式的值;否则计算表达式3的值,并将其作为真个条件表达式的值。,2.5 运算符和表达式,2.5.6条件运算符3、说明: 优先级:高于赋值运算符和逗号运算符,而低于其他运算符。 例如:m0?1:(xb?a:cd?c:d 等价于ab?a:(cd?c:d),2.5 运算符和表达式,例2-32:输入两个数,求其中较大的数和较小的数。 #include void main( ) int

43、x,y,max,min; scanf(“%d“, ,2.5 运算符和表达式,2.5.7求字节运算符 求字节运算符(sizeof)是一个单目运算符,它的功能是返回变量或类型修饰符的字节长度。其一般形式为:sizeof(变量名)或sizeof(类型名)或sizeof(表达式) 例2-34:求字节运算符示例。 #include void main( ) int a=5; float x=3.2,y=6.4; printf(“%dn“,sizeof(a); /值为:4(在TURBO C中为2;在VC+6.0下为4) printf(“%dn“,sizeof(char); /值为:1 printf(“%d

44、n“,sizeof(x+y); /值为:4 printf(“%dn“,sizeof(double); /值为:8,2.5 运算符和表达式,2.5.8 位运算符由于C语言可直接对硬件编程,在系统软件设计中要求能对位进行运算,因此,C语言提供了6种位运算符,支持位运算等汇编操作。,2.5 运算符和表达式,1、按位取反运算符按位取反运算符为单目运算符,具有右结合性,其功能是对参与运算的数的各二进位按位求反。 例2-35:按位取反运算示例。 #include void main( ) int x=5,y;y=x;printf(“5=%dn”,y); ,2.5 运算符和表达式,2、按位与运算按位与运算符

45、&是双目运算符,其功能是参与运算的两数各对应的二进位相与。只有对应的2个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。按位与运算通常用来对某些二进制位清0或保留某些二进制位。在需要清0的位置上,将与它进行运算对象的对应的二进制位置0;需要保留原值的位置,则将对应的二进制位置1。,2.5 运算符和表达式,例2-36:按位与运算示例。 #include void main( ) int a=9,b=5,c; c=a ,2.5 运算符和表达式,3、按位或运算按位或运算符“|”是双目运算符,其功能是参与运算的两数各对应的二进位相或。只要对应的2个二进位有一个为1时,结果位就为1。

46、参与运算的两个数均以补码出现。按位或运算通常用来对某些二进制位置1或保留某些二进制位。在需要置1的位置上,将与它进行运算对象的对应的二进制位置1;需要保留原值的位置,则将对应的二进制位置0。,2.5 运算符和表达式,例2-37:按位或运算示例。 #include void main( ) int a=9,b=5,c; c=a|b; printf(“a=%dnb=%dnc=%dn”,a,b,c); ,2.5 运算符和表达式,4、左移位运算左移位运算符“ void main( ) int a=5,c; c=a2; printf(“a=%dnc=%dn”,a, c); ,2.5 运算符和表达式,5、

47、右移位运算右移位运算符“”是双目运算符,其功能把“”左边的运算数的各二进位全部右移若干位,右边的数指定移动的位数,高位丢弃,低位补0。左移n位就是除以2的n次方。 例2-39:右移位运算示例。 #include void main( ) int a=15,c; c=a2; printf(“a=%dnc=%dn”,a, c); ,2.5 运算符和表达式,6、按位异或运算按位异或,运算符为“”。两个运算对象中对应的二进制位相同(都是1或都是0),则该位结果为0;不相同则结果为1。 例2-40:按位异或可以用来使某些特定的位翻转。如果要对10100001的第2位和第3位翻转,可以将数10100001与00000110进行按位异或运算: 1010000100000110=10100111,2.6不同数值之间的转换,C语言提供了3种类型转换方式:自动转换、强制转换和赋值转换。其中自动转换和赋值转换又称为隐式转换,而强制转换又称为显示转换。 1、自动转换不同类型数据运算时先自动转换成同一类型,自动转换规则如图所示。,2.5 运算符和表达式 2.6不同数值之间的转换,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报