版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 C的数据类型的数据类型数据类型数据类型 C语言要求,必须为语言要求,必须为出现在程序中的所有数据出现在程序中的所有数据指定数据类型。指定数据类型。 由于由于 C语言语言把程序中把程序中的数据又分为变量和常量的数据又分为变量和常量两大类,因此,不论是常两大类,因此,不论是常量数据还是变量数据,都量数据还是变量数据,都要指定数据类型。要指定数据类型。 空类型指针类型共用体结构体数组构造类型枚举型双精度型单精度型实型(浮点型)字符型短整型长整型基本整型整型基本类型3.2 常量与变量常量与变量 在程序执行过程中,在程序执行过程中,
2、其值可以改变的量其值可以改变的量称为变量。称为变量。在程序执行过程中,在程序执行过程中,其值不能被改变的其值不能被改变的量称为常量。量称为常量。整型常量整型常量 :98,-3浮点型常量:浮点型常量:3.14,0.8字符常量:字符常量: a,B字符串常量字符串常量: “ab”, “ 23”由于通过字面就能判别它由于通过字面就能判别它们是常量,因此,这样表们是常量,因此,这样表示的常量称为字面常量示的常量称为字面常量 /直直接常量,接常量, 除了字面常量外,还可以用符号来代表一个常量,除了字面常量外,还可以用符号来代表一个常量,该符号称为符号常量。该符号称为符号常量。符号常量符号常量 如果在程序中
3、某处定义了符号常如果在程序中某处定义了符号常量量PI ,从此往后,本程序中凡是出,从此往后,本程序中凡是出现现PI的地方都代表的地方都代表3.14,而且,而且PI可可以和常量以和常量3.14一样参加运算。一样参加运算。 #define PI 3.14 符号常量的定义方式为:符号常量的定义方式为:#define 标识符标识符 常量值常量值#define PI 3.14#define ROOM_NUMBER 301#define NAME “Johnson” 符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量符号常量变变 量量 所谓变量,就是在
4、程序执行过程中,其值可以被改变的量。通俗地讲,所谓变量,就是在程序执行过程中,其值可以被改变的量。通俗地讲,变量就像某高档饭店的房间,这体现在以下几个方面:变量就像某高档饭店的房间,这体现在以下几个方面: 对某个房间来说,一拨客人走后,对某个房间来说,一拨客人走后,另一拨客人可以进来,虽然房间不变,另一拨客人可以进来,虽然房间不变,但里头吃饭的人在变。但里头吃饭的人在变。 在在C程序中,变量就是建立在内存程序中,变量就是建立在内存里的房间,它用来存储不断变化的信息。里的房间,它用来存储不断变化的信息。存放在变量中的信息称为变量值。存放在变量中的信息称为变量值。 为了区分不同的房间,人们为每为了
5、区分不同的房间,人们为每个房间起一个名字,比如百合厅、玫个房间起一个名字,比如百合厅、玫瑰厅等。瑰厅等。 每个变量也有变量名。每个变量也有变量名。 房间有大小、档次之分。房间有大小、档次之分。 变量有类型之分,变量的数据类型变量有类型之分,变量的数据类型决定了可以容纳的信息种类,也决定了决定了可以容纳的信息种类,也决定了所占存储单元的大小。所占存储单元的大小。 每个房间有自己的房间号,而且每个房间有自己的房间号,而且房间名与房间号有对应关系。房间名与房间号有对应关系。 每个变量有自己的存储地址,而且每个变量有自己的存储地址,而且变量名与存储地址有对应关系。变量名与存储地址有对应关系。 总之,变
6、量具有名字、类型、值、地址等属性。总之,变量具有名字、类型、值、地址等属性。标识符标识符 在在C语言中,变量名、符号常量名、函数名等统称为标识符。语言中,变量名、符号常量名、函数名等统称为标识符。C语言规定,标识符只能由字母、数字和下划线组成,且第一个字语言规定,标识符只能由字母、数字和下划线组成,且第一个字符只能是字母或下划线。符只能是字母或下划线。 下列是合法的标识符,可以充当变量名等。下列是合法的标识符,可以充当变量名等。sum,student_name,_part_1 , , BASIC下面这些标识符不合法,下面这些标识符不合法,Mr.Wang,ab,1_2_3 大小写敏感,大小写敏感
7、,sum,Sum,SUM是是3个不同的标识符。个不同的标识符。关键字不能作为标识符。关键字不能作为标识符。标识符应注意问题标识符应注意问题整型常量整型常量 由于由于C语言把数据分为常量和变量两大类,所以整型数据也相应地分为语言把数据分为常量和变量两大类,所以整型数据也相应地分为整型常量和整型变量。整型常量和整型变量。1整型常量的表示方法整型常量的表示方法 整型常量可以以三种形式出现在整型常量可以以三种形式出现在C程序中。程序中。(2)八进制形式)八进制形式 为了避免与十进制形式混淆,这种形式要求以为了避免与十进制形式混淆,这种形式要求以0开头。如开头。如0123表示八表示八进制数进制数123,
8、即,即(123)8,其值为,其值为182+281+380,等于十进制的,等于十进制的83。(1)十进制形式)十进制形式 例如例如 123,5,0(3)十六进制形式)十六进制形式 这种形式要求以这种形式要求以0 x开头。如开头。如0 x123表示十六进制数表示十六进制数123,即,即(123)16,其值为其值为1162+2161+3160,等于十进制的,等于十进制的291。整型变量整型变量 我们可以用我们可以用int 变量名变量名;来定义整型变量。例如来定义整型变量。例如int i; 此时,我们可以用赋值语句把整型此时,我们可以用赋值语句把整型数据存放到变量数据存放到变量i中,例如,用中,例如,
9、用i=10;可以把可以把10存放到变量存放到变量i中,中, 在变量中有值以后,我们可以用在变量中有值以后,我们可以用%d格式符来输出整型变量值,例如,格式符来输出整型变量值,例如, printf(”%d”,i);会输出会输出10内存内存201202203204205206207 TC系统会在内存中为它分配系统会在内存中为它分配2字节字节的存储单元的存储单元,Visual C+系统会在内存中系统会在内存中为它分配为它分配4字节的存储单元字节的存储单元i1010浮点型常量的表示方法浮点型常量可以以两种形式出现在C程序中:(2 2)指数形式)指数形式 例如,例如,-123.4e3, 1.82E-3,
10、 -0.0073e+5(1 1)十进制小数形式(定点形式)十进制小数形式(定点形式) 例如,例如,123.4,123.,-.123,0.0一定要有小数点。一定要有小数点。注意:注意:在在e的前后一定要有数字,的前后一定要有数字,e2、1E 不合法不合法。-123.41031.8210-3-0.0073105在在e的后面务必是整数,的后面务必是整数, 1.3E3.5 不合法不合法。一个实数可以用多种指数形式表示出来。一个实数可以用多种指数形式表示出来。 123.45可表示为可表示为1234.5e-1,123.45e0,1.2345e2,0.12345e3 规范化的指数形式规范化的指数形式 在在e
11、前的部分中,小数点前有前的部分中,小数点前有且仅有一位数字,而且是非且仅有一位数字,而且是非0数字数字 浮点型常量的类型一般情况下,浮点型常量被认为是双精度型的。一般情况下,浮点型常量被认为是双精度型的。 一个浮点型常量既可以赋给一个浮点型常量既可以赋给float变量,也可以赋给变量,也可以赋给double变量,变量,只是接收的有效数字位数不同而已。只是接收的有效数字位数不同而已。float:TC,Visual C+系统会在内存中为它分配系统会在内存中为它分配4字节的存储字节的存储单元单元 float a; a=1.23*0.456; 系统会把系统会把1.23和和0.456作为双精度数据存储和
12、运算,得到一个双精度的乘积,作为双精度数据存储和运算,得到一个双精度的乘积,然后取前然后取前7位有效数字赋给变量位有效数字赋给变量a。这样做的好处是提高了精度,但也降低了运算。这样做的好处是提高了精度,但也降低了运算速度。速度。 如果希望如果希望C系统把某浮点型常量按单精度处理,只要在该数据后面加系统把某浮点型常量按单精度处理,只要在该数据后面加上上f或或F即可。例如,即可。例如,1.23f -10.836F。3.5 字符型数据字符常量字符常量是用单撇号括起来的单个字符,例如字符常量是用单撇号括起来的单个字符,例如: a , D , , n , 101 P364附录附录I给出了在程序中常用的字
13、符,每个字符都有一个编码,给出了在程序中常用的字符,每个字符都有一个编码,称为称为ASCII码。例如,码。例如,大写字母大写字母AZ的的ASCII码为码为6590小写字母小写字母az的的ASCII码为码为97122数字数字 09的的ASCII码为码为4857 规律总结:规律总结:相邻字母或数字的相邻字母或数字的ASCII码差码差1 对应大小写字母的对应大小写字母的ASCII码差码差32 转义字符转义字符 像字母、数字等字符我们可以直接从键盘上输入,但是有许多像字母、数字等字符我们可以直接从键盘上输入,但是有许多控制字符无法直接从键盘上输入。控制字符无法直接从键盘上输入。 C语言用以语言用以 开
14、头的字符序列来表示这些字符,例如,开头的字符序列来表示这些字符,例如, 用用n表示表示“换行符换行符”(ASCII码为码为10),), 用用b表示表示“退格符退格符”(ASCII码为码为8)。)。这种形式的字符称为这种形式的字符称为“转义字符转义字符”,意思是把反斜杠,意思是把反斜杠后面的字符转换为后面的字符转换为别的意义。如别的意义。如n中的中的n不代表字母不代表字母n,而代表,而代表“换行符换行符”。 常见的转义字符如常见的转义字符如P48表表3-3所示。所示。 字符变量 字符变量可以用来存放字符常量,字符变量可以用来存放字符常量, 它只它只能放一个字符。能放一个字符。 我们可以用我们可以
15、用char 变量名变量名;来定义字符变量。例如来定义字符变量。例如 char a; 我们可以用赋值语句把字符常量存放到字符我们可以用赋值语句把字符常量存放到字符变量中,例如,变量中,例如,a=A;可把字符可把字符A存放到变量存放到变量a中。中。需要特别注意的是,需要特别注意的是,存储单元中实际存放的是字符存储单元中实际存放的是字符A的的ASCII码码65,且,且以二进制形式。以二进制形式。 内存201202203204205206207系统会在内存中为每个字符变量分配系统会在内存中为每个字符变量分配1字节的存储字节的存储单元单元 。6500010100a 显然,这种存放形式十分类似于整数显然,
16、这种存放形式十分类似于整数65的存放的存放形式。形式。字符数据与整型数据可以通用 由于字符数据在内存中以由于字符数据在内存中以ASCII码存放,而且其存储形式和整数的存储形式码存放,而且其存储形式和整数的存储形式类似,所以类似,所以C语言中字符数据与整型数据之间可以通用。这体现在三方面:语言中字符数据与整型数据之间可以通用。这体现在三方面: 1.字符数据可以参加算术运算字符数据可以参加算术运算例如,例如,100-A,该表达式的值为,该表达式的值为100-65=35。 2.可以把整数赋值给字符变量可以把整数赋值给字符变量例如,例如,a=66;3.字符数据既能按字符形式输出,也能按整数形式输出。字
17、符数据既能按字符形式输出,也能按整数形式输出。01000010a当以当以整数形式整数形式输出时,直接将输出时,直接将ASCII码作为整数输出。可用码作为整数输出。可用 printf(%d,a);来实现。来实现。当以当以字符形式字符形式输出时,系统输出的是存储单元中的输出时,系统输出的是存储单元中的ASCII码码所对应的字符。可用所对应的字符。可用 %c 格式符来实现。格式符来实现。 printf(%c,a); 例例3.7 大小写字母的转换大小写字母的转换#include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf
18、(“c c,c1,c2););字符串常量 C语言除了允许使用字符常量外,还允许使用字符串常语言除了允许使用字符常量外,还允许使用字符串常量。例如,量。例如, ”CHINA”就是一个字符串常量。就是一个字符串常量。 字符串常量就是用双撇号括起来的字符序列。字符串常量就是用双撇号括起来的字符序列。 我们可以用我们可以用 printf(”CHINA”);字符常量和字符串常量比较 形式上,字符常量是单个字符用单撇号括起来,如形式上,字符常量是单个字符用单撇号括起来,如A,0;字符串常量是若干个字符用双撇号括起来,如字符串常量是若干个字符用双撇号括起来,如”USA”,”A”,”。存储上,为保存每个字符常
19、量只需存储上,为保存每个字符常量只需1字节的内存;字节的内存; 系系统为了保存字符串常量,除了要为字符串中的每个字符统为了保存字符串常量,除了要为字符串中的每个字符分配一个字节外,还要多分配一个字节用来存放分配一个字节外,还要多分配一个字节用来存放”字符字符串结束标志串结束标志”即即0。 例如,为了保存例如,为了保存“CHINA” ,需要,需要6个字节的内存。个字节的内存。30167302723037330478305653060 设置设置“字符串结束标志字符串结束标志”便于函数判断字符串是否便于函数判断字符串是否结束。例如,在用结束。例如,在用 printf(“CHINA”);输出时,是一个
20、字符一个字符的输出,直到遇到输出时,是一个字符一个字符的输出,直到遇到0为止。为止。 NIHCA3.6 变量赋初值 我们可以同时对多个变量进行初始化,例如,我们可以同时对多个变量进行初始化,例如, int a=3, b, c=20; int a=3,b=3,c=3;但是,第二个式子不能写成:但是,第二个式子不能写成: int a=b=c=3; C语言允许在定义变量的同时,为变量设置初值,称为语言允许在定义变量的同时,为变量设置初值,称为变量的初变量的初始化始化。例如,int i=3; float f=3.14;char c=P;3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算 我们
21、知道,我们知道, 整型数据可以细分为整型数据可以细分为short、int、long,浮点型数据可以细分为,浮点型数据可以细分为float、double,并且知道字符数据与整型数据之间可以通用。,并且知道字符数据与整型数据之间可以通用。 高高doublefloatlongunsigned低低intshort、char 在实际应用中,可能需要将这些不同类型的数据进行混合运算。在进行混合在实际应用中,可能需要将这些不同类型的数据进行混合运算。在进行混合运算时,运算时,C系统会按照一定的规则,系统会按照一定的规则,自动地自动地将操作数转换成同一类型,然后再进将操作数转换成同一类型,然后再进行运算。行运
22、算。 转换原则分为两部分,如下图所示转换原则分为两部分,如下图所示务必要做的务必要做的转换转换 务必要做的务必要做的转换转换 float型一律转化为型一律转化为double型,型,即使是两个即使是两个float型数据运算。型数据运算。 char型、型、short型一律转化为型一律转化为int型型 。 注意:上述类型转换是由系注意:上述类型转换是由系统自动进行的。统自动进行的。10+a+i*f-d/e基本算术运算符 基本算术运算符包括基本算术运算符包括 +、-、*、/、%,其中,其中,+:称为加法运算符,或正值运算符,如称为加法运算符,或正值运算符,如3+5, +8 关于基本算术运算符,请注意以
23、下几点:关于基本算术运算符,请注意以下几点:求余运算符求余运算符%要求两侧的操作数均为整数,如要求两侧的操作数均为整数,如14.1%3是错误的。是错误的。参加算术运算的两操作数中有一个是实数,则结果必是参加算术运算的两操作数中有一个是实数,则结果必是double型的。型的。 两个整数相除的结果还是整数,舍去小数部分。如两个整数相除的结果还是整数,舍去小数部分。如10/3=3,-10/3=-3-:称为减法运算符,或负值运算符,如称为减法运算符,或负值运算符,如a-b, -9*:称为乘法运算符,如称为乘法运算符,如3*5, 3.14*r*r/:称为除法运算符,如称为除法运算符,如14/3, 10.
24、8/0.25%:称为模运算符,或求余运算符,如称为模运算符,或求余运算符,如25%3=1算术表达式 C语言中的表达式指的是用运算符把操作数连接起来的、符合语言中的表达式指的是用运算符把操作数连接起来的、符合C语法规则的式子,这里的操作数可以是常量、变量以及函数值等。语法规则的式子,这里的操作数可以是常量、变量以及函数值等。 人们常把计算表达式结果的过程称为求解表达式,表达式的运算人们常把计算表达式结果的过程称为求解表达式,表达式的运算结果称为该表达式的值,运算结果的数据类型称为该表达式的类型。结果称为该表达式的值,运算结果的数据类型称为该表达式的类型。因此,每个表达式都有自己的值和类型。因此,
25、每个表达式都有自己的值和类型。 所谓算术表达式就是用算术运算符把操作数连接起来所谓算术表达式就是用算术运算符把操作数连接起来的、符合的、符合C语法规则的式子,例如语法规则的式子,例如 a*b/c-1.5+A就是一个算术表达式。又如,就是一个算术表达式。又如,10+7/5+15 强制类型转换运算符 在计算2+1.2时,系统会自动进行类型转换,表达式的值为3.2,类型是double。但在有些场合,自动类型转换不能达到目的,如3.14%3不合法,单靠C系统的自动类型转换无法使其合法化,需进行强制类型转换,(int)3.14%3。 强制类型转换运算符的一般形式为强制类型转换运算符的一般形式为(类型)(
26、类型)其用法是其用法是(类型)(表达式)(类型)(表达式)其功能是将一个表达式的值转换成所需的类型。例如,其功能是将一个表达式的值转换成所需的类型。例如,(int)()(3.2x)(double)()(5%3) 需要注意的是,在强制需要注意的是,在强制类型转换时,系统会生成一类型转换时,系统会生成一个所需类型的中间变量用来个所需类型的中间变量用来存放转换结果。存放转换结果。 若若f是一个是一个float型变量,值为型变量,值为3.14,在进行,在进行(int)f强制类型转换时,系统会生成一个强制类型转换时,系统会生成一个int中间变量中间变量用来存放转换结果用来存放转换结果3,f的类型不会改变
27、。的类型不会改变。习题习题.求下面算术表达式的值。求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 自增、自减运算符 自增运算符:自增运算符: 自减运算符:自减运算符: 作用:使变量作用:使变量i的值增的值增1用法:用法:i+ +i作用:使变量作用:使变量i的值减的值减1用法:用法:i- -i一、两个表达式的求解过程不同i+是先把是先把i的值作为表达式的值,再把的值作为表达式的值,再把i的值增的值增1;
28、因此,该表达式的值;因此,该表达式的值等于等于i的旧值。的旧值。例如,若整型变量i的值为3,printf(“%d”,i+); 输出3+i是先把是先把i的值增的值增1,再把,再把i的值作为表达式的值;因此,该表达式的值的值作为表达式的值;因此,该表达式的值等于等于i的新值。的新值。例如,若整型变量i的值为3, printf(“%d”,+i); 输出4以自增运算符自增运算符为例,虽然+i与i+都可以使得变量i增1,但有差别。二、在需要i的值参与其他运算的场合,二者作用不同5*(i+) i+是先使用是先使用i的值参与运算,然后再使的值参与运算,然后再使i增增1。5*(+i) +i是先使是先使i增增1
29、,然后再使用,然后再使用i的值参与运算。的值参与运算。注意:注意: (1)(1)自增运算符(),自减运算符(),自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式只能用于变量,而不能用于常量或表达式. . (a+b)+不合法不合法 (2)(2)和的结合方向是和的结合方向是“自右至左自右至左”。-i+-i+-(i+)-(i+) 自增(减)运算符常用于循环语句中使循环变量自动加。自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址也用于指针变量,使指针指向下一个地址 习题习题.写出程序运行的结果。写出程序运行的结果。 #includevoid m
30、ain() int i,j,m,n; i=8; j=10; m=+i; n=j+; printf(“%d,%d,%d,%d”,i,j,m,n); 9,11,9,10 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。它是双目运算符,其用法是:它是双目运算符,其用法是:变量变量=表达式表达式例如,例如,a=5;a=b; a=b+3; 复合赋值运算符 赋值运算符还可以与其他双目运算符结合,构成赋值运算符还可以与其他双目运算符结合,构成复合赋值运算符复合赋值运算符,简称简称复合赋值符复合赋值符。例如例如: 等价于 * 等价于 *() 等
31、价于 语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符:,*,|赋值表达式 由赋值符或复合赋值符把变量与表达式连接起来的式子,由赋值符或复合赋值符把变量与表达式连接起来的式子,称为赋值表达式。其一般形式为:称为赋值表达式。其一般形式为:变量变量 赋值运算符赋值运算符 表达式表达式例如,例如, a=5对赋值表达式求解的过程是:对赋值表达式求解的过程是: 求赋值运算符右侧的“表达式”的值; 赋给赋值运算符左侧的变量。例如例如: 赋值表达式赋值表达式“=3*5”的值为的值为15,执行表达式后,变量,执行表达式后,变量a的值也是的值也是15。注意注意: 一个表达式应该有一个值一个表达
32、式应该有一个值.赋值表达式的值就是实施赋值运算赋值表达式的值就是实施赋值运算后变量的值,该表达式的类型就是变量的类型。后变量的值,该表达式的类型就是变量的类型。左值左值 ( (lvaluelvalue) ) : : 赋值运算符左侧的标识符赋值运算符左侧的标识符变量可以作为左值变量可以作为左值; ;而表达式就不能作为左值而表达式就不能作为左值( (如如a+ba+b););字符常量也不能作为左值,字符常量也不能作为左值, 右值右值 ( (lvaluelvalue) ) : :出现在赋值运算符右侧的表达式出现在赋值运算符右侧的表达式 左值也可以出现在赋值运算符右侧,因而左值都可以左值也可以出现在赋值
33、运算符右侧,因而左值都可以作为右值。作为右值。intint a=3,b,c; a=3,b,c;b=a;b=a;c=b;c=b; 赋值表达式中的赋值表达式中的“表达式表达式”,又可以是一个赋值表达式。,又可以是一个赋值表达式。 例如例如: : a=(b=5)a=(b=5) 分析下面的赋值表达式分析下面的赋值表达式(a=3(a=3* *5)=45)=4* *3 3 赋值表达式也可以包含复合的赋值运算符。赋值表达式也可以包含复合的赋值运算符。 如:如:a+=a-=aa+=a-=a* *a a 将赋值表达式作为表达式的一种,使赋值操作不仅可以将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语
34、句中,而且可以以表达式形式出现在其他出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。语句(如输出语句、循环语句等)中。 如:如:printf(%d,a=b); 习题写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a (5) a%=(n%=2),n的值等于5 (6)a+=a-=a*=a (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式 C语言提供逗号运算符,用于把多个表达式连接起来,
35、语言提供逗号运算符,用于把多个表达式连接起来,构成一种逗号表达式。其一般形式为:构成一种逗号表达式。其一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式n 逗号表达式的求解过程是,先求解表达式逗号表达式的求解过程是,先求解表达式1,再求解表达式,再求解表达式2,最后求解表达式,最后求解表达式n,并且把表达式,并且把表达式n的值作为该逗号的值作为该逗号表达式的值。表达式的值。 例如,例如, 3+5,10*2,14/4该表达式的值为该表达式的值为3 需要注意的是需要注意的是 ,逗号运算符的优先级是所有运算符,逗号运算符的优先级是所有运算符中最低的。中最低的。例如例如:
36、x(a3,6*3) xa3,6*3一个逗号表达式又可以与另一个表达式组成一个新的逗号一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式表达式 如如:(a3*5,a*4),a+5不是任何地方出现的逗号都是逗号运算符不是任何地方出现的逗号都是逗号运算符,例如,例如 printf(“%d,%d,%d”,a,b,c);中的逗号只是参数之间的分隔符。中的逗号只是参数之间的分隔符。 printf(“%d,%d,%d”,(a,b,c),b,c);1. 以以下哪一个可以作为正确的变量名下哪一个可以作为正确的变量名 。A 3X Bfile_1 Cint DX+Y;答案答案:B2. 下列哪一个整数值最大下列
37、哪一个整数值最大 。A012 B0 x12 C12 D120 答案答案:D3. 下面输出语句的结果是下面输出语句的结果是 printf(%fn,3.14/2*10);A.15.700000B.0.000000C.15. D.0答案答案:A4.下面输出语句的结果是下面输出语句的结果是 printf(%fn,1/2*3.14*10);A. 15.700000B.0.000000 C.15. D.0答案答案:B5.复合赋值语句复合赋值语句a+=6;的等价式是的等价式是 A.a=a+6;B.a=(a+)+6;C.a=6+6D.a=+a+6;答案答案:A6.复合赋值语句复合赋值语句a*=b+7;的等价式
38、是的等价式是 A. a=a*b+7; B.a=a*(b+7);C. a=a+b*7D.a=a*b+b*7;答案答案:B第第4章章 最简单的最简单的C程序程序设计设计顺序程序设计顺序程序设计5、复合语句、复合语句(分程序分程序):一些语句用一些语句用 括起来就称为复合括起来就称为复合语句语句。例如, sum+=i; i+; 4.2 赋值语句赋值语句是由赋值表达式加上一个分号构成赋值语句是由赋值表达式加上一个分号构成, ,其作用是把其作用是把表达式的值赋给变量。表达式的值赋给变量。例:例:a=100 a=100 赋值表达式赋值表达式 a=100; a=100; 赋值语句赋值语句赋值表达式可以出现在
39、某些表达式中,但赋值语句却不能赋值表达式可以出现在某些表达式中,但赋值语句却不能出现在表达式中。出现在表达式中。例:例:if(aif(a=b)0)t=a; =b)0)t=a; 正确正确if(aif(a=b=b;)0)t=a; )0)t=a; 错误错误 putchar函数是一个输入输出库函数,其功能是向显示器上输出一个函数是一个输入输出库函数,其功能是向显示器上输出一个字符。调用方式为:字符。调用方式为: putchar(字符常量字符常量 或或 字符变量字符变量);1.字符输出函数字符输出函数-putcharputchar也可以输出转义字符,例如:也可以输出转义字符,例如: putchar(n)
40、;putchar(101); 4.4 字符数据的输入输出字符数据的输入输出例例4.1 输出单个字符。输出单个字符。#includevoid main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);2.字符输入函数字符输入函数-getchar 在程序执行过程中,如果希望从键盘上输入一个字符,可以调用在程序执行过程中,如果希望从键盘上输入一个字符,可以调用getchar函数来实现这一功能。它的函数值就是从键盘上输入的字符。函数来实现这一功能。它的函数值就是从键盘上输入的字符。 注意:注意:只能接受一个字符。只
41、能接受一个字符。 getchar函数的值可以赋给变量,也可以直接输出函数函数的值可以赋给变量,也可以直接输出函数值。例如,值。例如,printf(”%c”,getchar(); 例例4.2 输入单个字符。输入单个字符。#includevoid main() char c; c=getchar(); putchar(c); putchar(n);格式输出函数格式输出函数-printf 可以调用可以调用printf函数,把若干表达式的值按照希望的格式输出到屏幕上。例函数,把若干表达式的值按照希望的格式输出到屏幕上。例如,在下面的程序中,若希望按十进制输出和、按十六进制输出差,可如下写。如,在下面的
42、程序中,若希望按十进制输出和、按十六进制输出差,可如下写。u一类是一类是以以%开头、以格式字符结尾开头、以格式字符结尾的的格式说明格式说明,如,如%d、%x等,它们规定等,它们规定了相应表达式值的输出格式。了相应表达式值的输出格式。u另一类是普通字符。另一类是普通字符。 printf的一般形式为:的一般形式为:printf(格式控制,输出表列格式控制,输出表列);其中,格式控制其中,格式控制(转换控制字符串转换控制字符串)指明了希望的输出格式。指明了希望的输出格式。具体地说,它包含了具体地说,它包含了两类内容:两类内容:#include void main() int i=41,j=10; p
43、rintf(”sum=%d,diff=%x”,i+j,i-j); printf在输出时,把普通字符原样输出;在输出时,把普通字符原样输出;当遇到格式说明时,会把相应输出表列当遇到格式说明时,会把相应输出表列按格式说明要求的格式,放置在该格式按格式说明要求的格式,放置在该格式说明的位置上,并替代它。说明的位置上,并替代它。输出结果为:输出结果为:sum=51,diff=1f 4.5 格式输入与输出 %d,id,i: :以带符号的十进制形式输出整数以带符号的十进制形式输出整数%c:%c:以字符形式输出,只输出一个字符以字符形式输出,只输出一个字符%s:%s:输出字符串输出字符串%f:%f:以小数形
44、式输出单,双精度数,隐以小数形式输出单,双精度数,隐含输出六位小数含输出六位小数(1)格式符。格式符。几种用法:几种用法: : :按十进制整型数据的实际长度输出。按十进制整型数据的实际长度输出。 : :为指定的输出字段的宽度。如果数据的位数为指定的输出字段的宽度。如果数据的位数小于,则左端补以空格,若大于,则按实际位数输出。小于,则左端补以空格,若大于,则按实际位数输出。 例例: : (,),); ; 若,若,b b,则输出结果为,则输出结果为 ,(7)(7)格式符。格式符。有以下几种用法:有以下几种用法: 。不指定字段宽度,由系统自动指定字段宽度,。不指定字段宽度,由系统自动指定字段宽度,使
45、整数部分全部输出,并输出位小数。使整数部分全部输出,并输出位小数。. .。指定输出的数据共占列,其中有位小。指定输出的数据共占列,其中有位小数。如果数值长度小于,则左端补空格。数。如果数值长度小于,则左端补空格。. .与与. .基本相同,只是使输出的数值基本相同,只是使输出的数值向左端靠,右端补空格。向左端靠,右端补空格。 例例4.8 4.8 输出实数时指定小数位数。输出实数时指定小数位数。#include void main() float f=123.456; printf(“%f %10f %10.2f %.2f %-10.2fn”,f,f,f,f,f);123.456000 123.4
46、56000 123.45 123.45 123.45格式输入函数格式输入函数scanf 可以调用可以调用scanf函数,从键盘上为各类型的变量输函数,从键盘上为各类型的变量输入数据。例如,入数据。例如,scanf(“%d%f”,&month,&money);函数作用:按照变量在内存的地址将变量值存进去。函数作用:按照变量在内存的地址将变量值存进去。一般格式:一般格式:scanfscanf(格式控制,地址表列)(格式控制,地址表列) 使用函数时应注意的问题使用函数时应注意的问题 : :(1)(1)函数中的函数中的“格式控制格式控制”后面应当是变量地址,而后面应当是变量地址,而不应
47、是变量名。不应是变量名。 (2) (2) 如果在如果在“格式控制格式控制”字符串中除了格式说明以外还有其他字字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。符,则在输入数据时在对应位置应输入与这些字符相同的字符。 (3) (3) 在用在用“”格式输入字符时,空格字符和格式输入字符时,空格字符和“转义字符转义字符”都作都作为有效字符输入为有效字符输入 (4)(4) 在输入数据时,遇以下情况时认为该数据结束。在输入数据时,遇以下情况时认为该数据结束。 遇空格,或按遇空格,或按“回车回车”或或“跳格跳格”(TabTab)键;)键; 按指定的宽度结束,如按指定
48、的宽度结束,如“”,只取列;,只取列; 遇非法输入。遇非法输入。输入数据时不能规定精度。输入数据时不能规定精度。scanf(“%7.2f”,&a);scanf(“%7.2f”,&a);介绍在编写程序时,常用技术手段。1 1在从键盘输入信息时,应加以提示。在从键盘输入信息时,应加以提示。 int student_ID; scanf(”%d”,&student_ID); 2 2学会交换两个变量的值。学会交换两个变量的值。 int a=3,b=5,t;printf(”Please input Student ID:”);提示信息提示信息t=a;a=b;b=t;第第5章章 选择
49、结构程序设计选择结构程序设计 5.1 关系运算符和关系表达式关系运算符和关系表达式关系运算符都是双目运算符,用于将两个操作数进行比较关系运算符都是双目运算符,用于将两个操作数进行比较1.1.关系运算符及其优先次序关系运算符及其优先次序1.1. ( (小于小于) )2.2. = ( ( (大于大于) )4.4. = (= (大于或等于大于或等于) )5.5. = (= (等于等于) )6.6. != (!= (不等于不等于) )优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)说明:说明:关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算
50、符关系运算符的优先级高于赋值运算符2.2.关系表达式关系表达式用关系运算符将两个表达式(可以是算术表达式用关系运算符将两个表达式(可以是算术表达式 或关系表达式,逻辑表达式,赋值表达式,字符或关系表达式,逻辑表达式,赋值表达式,字符 表达式)接起来的式子,称关系表达式表达式)接起来的式子,称关系表达式例:例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值为的值为“真真”,表达式的值为,表达式的值为1。 在优先级方面,在优先级方面,=,b=c 等价于等价于 (ab)=c而且若定义而且若定义 int a=1,b=2,c=3;则该表达式的值为则该表达式的值为0。因此,若定义因此,若定义
51、 int a=1,b=2,c=3,f;那么表达式那么表达式 f=ab+c 的值为的值为0。f=a5f=00 在结合性方面,关系运算符在结合性方面,关系运算符的结合方向是从左至右。的结合方向是从左至右。由此可以看出,虽然由此可以看出,虽然b的值大于的值大于a小于小于c,但表达式,但表达式 a=b=c 并不反映这一并不反映这一结果。结果。实际上,要想正确描述实际上,要想正确描述“b的值大于等于的值大于等于a小于等于小于等于c”这个条件,应这个条件,应采用逻辑表达式采用逻辑表达式 (a=b)&(b=c) 。因此,因此,a=b=c 等价于等价于 (a=b)=c而且若定义而且若定义 int a=
52、-3,b=-2,c=-1;则该表达式的值为则该表达式的值为0。5.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 逻辑运算符共有逻辑运算符共有3种:种: ! :逻辑非运算符,它是一个单目运算符,例如,:逻辑非运算符,它是一个单目运算符,例如, !a 其作用是颠倒真假。若其作用是颠倒真假。若a的值为真,则的值为真,则!a的值为假;反之亦然。的值为假;反之亦然。 & :逻辑与运算符,它是一个双目运算符,例如,:逻辑与运算符,它是一个双目运算符,例如, a&b 其运算规则是,只有其运算规则是,只有a和和b的值全为真时,的值全为真时,a&b的值才为真。的值才为真。 | :逻辑
53、或运算符,它是一个双目运算符,例如,:逻辑或运算符,它是一个双目运算符,例如, a|b 其运算结果是,只要其运算结果是,只要a和和b的值有一个为真,的值有一个为真,a|b的值就为真。的值就为真。 逻辑表达式就是用逻辑运算符把操作数连接起来的、符合逻辑表达式就是用逻辑运算符把操作数连接起来的、符合C语法规则的式子。语法规则的式子。在在C语言中,语言中,逻辑逻辑表达式的值只有真和假表达式的值只有真和假两个结果,真用两个结果,真用 1 表示,假用表示,假用0 表示;相应地,表示;相应地,逻辑逻辑表达表达式的类型为式的类型为 int 型。型。 例如,对于逻辑表达式例如,对于逻辑表达式 (a=b)&am
54、p;(b=c) 若若b介于介于a、c之间,则其值为之间,则其值为 1。否则,其值为。否则,其值为 0。因此,要想判断因此,要想判断b的值是否介于的值是否介于a、c之间,可以使用该逻辑表达式。之间,可以使用该逻辑表达式。逻辑运算符的优先级和结合性优先级优先级结合方向结合方向! 高高自右至左自右至左算术运算符算术运算符自左至右自左至右关系运算符关系运算符自左至右自左至右&自左至右自左至右|自左至右自左至右赋值运算符赋值运算符 低低自右至左自右至左关于逻辑运算符的优先级和结合方向,关于逻辑运算符的优先级和结合方向,如右表所示。如右表所示。例例1, (a=b)&(b=c)等价于等价于a
55、=b & b=c例例2,!(x=3)并不等价于并不等价于!x3&83&84-!0 1&0逻辑值为逻辑值为083逻辑值为逻辑值为1表达式值为表达式值为01 1在在C C语言中,任何一个非零数据,都被认为是语言中,任何一个非零数据,都被认为是真真的。的。假若假若a=2,b=3, !a 的值为的值为0。 a&b 的值为的值为1。 4&0|2 的值为的值为1。 !0 的值为的值为1 a&b 的值为的值为1 5.3 if语句语句例如,例如, if(x0)y=x+2; C语言提供了3种形式的if语句。1. if(表达式表达式)语句语句1 表达式表达式
56、语句语句1真真假假 这种这种if语句的作用是,若表达语句的作用是,若表达式的值为真,则执行语句式的值为真,则执行语句1;否则,;否则,什么也不做。什么也不做。其中,语句其中,语句1被称为被称为if语句的内嵌语句的内嵌语句,内嵌语句既可以是单个语句,语句,内嵌语句既可以是单个语句,也可以是复合语句。也可以是复合语句。 if(x!=2) y+; x+=3; 再次强调,如果在表达式为真再次强调,如果在表达式为真时,希望执行多条语句,必须将这时,希望执行多条语句,必须将这些语句用花括号括起来,构成复合些语句用花括号括起来,构成复合语句。语句。if(score=60) printf(nPassed);
57、printf(nYeah!“);例如,例如,if (xy) printf(“%d”,x);else printf(“%d”,y); if(x3|x=90)putchar(A); else if(g=80)putchar(B); else if(g=70)putchar(C); else if(g=60)putchar(D); else putchar(E);3. if(表达式表达式1)语句语句1 else if(表达式表达式2)语句语句2 else if(表达式表达式m)语句语句m else 语句语句n 表达式表达式1真真假假语句语句1表达式表达式2语句语句2真真假假表达式表达式3语句语句3真
58、真表达式表达式m语句语句m语句语句n假假假假真真流程图流程图说明:(1)3种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式。(2)第二,第三种形式的if语句中,在每个 else前面有一个分号,整个语句结束处有一个分号。(3)在if和else后面可以只含有一个内嵌的操 作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。if语句的嵌套在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句称为语句称为ifif语句的嵌套。语句的嵌套。其一般形式如下所示,其执行过程遵循其一般形式如下所示,其执行过程遵循ifif的语句执行过的语句执行过程。程。i
59、f(表达式表达式1) if(表达式表达式2)语句语句1 else 语句语句2else if(表达式表达式3)语句语句3 else 语句语句4 注意注意:C系统在处理嵌套的系统在处理嵌套的if语句时,语句时,会把会把else子句子句与它上面的、最近的、未配对的与它上面的、最近的、未配对的if结合结合。 假设某人按右边的模式写了一段程序,假设某人按右边的模式写了一段程序,他本来的目的是,若表达式他本来的目的是,若表达式1的值为真,则执的值为真,则执行内嵌的行内嵌的if语句,否则执行语句语句,否则执行语句2。 if(表达式表达式1) if(表达式表达式2)语句语句1else 语句语句2 但是,但是,
60、C系统按照上面的原则,会认为红系统按照上面的原则,会认为红色的是配对的,是一个内嵌的色的是配对的,是一个内嵌的if语句。语句。 这样一来,若表达式这样一来,若表达式1的值为假,并不执的值为假,并不执行语句行语句2,而是什么也不做,造成了与程序,而是什么也不做,造成了与程序员的出发点不符。员的出发点不符。 if(表达式表达式1) if(表达式表达式2)语句语句1else 语句语句2为了避免出现类似错误,可以采取两种手段之一。为了避免出现类似错误,可以采取两种手段之一。给内嵌的给内嵌的if语句加语句加 ,明确内嵌的,明确内嵌的if语句的范围。语句的范围。if(表达式表达式1) if(表达式表达式2)语句语句1else 语句语句2给内嵌的给内嵌的if语句添加语句添加else子句。子句。if(表达式表达式1) if(表达式表达式2)语句语句1 else ;e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【知识清单】初中地理七年级上册地球运动课时二:地球公转与昼夜季节
- 小学五年级科学《斜坡的启示》教学设计-苏教版五年级上册第16课
- 高三化学工艺流程题认知建构与原料预处理教学设计
- 小学五年级综合实践活动《技术与创新·创新并不神秘》教学设计
- 高中信息技术选修三第一学期《网海寻珠-因特网信息检索》教学设计
- 小学五年级科学上册《各种各样的工具》教学设计
- 小学三年级科学地球的兄弟姐妹比较探究教学设计
- 高中一年级劳动技术生津止渴炝拌什锦教学设计
- 高中信息技术必修教案:信息集成的一般过程
- 【知识清单】初中地理八年级下册·长江经济带的协同发展
- 冯谖客孟尝君二
- 2024年泸州市兴泸水务(集团)股份有限公司招聘笔试冲刺题(带答案解析)
- 美驰电驱卡车桥专利结构解析-2023-05-技术资料
- 新人教版小学数学六年级上册单元测试卷(全册)
- 《Baby》Justin-Bieber版歌词完整版打印下载打印
- 10kV~500kV输变电及配电工程质量验收与评定标准:01输电线路工程
- 城市轨道交通车站设备(高职)PPT完整全套教学课件
- 润滑油基础油的加氢法生产工艺课件
- 饲料和饲料添加剂生产企业从业人员法规考核试题
- 烘干设备购销合同
- 某年中石油俄语水平考试试题
评论
0/150
提交评论