C语言基础及顺序结构程序设计.ppt

上传人:牧羊曲112 文档编号:6503809 上传时间:2023-11-07 格式:PPT 页数:159 大小:515.50KB
返回 下载 相关 举报
C语言基础及顺序结构程序设计.ppt_第1页
第1页 / 共159页
C语言基础及顺序结构程序设计.ppt_第2页
第2页 / 共159页
C语言基础及顺序结构程序设计.ppt_第3页
第3页 / 共159页
C语言基础及顺序结构程序设计.ppt_第4页
第4页 / 共159页
C语言基础及顺序结构程序设计.ppt_第5页
第5页 / 共159页
点击查看更多>>
资源描述

《C语言基础及顺序结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言基础及顺序结构程序设计.ppt(159页珍藏版)》请在三一办公上搜索。

1、第2章 C语言基础及顺序结构程序设计,作为一种程序设计语言,C 语言规定了一套严密的字符集和语法规则,程序设计就是根据这些基本字符和语法规则按照实际问题的需要编制出相应的 C 语言程序。本章首先介绍C语言的语法基础,包括字符集、数据类型、标识符、关键字、保留标识符、变量和常量的概念,其次介绍基本运算符和表达式的运算规则以及基本输入/输出函数的用法,最后介绍顺序结构程序设计的基本方法,并学习编写一些简单的顺序结构程序。,2.1 C语言的字符集 2.2 C语言的关键字、标识符与保留标识符 2.3 C语言的数据类型 2.4 常量 2.5 变量 2.6 C语言的运算符和表达式 2.7 C语言的最基本的

2、运算符与表达式 2.8 C语言的基本语句 2.9 数据的输入与输出 2.10 顺序结构程序设计 2.11 程序举例,第2章 C语言基础及顺序结构程序设计,第2章,2.1 C语言的字符集,字符是组成C语言的最基本的元素。C语言字符集由字母、数字、空白符、下划线、标点和特殊字符组成(在字符常量、字符串常量和注释中还可以使用汉字等其他图形符号)。由字符集中的字符可以构成C语言的基本的语法单位(如标识符、关键字、运算符等)。,2.1 C语言的字符集,C语言字符集及常规分类如下:字母:小写字母az共26个,大写字母AZ共26个。数字:09共10个。空白符:空格符、制表符和换行符等统称为空白符。空白符 只

3、在字符常量和字符串常量中起作用,在其他地方出现时,只起间隔作用,编译程序时对它们忽略。下划线:_。标点符号、特殊字符:+、-、*、/、%、=、(、)、!、&、#、?、,、.、;、:、。在编写C语言程序时,只能使用C语言字符集中的字符,且区分大小写字母。如果使用其他字符,编译器将把它们视为非法字符而报错。,2.2 C语言的关键字、标识符与保留标识符,正如人类的自然语言具有其语法规则一样,C 语言也规定了自身的语法。为了按照一定的语法规则构成 C 语言的各种成分,C语言规定了基本词法单位。基本的词法单位是单词,而构成单词的最重要的形式是关键字、标识符和保留字符。,2.2 C语言的关键字、标识符与保

4、留标识符,2.2.1 关键字 关键字是具有特定含义的、专门用来说明C语言的特定成分的一类单词。C语言的关键字都用小写字母书写,不能用大写字母书写。表2-1 C语言关键字列表,2.2.2 标识符 在C程序中,用于标识名字的有效字符序列称为标识符。标识符可用来标识变量名、符号常量名函数名、数组名和数据类型名等。标识符的命名应遵循以下规则:标识符只能由英文字母、数字和下划线三种字符组成,且 第一个字符必须为字母或下划线。大小写英文字母被认为是不同的字符。例如,D和d,BOOK和 book,A_b和a_b是三个不同的标识符。标识符不能与关键字和保留标识符重名。在一个标识符中,各个字符之间不允许出现空格

5、。标识符的长度可以为任意,它随编译系统的不同而不同。,2.2 C语言的关键字、标识符与保留标识符,正确的标识符命名:_3a x3 BOOK1 PI sum5 music _3_4 abcD34xz不正确的标识符命名:a+b 3s-3x yes no int ab r#xy bowy-1 yes/no printf,2.2.2 标识符,定义标识符时应尽量做到“见名知意”,以提高程序的可读性。例如,可用sum表示求和,name表示姓名、max表示最大等。,2.2 C语言的关键字、标识符与保留标识符,2.2.3 保留标识符 保留标识符是系统保留的一部分标识符,通常用于系统定义标准库函数的名字。例如,

6、正弦函数名sin、打印函数名printf、预编译命令define等。,2.2 C语言的关键字、标识符与保留标识符,2.3 C语言的数据类型,计算机的基本功能之一是数据处理,计算机语言支持的数据类型越丰富,它的应用范围就越广。数据类型是依据被说明量的性质、表示形式、占据存储空间的多少以及构造特点进行划分的。,2.3 C语言的数据类型,C语言的数据类型如图所示,图2-1 C语言数据类型的分类,在C语言中数据类型可分为4大类:(1)基本数据类型。它是编译系统已定义的类型,特 点是它的值不可以再分解为其他类型。(2)构造数据类型。它是用户自己定义的类型,是根 据已定义的一个或多个数据类型构造出来的。(

7、3)指针类型。它是一种特殊的的数据类型,用来表 示某个变量在内存储器中的存放地址。(4)空类型。它主要用途有两点,一是用作函数的返 回类型,二是用作指针的基本类型。,2.3 C语言的数据类型,2.4 常量,所谓常量是指在程序运行的整个过程中,其值始终不变的量。常量可以有不同的类型,可分为直接常量和符号常量。直接常量也就是日常所说的常数,包括数值常量和字符型常量两种。其中数值常量又包括整型常量和实型常量;字符型常量可分为字符常量和字符串常量;符号常量则是指用标识符定义的常量,从字面上不能直接看出其类型和值。,2.4 常量,C语言中常量的分类,如图2-2所示。,图2-2 C语言的常量,2.4.1

8、整型常量 C语言中整型常量有十进制、八进制、十六进制3种形式。,2.4 常量,1、十进制整型常量 十进制整型常量的表示与数学上的整数表示 相同,十进制整型常量没有前缀,由09的数字 组成。以下各数是合法的十进制整型常量:237,-568,65535,1627 以下各数不是合法的十进制整型常量:023(不能有前导0),23D(含有非十进制数码),2.4.1 整型常量,2.4 常量,2.4.1 整型常量,2、八进制整型常量 八进制整型常量的表示以数字0开头,即以0作为八进制数的前缀,由07的数字组成,八进制数通常是无符号数。以下各数是合法的八进制常数:015(十进制为13)0101(十进制为65)

9、0177777(十进制为65535)以下各数不是合法的八进制常数:256(无前缀0),03A2(包含了非八进制数字A)-0128(出现了非八进制数字8和负号),2.4 常量,3、十六进制整型常量 十六进制整型常量的表示以0 x或0X开头,即以0 x或0X作为前缀(注:十六进制数前缀字符0 x,x前面是数字0而不是字符o),由09,AF或af的数字组成。以下各数是合法的十六进制整型常量:0X2A(十进制为42)0XA0(十进制为160)0XFFFF(十进制为65535)以下各数不是合法的十六进制整型常量:5A(无前缀0X)0X3H(含有非十六进制数码H),2.4.1 整型常量,2.4 常量,另外

10、,整型常量按长度划分为两种:短整型和长整型(后缀为小写字母l或大写字母L),其中默认为短整型,如-377是一个短整型数,而-377l或-377L表示-377是长整型。,2.4.1 整型常量,2.4 常量,2.4.2 实型常量,在C语言中,实型常量只能用十进制形式表示,不能用八进制和十六进制形式表示。它有两种形式:小数形式和指数形式。,2.4 常量,2.4.2 实型常量,1.小数形式 由正负号、09的数字和最多一个小数点组成(必须有小数点)。如:-1.85,0.3456,120.0,.426,-11.都是十进制小数形式实数。小数点前面和后面可以没有数字(不能同时省略)。,2.4 常量,2.4.2

11、 实型常量,2.指数形式 由十进制数加上阶码标志“e”或“E”以及阶码组成。其一般形式为:a E n。其中a为十进制数,n为十进制整数(n为正数时“+”可以省略)其值为:a10n。例如,1.234e+12 表示 1.234*10 0.25e-8 表示 0.25*10-8。合法的实数:1.234e12(等于1.2341012),3.7E-2(等于3.710-2),2.34e+8(等于2.34108)非法的实数:568(无小数点),58.+e5(负号位置不对)2.7E(无阶码),6.4e+5.8(阶码为实数)e-5(阶码标志“e”之前无数字),2.4 常量,字符常量是用单引号括起来的一个字符。例如

12、:a、0、A、-、*都是合法字符常量,注意,a和A是不同的字符常量。除了以上形式的字符常量以外,C 语言还定义了一些特殊的字符常量,是以“”开头的字符序列,称为转义字符。转义字符是一种特殊的字符常量,具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如:如n中的n不表示字母n而作为“换行”符。,2.4.3 字符常量,2.4 常量,表2-2 转义字符及其含义,2.4 常量,注意:(1)字符常量只能用单引号括起来,不能用双引 号或其他括号。例如:“a”是不合法的。(2)字符常量只能是单个字符,不能是字符串。例如:ab是不合法的。(3)字符可以是字符集中任意字符,但数字被定 义为字符型之后就

13、以ASCII码值参与数值运 算。如:6和6是不同的,6是字符常量,而6是 整型常量。,2.4.3 字符常量,2.4 常量,例2.1 分析下面程序的运行结果。#include/*程序需要使用C语言提供的标准函数库*/void main()/*主函数*/printf(Chinan101tn);/*调用库函数printf显示字符串*/,2.4.3 字符常量,2.4 常量,程序运行结果:ChinaA,程序中有4个转移字符,分别是n、101、t、。输出“China”后遇到转义字符n,因此换行,换行后遇到转义字符101,输出A,后遇到转义字符t,水平移动到下一个制表位置,后遇到转义字符,输出。,在C语言中

14、,字符串常量是用双引号括起来的字符序列。例如,以下是合法的字符串常量:“CHINA”“This is a C program.”“402754”“+?ab”“*”“”表示一个空格“”表示什么字符也没有“n”表示一个转义字符换行 ab 既不是字符常量,也不是字符串常量。,2.4.4 字符串常量,2.4 常量,2.4.4 字符串常量,字符串常量在内存中存储时,系统自动在每一个字符串常量的尾部加一个“字符串结束标志”,即字符0(ASCII码值为0)。因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。例如,字符串“C program”的长度为 9(即字符的个数),但在内存中所占的字节数

15、为10,即存放“C program0”。,2.4 常量,再如,字符常量A与字符串常量“A”在内存中存储的方式如下:,2.4.4 字符串常量,2.4 常量,字符常量与字符串常量的区别:定界符不同。字符常量使用单引号,而字符串常量使用双引号。例如,“a”是不合法的。长度不同。字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。例如,ab 是不合法的。存储要求不同 字符常量存储的是字符的ASCII码值,而字符串常量除了要存储字符串常量的有效字符外,还要存储一个字符串结束标志0。,2.4.4 字符串常量,2.4 常量,2.4.5 符号常量,在程序中,可以定义一个符号来代表一个常量,这

16、种相应的符号称为符号常量。例如:用PI代表圆周率,即3.14159。符号常量可以增加程序的易读性。例如:用PI代表圆周率,NAME代表姓名等。符号常量提高了程序的通用性和可维护性,使用符号常量可以使修改该常量变得十分方便。,2.4 常量,2.4.5 符号常量,C语言中,用编译预处理命令#define来定义符号常量。例如:#define PI 3.14159#define NUM 35#define NAME“liming”#define END$格式是在#define后面跟一个标识符和一个字符串,彼此之间用空格隔开。它不是C语句,故末尾不要加分号。习惯上,符号常量用大写,变量用小写以示区别。另

17、外,符号常量一旦定义,就不能在程序的其它地方给该标识符再赋值。,2.4 常量,例2.2 编写求一个半径r为3.0的球的体积和表面积的程序。#include/*程序需要使用C语言提供的标准函数库*/#define PI 3.14159/*定义PI为符号常量,其值为3.14159*/void main()/*主函数*/float r,v,s;/*定义实型变量r、v、s分别表示球的半径、体积和表面积*/r=3.0;/*将3赋值给半径r*/v=4.0/3.0*PI*r*r*r;/*求球的体积v*/s=4.0*PI*r*r;/*求球的表面积s*/printf(v=%f,s=%fn,v,s);/*输出球的

18、体积v和表面积s*/,2.4.5 符号常量,2.4 常量,程序运行结果:v=113.097237,s=113.097240,本程序在主函数main()之前,由编译预处理命令#define定义PI为3.14159,在程序中以该值代替PI。v=4.0/3.0*PI*r*r*r等效于=4.0/3.0*3.14159*r*r*r,而s=4.0*PI*r*r等效于s=4.0*3.14159*r*r。,2.5 变量,程序在运行过程中除了使用常量外,还必不可少地要从外部或内部接收数据保存起来,并将程序处理过程中产生的中间结果以及最终结果保存起来。因此,需要引入变量来存放其值随时可以变化的量。,2.5.1 变

19、量的概念,变量是指在程序运行过程中,其值可以改变的量。例如,计算圆的周长的C语句:i=2*3.14159*r;i和r都是变量,其中,r可以有不同的值,i的值因r的值不同而不同。,2.5 变量,2.5.1 变量的概念,变量的特征:(1)它有一个变量名,变量名的命名方式符合标识符的 命名规则。例如,可以用name,sum作为变量名。(2)变量有类型之分。不同类型的变量占用的内存单元(字节)数不同,因此每个变量都有一个确定的类型。例如,整型变 量、实型变量、字符型变量等。(3)变量可以存放值。程序运行过程中用到的变量必须有确切的值,变量 在使用前必须赋值,变量的值存储在内存中。在程 序中通过变量名来

20、引用变量的值。,2.5 变量,2.5.1 变量的概念,变量名和变量值的区别:在程序运行过程中从变量x中取值,实际上是通过变量名x找到相应的内存地址,从其存储单元中取数据30。,图2-5 变量名与变量值的区别,2.5 变量,2.5.2 变量的定义与初始化,1.变量的定义 在C语言程序中,常量是可以不经定义而直接引用的,而程序中用到的所有变量必须先定义后使用。变量定义的一般格式为:数据类型标识符 变量名1,变量名2,变量名3,变量名n;其中,表示可选项。例如:int a;/*定义a为整型变量*/int m,n;/*定义m和n为整型变量*/float x,y,z;/*定义x,y,z为单精度实型变量*

21、/char ch;/*定义ch为字符型变量*/long int t;/*定义t为长整型变量*/static double r;/*定义r为长静态的双精度实型变量*/,2.5 变量,2.5.2 变量的定义与初始化,进行变量定义时,应注意以下几点:(1)允许在一个数据类型标识符后,说明多个相同类型的 变量,各变量名之间用逗号隔开。(2)数据类型标识符与变量名之间至少用一个空格隔开。(3)最后一个变量名之后必须以分号“;”结尾。(4)变量说明必须放在变量使用之前,一般放在函数体的 开头部分。(5)在同一个程序中变量不允许重复定义。例如,以下是 不合法的定义。int x,y,z;int a,b,x;/

22、*变量x被重复定义*,2.5 变量,2.5.2 变量的定义与初始化,2.变量的初始化 在定义变量的同时可以给变量赋初值,称为变量初始化。变量初始化的一般格式为:数据类型标识符 变量名1=常量1,变量名2=常量2,变量名n=常量n 例如:int m=3,n=5;/*定义m和n为整型变量,同时m,n分别赋初值3,5*/float x=0,y=0,z=0;/*定义x,y,z为单精度实型变量,同时x,y,z 都赋初值为0*/char ch=a;/*定义ch为字符型变量,同时赋初值字符a*/long int a=1000,b;/*定义a,b为长整型变量,同时a赋初值1000*/,2.5 变量,2.5.3

23、 整型变量,整型变量通常可分为4类:一般整型(int)、短整型(short)、长整型(long)和无符号型(unsigned)。其中,无符号型又有无符号整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)之分。变量在内存中都占据着一定的存储长度,随存储长度不同,所能表示的数值范围也不同。本书以VC+6.0作为软件开发环境,整型变量类型标识符、内存中所占空间字节数和所表示的数值范围见表2-3。,2.5 变量,表2-3 整型变量类型,2.5 变量,2.5.4 实型变量,实型变量分为单精度型(float)、双精度型(double)

24、和长双精度型(long double)3种。实型变量类型标识符、内存中所占空间字节数和所表示的数值范围见表2-4。,表2-4 实型变量类型,2.5 变量,一个实型常量可以赋值给一个float型或double型变量。根据变量的类型截取实型常量中相应的有效数字位。假如a已指定为单精度实型变量:float a=333333.333;由于float型变量只能接收7位有效数字,因此最后两位小数不起作用。如果a改为double型,则能全部接收上述9位数字并存储在变量a中。,2.5.4 实型变量,2.5 变量,2.5.4 实型变量,例2.3 浮点型数据的舍入误差分析。#include vo id main(

25、)/*主函数*/float a;/*定义a为单精度实型变量*/double b;/*定义b为双精度实型变量*/a=33333.33333;/*将值赋给单精度实型变量a*/b=33333.33333333333333;/*将值赋给双精度实型变量b*/printf(a=%f,b=%fn,a,b);/*以实型形式输出a和b的值*/,2.5 变量,程序运行结果:a=33333.332031,b=33333.333333,由于a 是单精度浮点型,有效位数只有七位,而整数已占五位,故小数位两位之后均为无效数字。b 是双精度型,有效位为十六位,但由于本运行环境规定小数后最多保留六位,其余部分四舍五入。,#i

26、nclude void main()float a;double b;a=33333.33333;b=33333.33333333333333;printf(a=%f,b=%fn,a,b);,#include void main()double a;double b;a=33333.33333;b=33333.33333333333333;printf(a=%f,b=%fn,a,b);,比较两次的运行结果:在编写程序时一定要注意实型数据有效位的问题,应合理使用不同的实型数据,尽可能减少运算中出现的积累误差。,程序运行结果:a=33333.332031,b=33333.333333,程序运行结果

27、:a=33333.333333,b=33333.333333,2.5.5 字符型变量,字符型变量用来存放字符常量,注意只能存放一个字符。字符型变量的类型标识符为char、内存中所占空间字节数为1,取值范围为-127127。例如:char c1,c2,c3,c4,c5;c1=a;正确 c2=“a”;不正确 c3=abc;不正确 c4=107;正确 c5=6;正确,2.5 变量,2.5.5 字符型变量,1.字符型数据在内存中的存放形式 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到 存储单元中。例如:char c1,c2;c1=a

28、;c2=b;字符a的ASCII代码为十进制数97,字符b的ASCII代码 为十进制数98,在内存中变量c1、c2的值如图所示。,图2-6 c1和c2在内存中的存放形式,2.5 变量,2.5.5 字符型变量,2.字符型数据的使用,以字符形式输出时,先将内存中ASCII码转换成对应的字符,再输出。以整数形式输出时,则直接将ASCII码作为整数输出。字符数据还可参加算术运算,此时相当于对它们的ASCII码值进行算术运算,先将其1个字节转换为2个字节,然后进行运算。,字符型数据在内存中是以ASCII码存储,因此,字符型和整型可以通用,字符型数据可以以字符形式输出,也可以以整数形式输出。,2.5 变量,

29、2.5.5 字符型变量,例2.3 向字符变量赋予整数。#include void main()char c1,c2;/*定义c1,c2为字符型变量*/c1=65;/*将整数65赋给c1*/c2=67;/*将整数67赋给c2*/printf(“%c%cn”,c1,c2);/*以字符形式输出c1和c2的值*/printf(“%d%dn”,c1,c2);/*以整数形式输出c1和c2的值*/,2.5 变量,程序运行结果:A C65 67,可以看到:字符型数据和整型数据是通用的。它们既可以用字符形式输出(用%c),也可以用整数形式输出(用%d)。但是应注意字符数据只占一个字节,它只能存放0255范围内的

30、整数。,2.5.5 字符型变量,例2.5 字符型和整型可以相互赋值。#include void main()int k;/*定义k为整型变量*/char ch;/*定义ch为字符型变量*/k=b;/*将字符b赋给整型变量k*/ch=66;/*将整数66赋给字符变量ch*/printf(“%d%cn”,k,k);/*以不同形式输出k的值*/printf(“%d%cn”,ch,ch);/*以不同形式输出ch的值*/,2.5 变量,程序运行结果:98 b66 B,2.6 C语言的运算符和表达式,数据处理是程序的核心部分。在数据处理中各种运算又是最主要的部分。C 语言不仅数据类型丰富,运算符也十分丰富

31、,几乎所有的操作都可作为运算符处理。,2.6.1 运算符,运算是对数据进行加工处理,用来表示各种运算的符号称为“运算符”。C语言的运算符,可以按其功能和运算对象的个数来进行分类。按运算符功能大致可以分为算术运算符、关系运算符、逻辑运算符、位运算符和C的特殊运算符等5类。例如:加(+)为算数运算符,大于()为关系运算符等。运算符按其运算对象的多少可以分为单目运算符(仅对一个运算对象进行操作)、双目运算符(对两个运算对象进行操作)和三目运算符(对三个运算对象进行操作)3类。例如:求负数的“-”为单目运算符:-5表示将5取负数其结果为-5。计算加法的“+”为双目运算符:2+3表示将2和3两个正整数进

32、行加法运算,其结果为5。条件运算符“?:”为三目运算符:ab?x:y表示如果ab,则ab?x:y的值为x 的值,否则ab?x:y的值为y的值。,2.6 C语言的运算符和表达式,2.6.2 表达式,各种数据操作运算都有相应的运算符号和运算规则,这些运算符号和运算符对象(常量、变量和函数)一起构成表达式。也就是说,用运算符和圆括号把运算对象连接起来的符合C语言语法规则的式子,称为表达式。例如:表达式 d/(3*a+b)-6*c 中包括:+、-、*、/、()运算符号,运算对 象包括a、b、c、d、3、6等。表达式 2+cos(0)中包括:+运算符号,运算对象包括2和cos(0)对表达式进行运算所得到

33、的结果,称为表达式的值。例如,表达式 2+cos(0)的值为 3。,2.6 C语言的运算符和表达式,2.6.3 运算符的优先级和结合性,学习 C语言的运算符,不仅要掌握各种运算符的功能,以及它们各自可连接的运算对象个数,而且还要了解各种运算符彼此之间的优先级及结合性。,2.6 C语言的运算符和表达式,1.优先级 运算符的优先级指多个运算符用在同一个表达式中时先进行什么运算,后进行什么运算。即若在同一个表达式中出现了不同级别的运算符,首先计算优先级较高的。例如:3-5*2:表达式中出现了二个运算符即-(减)和*(乘)。按优先级次序,先乘后减,表达式的值为-7。d=a+b*c:表达式中出现了三个运

34、算符即=(赋值)、+、*。按优先级次序,这三个运算符优先级由高到低依次是*、+、=,所以先算乘法,再算加法,最后执行赋值运算,即将赋值运算符=右边的表达式的值赋给变量d。注意,括号可以改变运算符的优先级。例如,d=(a+b)*c表达式的运算次序是+、*、=。,2.6.3 运算符的优先级和结合性,2.6 C语言的运算符和表达式,2.结合性 运算符的结合性是指运算符所需要的数据是从其左边开始取还是从右边开始取。即结合性是指在表达式中若连续出现若干个优先级相同的运算符时,各运算的运算次序。因而在C语言中有所谓“左结合性”和“右结合性”之说。,2.6.3 运算符的优先级和结合性,2.6 C语言的运算符

35、和表达式,2.6.3 运算符的优先级和结合性,例如:3*5/3:表达式中出现了二个运算符即*和/。按照优先级的次序,5的两侧“*”和“/”优先级相同,则按结合性处理。“*”和“/”运算符的结合性为从左到右,则先乘后除,表达式的值为5。d=a+b-c:表达式中出现了三个运算符即=(赋值)、+、-。按照优先级的次序,加和减的运算优先级相同,而赋值运算符优先级较低。根据加和减的结合性是从左到右,因此先计算加,再计算减,最后进行赋值。,2.6 C语言的运算符和表达式,为了方便读者,在表 2-5 中列出了所有运算符的优先级和结合性。注意所有的单目运算符、赋值运算符和条件运算符都是从右向左结合的,要予以特

36、别关注,其余均为从左向右结合的,与习惯一致。,2.6.3 运算符的优先级和结合性,2.6 C语言的运算符和表达式,2.6.3 运算符的优先级和结合性,运算符可按其优先级从高到低共分为15个等级。,1()括号运算符自左至右 下标运算符 指向结构体成员运算符.成员运算符 2!逻辑非运算符 单目运算符右结合 按位取反运算符+、-自加、自减运算符-负号运算符(类型)强制类型转换运算符*&指针和地址运算符 sizeof取长度运算符 3*、乘、除、求余运算符双目运算符自左至右4+、-算术加、减运算符双目运算符自左至右5 位左移、右移运算符双目运算符自左至右6、=关系运算符 双目运算符自左至右,2.6 C语

37、言的运算符和表达式,2.6.3 运算符的优先级和结合性,7=、!=关系运算符双目运算符自左至右8&按位与运算符双目运算符自左至右9 位异或运算符双目运算符自左至右10|位或运算符双目运算符自左至右11&逻辑与运算符双目运算符 自左至右12|辑或运算符双目运算符自左至右13?:条件运算符三目运算符 右结合14=、+=、-=、*=、/=、%=组合算术运算符双目运算符 右结合=、&=、|=、=组合位运算符15,逗号运算符 自左至右,2.6 C语言的运算符和表达式,2.7 C语言的最基本的运算符与表达式,本节中我们介绍一些最基本的运算符以及由这些运算符构成的表达式,后面的章节中将陆续介绍其他运算符以及

38、由这些其他运算符构成的表达式。,算术运算符有基本算术运算符(+、-、*、/、%)以及自增自减运算符(+、-)。由算术运算符和圆括号把运算对象连接起来的符合 C 语言语法规则的式子,称为算术表达式,算术表达式的结果是一个算术值。例如:3*9+3、(6+sin(0)/2-1 等,都是算术表达式,其值分别为30和2。,2.7 C语言的最基本的运算符与表达式,2.7.1 算数运算符与算数表达式,2.7.1 算数运算符与算数表达式,1基本算术运算符及其表达式 基本算术运算符有+、-、*、/、%(求余数)等5种运算符,都是双目运算符,其优先级从高到低为:()*、/、%+、-乘法、除法和求余3项运算优先级相

39、同;加法、减法两项运算优先级相同。结合性为自左至右。例2.6 设变量x、y的值分别为12.2和52.6,求算术表达式(x+y)/2-31的值。表达式中包括+、-、/等运算符,操作数包括x、y、2、31等,按照括号优先,先计算x+y,得和64.8,再计算64.8/2,得商32.4,最后计算32.4-31,运算结果为1.4,表达式(x+y)/2-31的值为1.4。,2.7 C语言的最基本的运算符与表达式,2.7.1 算数运算符与算数表达式,关于基本算术运算符及其表达式的说明和注意事项:表达式中凡是相乘的地方必须写上“*”,不能省略,也不能用小数点代替;表达式中出现的括号一律使用圆括号,而且为保持运

40、算顺序正确性,根据需要适当添加圆括号。例如,数学式,写成C语言表达式为:不能写成为:,或,或,或,2.7 C语言的最基本的运算符与表达式,2.7.1 算数运算符与算数表达式,数学中有些常用的计算可以用C系统提供的标准数学库函数实现,值得注意的是函数的自变量(即函数的参数)必须写在圆括号内。例如:求x的平方根的函数为sqrt(x),求 的函数为pow(x),一般情况下,求写为x*x的连乘形式。数学式 和 写成C语言表达式分别为:和,2.7 C语言的最基本的运算符与表达式,除法运算符“/”的运算对象可以是各种类型的数据,但是当进行两个整型数据相除时,运算结果也是整型数据,即只取商的整数部分;而操作

41、数中有一个为实型数据时,则结果为双精度实型数据(double型)。例如,5.0/10的运算结果为0.5,5/10的运算结果为0(而不是0.5),10/4的运算结果为2(而不是2.5)。求余数运算符“%”仅用于整型数据,不能用于实型。它的作用是取整数除法的余数。例如,1%2的结果是1,10%3的结果也是1。而1%2.0或10.0%3出错,不是合法的表达式。,2.7.1 算数运算符与算数表达式,2.7 C语言的最基本的运算符与表达式,2.7.1 算数运算符与算数表达式,2.自增与自减运算符及其表达式 自增(+)和自减(-)运算符都是单目运算符,它们的操作对象只有一个且只能是简单变量,其作用是使变量

42、的值增 1 或减 1。它们既可以作前缀运算符,如+i和-i;也可以作后缀运算符,如i+和i-。作为前缀和后缀运算符的区分,主要表现在对变量值的使用。即:前缀形式:+i、-i,它的功能是在使用i之前,i 值先加(减)1(即先执行i+1或i-1,然后再使用i值)。后缀形式:i+、i-,它的功能是在使用i 之后,i 值再加(减)1(即先使用i值,然后再执行i+1或i-1)。,2.7 C语言的最基本的运算符与表达式,例如,j=3时:k=+j;/*赋值时,j先增1,再将j值赋给k,结果k=4,j=4*/k=j+;/*赋值时,j值先赋给k,然后j再增1,结果k=3,j=4*/k=-j;/*赋值时,j先减1

43、,再将j值赋给k,结果k=2,j=2*/k=j-;/*赋值时,j值先赋给k,然后j再减1,结果k=3,j=2*/自增、自减运算符的优先级高于基本算术运算符,结合性为自右向左,具有右结合性。例如,求表达式-a+的值时,由于“-”和“+”的运算优先级相同,且都是右结合,因此它等价于表达式-(a+)。假设a的原值是5,计算时要先计算a+,由于是后缀自增,所以取a的原值5作为表达式a+的值,再对该值进行求负运算,得到-5,之后a自增为6。,2.7.1 算数运算符与算数表达式,2.7 C语言的最基本的运算符与表达式,2.7.1 算数运算符与算数表达式,关于自增、自减运算符及其表达式的说明和注意事项:自增

44、、自减运算符的对象只能是简单变量,不能是常量或带有运算符的表达式。例如,6-、+(a+b)、+(-i)等都是错误的。表达式中如果有多个运算符连续出现时,C编译系统尽可能多地从左到右将字符组合成一个运算符。例如,i+j等价于(i+)+j,-i+-j等价于-(i+)+(-j)。为了增加可读性,应该采用后面的写法,在必要的地方添加圆括号,但建议大家尽量不要使用。自增、自减运算可以提高程序的执行效率,速度快。因为+i运算只需要一条机器指令就可完成,而i=i+1则要对应三条机器指令。,2.7 C语言的最基本的运算符与表达式,例2.7 假设变量i、j、k的值分别为3、5和3,求表达式m=(+k)*j和n=

45、(i+)*j中m和n的值。在计算m=(+k)*j时,k首先增1变为4,然后与 j相乘,即m=(+k)*j=4*5=20;最后将20赋值给m。在计算n=(i+)*j时,由于对i实施的是后缀自增,因此,i是用3的值参与乘运算,即n=(i+)*j=3*5=15。在参与乘操作之后,i才增1变为4;最后赋值给n的值是15。,2.7.1 算数运算符与算数表达式,2.7 C语言的最基本的运算符与表达式,例 2.8 自增、自减运算应用举例。#include/*程序需要使用C语言提供的标准函数库*/void main()/*主函数*/int i=8;/*定义i为整型变量,并将其初始化为8*/printf(%d,

46、+i);/*i自增1后再参与输出运算*/printf(%d,-i);/*i自减1后再参与输出运算*/printf(%d,i+);/*i参与输出运算后,i的值再自增1*/printf(%d,i-);/*i参与输出运算后,i的值再自减1*/printf(%d,-i+);/*按照结合性-i+相当于-(i+)*/printf(%dn,-i-);/*按照结合性-i-相当于-(i-)*/,2.7.1 算数运算符与算数表达式,2.7 C语言的最基本的运算符与表达式,程序运行结果:9 8 8 9-8-9,2.7.2 赋值运算符和赋值表达式,赋值运算符包括基本赋值运算符和复合赋值运算符,复合赋值运算符又包括算数

47、符合赋值运算符和位复合赋值运算符,本节只介绍基本赋值运算符(=)和算数复合赋值 运算符(+=、-=、*=、/=、%=),关于位 复合赋值运算符将在后续章节中加以介绍。,2.7 C语言的最基本的运算符与表达式,1.基本赋值运算符及其表达式 赋值符号“=”就是基本赋值运算符。由基本赋值运算符和圆括号将运算对象连接的符合C语言语法规则的式子,称为基本赋值表达式,其一般形式为:变量 基本赋值运算符 表达式 赋值运算符的作用是,首先计算表达式的值,然后将该值赋值给等号左边的变量,实际上是将表达式的值存放到左边变量的存储单元中。基本赋值表达式的值也就是基本赋值运算符左边变量得到的值。例如,表达式x=3*5

48、+35 的作用是将3*5+35的计算结果50,赋值给变量x,变量x的值为50,表达式的值为50。赋值运算符的优先级仅仅高于逗号运算符,且有自右向左的结合性。,2.7.2 赋值运算符和赋值表达式,2.7 C语言的最基本的运算符与表达式,例2.9 已知“int a=2,b=5”,求解表达式x=y=a+b的值。由于算术运算符的优先级高于赋值运算符,先计算表达式a+b,结果为7。按照赋值运算的结合方向自右向左结合,求解表达式 x=y=a+b的值,等价于求解表达式x=(y=a+b)的值。操作数y是先与右边的运算符结合,即先将7赋值给变量 y,变量y 的值是7,表达式y=7的值是7。再做左边赋值运算,即将

49、表达式y=7的值7,赋值给变量x,变量x的值是7,最后得到表达式x=y=7的值是7。,2.7.2 赋值运算符和赋值表达式,2.7 C语言的最基本的运算符与表达式,例 2.10 设变量a、b、c均为整型变量,求表达式 a=(b=65)/(c=6)的值。按照括号优先,先求解表达式b=65,结果为65;再求解表达式c=6,结果为6;再进行除法运算65/6,结果为10;最后将10赋值给变量a,得到表达式a=(b=65)/(c=6)的值是10。,2.7.2 赋值运算符和赋值表达式,2.7 C语言的最基本的运算符与表达式,2.算数复合赋值运算符及其表达式 在基本赋值运算符(=)前面加上基本算术运算符(+、

50、-、*、/、%),就构成了算术复合赋值运算符。C语言规定的算术复合赋值运算符有+=、-=、*=、/=、%=等5种。由算术复合赋值运算符和圆括号将运算对象连接的符合C语言语法规则的式子,称为算术复合赋值表达式,其一般形式为:变量 算术复合赋值运算符 表达式 例如:a+=b 等价于 a=a+b a/=b 等价于 a=a/b a-=b+4 等价于 a=a-(b+4)x*=y+7 等价于 x=x*(y+7)算术复合赋值运算符的优先级、结合性与基本赋值运算符相同。,2.7.2 赋值运算符和赋值表达式,2.7 C语言的最基本的运算符与表达式,例 2.11 已知int a=6,b=8,求解表达式a*=b+=

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号