c++第2,3章综述_第1页
c++第2,3章综述_第2页
c++第2,3章综述_第3页
c++第2,3章综述_第4页
c++第2,3章综述_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础(程序设计基础(C C语言)语言)第第2 2章章 基本数据类型、常量与变量、运算符与表达式基本数据类型、常量与变量、运算符与表达式第第2 2章章 基本数据类型、运算符与表达式基本数据类型、运算符与表达式 2.1 数据类型概述 2.2 常量与变量 2.3 基本数据类型 2.4 运算符和表达式 2.5 类型转换 基本整型(int) 4 短整型 (short) 2 整型 长整型 (long) 4 无符号型(unsigned) 基本类型 单精度型(float) 4 实型(浮点型) 双精度型(double) 8 长双精度型(long double) 16 字符型(char) 1数据类型 枚举

2、(enum) 空类型(void) 指针 数组 构造类型 结构体(struct) 共用体(union) 2.1 数据类型概述2.2 2.2 常量与变量常量与变量2.2.1 2.2.1 常量常量 常量常量是指在程序运行过程中其值不能被改变的量。是指在程序运行过程中其值不能被改变的量。 常量有两种类型:一种称为直接常量也称为常量有两种类型:一种称为直接常量也称为值常量值常量,如,如1212、15.615.6;一种称为一种称为符号常量符号常量,符号常量需要明确定义。,符号常量需要明确定义。 C C语言中常量可以是常数语言中常量可以是常数( (值常量值常量) ),也可以是代表固定不变的值,也可以是代表固

3、定不变的值的名字的名字。 C C语言用语言用#define#define来定义符号常量(也称为宏)。还可以用来定义符号常量(也称为宏)。还可以用constconst来定义常量,其实来定义常量,其实constconst 定义的是变量,但在整个作用域中其值定义的是变量,但在整个作用域中其值不能发生改变。不能发生改变。 使用使用“#define#define”命令的缺点是无法指定常量的数据类型,因此命令的缺点是无法指定常量的数据类型,因此建议在建议在C C 程序中使用程序中使用constconst变量取代宏常量。变量取代宏常量。2.2.1 2.2.1 常量与符号常量常量与符号常量1 1使用使用con

4、stconst声明符号常量声明符号常量 const 数据类型数据类型 符号常量名符号常量名= =初始值初始值; 例如:例如:const int PRICE = 850 ; const double PI; PI=3.1415926; /error const double PI=; /error const int M=max(15,23); /error 2 2使用使用#define #define 命令声明符号常量命令声明符号常量 #define 符号常量名符号常量名 初始值初始值 例如:例如:#define PI 3.1415926符号常量最好用符号常量最好用大写字母大写字母来命名,以区

5、别一般的变量。来命名,以区别一般的变量。用来存放数据且其值可以改变的量称为用来存放数据且其值可以改变的量称为变量变量。变量有三个基本要素:变量有三个基本要素:名字名字、类型类型和和值值。C语言程序设计中,在使用变量前必须语言程序设计中,在使用变量前必须首先定首先定义变量义变量,即指定变量的,即指定变量的名称名称与与数据类型数据类型。变量一经。变量一经定义,系统根据其数据类型在内存中为该变量分配定义,系统根据其数据类型在内存中为该变量分配一定的存储单元,在该存储单元中可存放变量的一定的存储单元,在该存储单元中可存放变量的值值。变量名可以代表存储单元的地址。变量名可以代表存储单元的地址。2.2.2

6、 变 量 1 1、变量的定义、变量的定义一般格式为一般格式为: : 说明说明:(:(1)1)变量名表变量名表:可以包含若干个变量,彼此间用:可以包含若干个变量,彼此间用 逗号逗号分开。分开。变量名必须是合法的标识符变量名必须是合法的标识符。 (2)(2)数据类型数据类型:变量可以被定义为基本数据类型:变量可以被定义为基本数据类型 和构造类型。和构造类型。 例如:例如: int x ; float area,width,length ; 2.2.2 变 量2.2.2 变 量2 2、变量的初始化、变量的初始化 在定义变量的同时在定义变量的同时, ,给变量赋以一定的初始值给变量赋以一定的初始值 ,称

7、为,称为初始化变量。初始化变量。int x = 3, y = 4, z = 5;char ch1 = A, ch2, ch3 = a; 1.整型2.实型(浮点型)3.字符型2.3 基本数据类型2.3.1 2.3.1 整整 型型1.1.整型常量的表示整型常量的表示(1)(1)非非0 0开头的,开头的,以以0 0至至9 9数字、数字、正负号正负号组成的常数,如组成的常数,如12341234,-10-10为合法十进制整常数,为合法十进制整常数,而而123.0123.0,1.23E+21.23E+2是非法的十进制整常数。是非法的十进制整常数。(2)(2)以以0 0开头的,开头的,由由0 0至至7 7数

8、字组成的数数字组成的数字串,字串,不能带符号不能带符号,如,如0123401234,010010为合法八进制为合法八进制整常数,而整常数,而12341234,028028则是非法的八进制整常数。则是非法的八进制整常数。(3)(3)以以0 x(0 x(或或0X)0X)开头的开头的, ,由由0 0至至9 9数字和数字和a a至至f(f(或或A A至至F)F)字符组成字符组成, ,不能带符号,如不能带符号,如0 x100 x10,0 x2f0 x2f,0 xa0 xa为合法的为合法的十六进制整常数,而十六进制整常数,而1212,0 xgf0 xgf,20H20H是非法的十六进制整常是非法的十六进制整

9、常数。数。注意:注意:C C语言中,十进制数有正负之分,但八进制和十六进制语言中,十进制数有正负之分,但八进制和十六进制数只能表示无符号整数,一般用来表示存储单元地址。数只能表示无符号整数,一般用来表示存储单元地址。 v以下选项中可以作为以下选项中可以作为C C语言合法整数的是语言合法整数的是 。 A) 10110B B) 0368 C) 0Xffa D) x2a22.3.1 整 型2.3.1 整 型2.2.整型变量的分类整型变量的分类(1) signed:表示有符号数:表示有符号数(可缺省,可缺省,int型型); (2) unsighed:表示无符号数:表示无符号数 (unsigned in

10、t型型);(3) long:表示长型:表示长型( long int 型和型和unsigned long 型型);(4) short:表示短型:表示短型( short int 型和型和unsigned short 型型) ;例如例如: signed int a; 等价于等价于 int a; unsigned int a; 等价于等价于 unsigned a; long int a; 等价于等价于 long a; short int a; 等价于等价于 short a; 1. 1.基本整型基本整型int是在给定机器上具有一定长度的整数,通是在给定机器上具有一定长度的整数,通常占用一个常占用一个机器

11、字长机器字长,大多数计算机为,大多数计算机为3232位机,机器字长为位机,机器字长为4 4个字节个字节。long int通常也占用通常也占用4 4个字节个字节,因此,因此int、long int表示表示的数值范围比较大;的数值范围比较大;short int 占用占用2 2个字节个字节,因此表示的数,因此表示的数值范围比较小(如表值范围比较小(如表2.12.1)。)。 2. 2. 在十进制、八进制和十六进制表示的整常数中,若在十进制、八进制和十六进制表示的整常数中,若数字串的后面加上字母数字串的后面加上字母l(l(或或L)L),则说明该常数为长整数,如,则说明该常数为长整数,如1212L L,0

12、27027l l,0 xa10 xa1L L,0 x9F0 x9FL L。若数字串的后面加上字母。若数字串的后面加上字母u(u(或或U)U),则说明该常数为无符号整数,如,则说明该常数为无符号整数,如5 5U U。2.3.1 整 型/*功能:显示输出各种整型变量所占的字节数功能:显示输出各种整型变量所占的字节数 */#include /*编译预处理命令编译预处理命令*/ main() printf(number of bytes in int is:%dn, sizeof(int); printf(number of bytes in long is:%dn, sizeof(long);pri

13、ntf(number of bytes in short is:%dn, sizeof(short);2.3.1 整 型1.1.实型常量表示法实型常量表示法(1)(1)由由、和和组成的常数,如果为纯小数可以组成的常数,如果为纯小数可以省去整数部分,只保留小数部分,但绝对不能没有小数点。如省去整数部分,只保留小数部分,但绝对不能没有小数点。如2.552.55,0.00.0,-12.3-12.3,.234.234,250.250.等都是合法的。等都是合法的。(2)(2)在小数表示法后加在小数表示法后加e e(或(或E E)及指数部分。)及指数部分。:必须必须要有要有,且,且的指数必须为的指数必须为

14、,指数部分,指数部分。2.3.2 实 型以下不符合C语言语法的实型常量是( ) A. 1.2E0.5 B. 3.14159E C. .5E-3 D. E15c2.2.实型变量的分类实型变量的分类 (1)单精度型:单精度型:float型型; (数据长度为数据长度为4个字节个字节) (2)双精度型:双精度型:double型型; (数据长度为数据长度为8个字节个字节) (3)扩展双精度型:扩展双精度型:long double型型; (数据长度为数据长度为16个字节个字节)2.3.2 实 型2.2.实型变量的分类实型变量的分类 1. 1. 在在C C语言中,一个实型常数如果没有任何说明,则表语言中,一

15、个实型常数如果没有任何说明,则表示示型(默认型),如:型(默认型),如:12.3。 2. 2. 若要表示若要表示型数,则必须在实型数后面加上型数,则必须在实型数后面加上,如:如:12.3f,12.3e4F。 3. 3. 若要表示若要表示型数,则必须在实数后加上型数,则必须在实数后加上,如:,如:12.3L,12.3e4L。 v 字符型数据就是那些用来表示英文字母、符号、数字等字符型数据就是那些用来表示英文字母、符号、数字等的数据。的数据。v 字符型数据类型关键字是字符型数据类型关键字是charchar。字符型数据在内存中存。字符型数据在内存中存储的是它的储的是它的ASCIIASCII值,占用值

16、,占用1 1个字节(个字节(8 8位)的内存单元。位)的内存单元。 1. 1. 字符型常量字符型常量 2. 2. 字符串常量字符串常量char 例如:例如: char c; 2.3.3 字符型1.1.字符型常量字符型常量(1)(1)用用括起来的括起来的,其值为其值为ASCII代码值。如代码值。如a, A, #, $。 在内存中,字符数据是以在内存中,字符数据是以ASCII码值存储的(即以整数码值存储的(即以整数表示),表示),。因此。因此C C语言使字符数据和整型数据语言使字符数据和整型数据之间可以通用。之间可以通用。 如:如:A=65=0101=0 x41=01000001 a=97=014

17、1=0 x61=01100001 0=48=060=0 x30 1=49=061=0 x31A 和和a 是是不同的字符不同的字符常量,常量,0和和 0是截然不同是截然不同的两个数的两个数2.3.3 字符型(2)(2)无法直接输入的字符以及某些特殊字符,可无法直接输入的字符以及某些特殊字符,可以用字符的以用字符的ASCIIASCII码表示,即用反斜符()开头,后跟码表示,即用反斜符()开头,后跟字符的字符的ASCIIASCII码值或助记符,这种方法也称为转义序列表码值或助记符,这种方法也称为转义序列表示法。常用于表示示法。常用于表示ASCII字符集中字符集中控制代码控制代码及某些及某些特殊字特殊

18、字符符, ,也也占据一个字节占据一个字节。常用的转义字符如表。常用的转义字符如表2-42-4。 用字符的八进制用字符的八进制ASCIIASCII码码,表示为:,表示为:dddddd,dddddd是八进制是八进制值。值。 用字符的十六进制用字符的十六进制ASCIIASCII码码,表示:,表示:xhhxhh,hhhh是两位十是两位十六进制值。六进制值。例如:例如:A ,101 和和 x41都表示同一个字符常量。都表示同一个字符常量。下面的代码,响铃的同时输出一个字符串。下面的代码,响铃的同时输出一个字符串。 printf(“aoperatingtsystem ok!n”);其输出内容为:在响铃的同

19、时显示其输出内容为:在响铃的同时显示operating system ok!2.3.3 字符型2.2.字符串常量字符串常量是用一对是用一对括起来的括起来的。 如如“a”,“a”, “123”, “How do you do ?n”,“¥1.23”等都是字符串常量。字符串中可以出等都是字符串常量。字符串中可以出现空格、转义序列或其他字符,也可以包含现空格、转义序列或其他字符,也可以包含C C语言以外的语言以外的字符,如汉字等。字符,如汉字等。 2.3.3 字符型 字符串常量和字符常量的字符串常量和字符常量的区别区别为:为: (1 1)字符串是用一个一维字符数组来存放的,而字)字符串是用一个一维字

20、符数组来存放的,而字符符 常量可用一个字符型变量存放。常量可用一个字符型变量存放。 char chchar ch; ch = a;ch = a;/ / 正确正确 ch = “a”;ch = “a”;/ / 错误错误 (2 2)字符型常量用单引号括起,而字符串常量用双)字符型常量用单引号括起,而字符串常量用双引号括起。表现形式不同:引号括起。表现形式不同:“ “ x ”x ”, x x 2.3.3 字符型 (3 3)一个字符常量被存放在内存中只占一个字节,而字符)一个字符常量被存放在内存中只占一个字节,而字符串常量要占多个字节。串常量要占多个字节。例,例,aa仅占一个字节,用来存放字符仅占一个字

21、节,用来存放字符a a的的ASCIIASCII码;而码;而“a”a”却占两个字节。却占两个字节。(4 4)字符常量与字符串常量的操作功能也不相同。)字符常量与字符串常量的操作功能也不相同。字符常量具有加法和减法运算,字符串常量不具有。字符字符常量具有加法和减法运算,字符串常量不具有。字符常量可以在一定范围与整数进行加减运算。如常量可以在一定范围与整数进行加减运算。如 r-r-a+3 a+3 是合法的,而是合法的,而 “ “r”-“a”+3 r”-“a”+3 是非法的。是非法的。 字符串常量中的字符连续存储,并在最后加上字符字符串常量中的字符连续存储,并在最后加上字符 作为作为。例如字符串。例如

22、字符串“HELLO”在内存中占在内存中占连续连续6个内存单元,如图:个内存单元,如图: H E L L O 0 2.3.3 字符型2.4 运算符与表达式v 运算符:运算符:单目运算符、双目运算符和三目运算符。单目运算符、双目运算符和三目运算符。 v 表达式:表达式:用运算符将变量和常量连接起来符合用运算符将变量和常量连接起来符合C C的语法规的语法规则的式子称为则的式子称为表达式表达式,其目的是用来说明一个计算过程。,其目的是用来说明一个计算过程。表达式总是表达式总是有值有值的。的。v 运算符的优先级与结合性:运算符的优先级与结合性:其决定了一个表达式的其决定了一个表达式的求值顺求值顺序序。

23、优先级优先级别别高高的运算符的运算符先先运算,运算,低低的的后后运算;运算; 运算符的运算符的结合性结合性体现了运算符对其操作数进行运算的体现了运算符对其操作数进行运算的方向方向,若运算符对其操作数,若运算符对其操作数从左向右从左向右进行规定的运算,进行规定的运算,称此运算符是称此运算符是左结合左结合,反之称其为,反之称其为右结合右结合。1. 1. 赋值运算符赋值运算符 “ “ = ”= ” 设置变量的值,是将一个数据赋给一个变量,即存入变量所对应的设置变量的值,是将一个数据赋给一个变量,即存入变量所对应的存储空间存储空间( (更新变量的值更新变量的值) )。 “=”是双目运算符。是双目运算符

24、。“=”左边是待赋值的变量,称为左值;右边左边是待赋值的变量,称为左值;右边是要赋的值,称为右值。赋值运算符的是要赋的值,称为右值。赋值运算符的结合性结合性:右结合。:右结合。 (如(如:a=b=3a=b=3* *5 5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/)。)。v 注意:左值必须能够被修改,不能是常量。一般情况下,左值是一个变注意:左值必须能够被修改,不能是常量。一般情况下,左值是一个变量。量。例如: int a; /int a; /* *变量声明语句变量声明语句* */ / a=3; / a=3; /* *赋值语句赋值语句* */ /2.4.1 赋值运算符和赋值表达

25、式 1算术运算符算术运算符v C C语言提供的算术运算符包括:加(语言提供的算术运算符包括:加(+ +)、减()、减(- -)、乘)、乘(* *)、除()、除(/ /)和取余()和取余(% %)。利用算术运算符连接起来的)。利用算术运算符连接起来的式子称为算术表达式。式子称为算术表达式。v 取余运算:取余运算:是针对是针对整数整数的运算,即取整数除法后的余数,的运算,即取整数除法后的余数,余数的符号和被除数的符号相同余数的符号和被除数的符号相同。两个操作数要求均为整。两个操作数要求均为整型或字符型型或字符型 。 如如:8%3:8%3的运算结果为的运算结果为2 2, 9%129%12的运算结果为

26、的运算结果为9 9, -13%5-13%5运算结果为运算结果为-3-3,13%(-5)13%(-5)运算结果为运算结果为3 3, 12%212%2运算结果为运算结果为0 0,a %2a %2运算结果为运算结果为1 1。对任意一个整数对任意一个整数x:若若 x%2=0,则,则 x为偶数;为偶数;若若 x%2=1,则,则 x为奇数。为奇数。注意:注意:/和和%的区别的区别:/ 运算符可以对整型、字符运算符可以对整型、字符型和实型数据进行操作。型和实型数据进行操作。两个整数相除其结果仍为整两个整数相除其结果仍为整数(即舍去小数部分),例如:数(即舍去小数部分),例如:13/10的结果为的结果为1;而

27、;而%只只能对整型和字符型数据进行操作,如果对浮点数能对整型和字符型数据进行操作,如果对浮点数操作,则会引起其编译错误。操作,则会引起其编译错误。2.4.2 算术运算符和算术表达式算术表达式v算术表达式 例1:设 int b=7;float a=2.5,c=4.7; 求表达式的值a+(int)(b/3*(int)(a+c)/2)%4 例2:tddbfa24121f/4f*a*f*f /(b*(d/(2+d))/t)&【例】数据溢出举例。【例】数据溢出举例。 #include int main() short i,j,m,n; i=1000; j=1000; m=i+j; n=i*j;

28、printf(“ m= %dn”,m); printf(“ n= %dn”,n); return(0);运行结果是:运行结果是:m=2000n=169602.4.2 算术运算符和算术表达式2. 自增、自减运算自增、自减运算运算符的作用对象是变量,其功能是使变量的值增1或减1, 自增、自减运算有以下四种情况:u i+:使用i之后,i的值加1,即先取值,后自加;等价于i=i+1。u +i:使i加1,然后使用i,即先自加,后取值; 等价于i=i+1。 u i- - : 使用i之后,i的值减1,即先取值,后自减;等价于i=i-1。u - -i : 使i减1,然后使用i,即先自减,后取值;等价于i=i-

29、1。 2.4.2 算术运算符和算术表达式自增/自减v计算过程 例1:设x=5 y=+x;/*先计算x=x+1,再执行y=x,结果x=5 ,y=6*/ y=x+;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/v问题:如何理解A+B ? C规定:自左向右取尽可能多的符号组成运算符&请分析下列各变量的值。设请分析下列各变量的值。设i,j 的初始值分别的初始值分别为为 i=3,j=4;依次执行依次执行如下语句后,如下语句后,i,j的值为的值为 多多少。少。 j=(i+)+j+i; (i= , j= ) j=+i+j+i; (i= , j= ) 410520课课 堂堂 练练 习习1关

30、系运算符关系运算符关系运算符又称比较运算符,关系运算实际上是比较大小的运算。C语言提供了6种关系运算符。 运算符说明结合性优先级小于左结合这些关系运算符的优先级相同,但比下面的两个要高小于等于(注意,和=之间没有空格)左结合等于(注意,=和=之间没有空格)左结合这些关系运算符的优先级相同,但比上面的四个要低不等于(注意,!和=之间没有空格)左结合2.4.3 关系运算符和关系表达式2.2.关系表达式关系表达式 用用关系运算符关系运算符将将两个表达式两个表达式连接起来的式子连接起来的式子, ,格式为格式为 表达式表达式1 1 关系运算符关系运算符 表达式表达式2 2例如:例如:ababab都是合法

31、的关系表达式都是合法的关系表达式说明:说明: (1)(1)关系表达式的关系表达式的值值( (boolbool) ): :成立成立 1 1 真真; ; 不成立不成立 0 0 假假 (2)(2)关系运算符两侧的关系运算符两侧的表达式表达式可以是可以是常量常量、变量变量和和表达式表达式 (3)(3)关系运算符的优先级低于算术运算符,而高于赋值运算符。关系运算符的优先级低于算术运算符,而高于赋值运算符。 x=5+(83); x=5+83; 2.4.3 关系运算符和关系表达式2.4.3 关系运算符和关系表达式: 等于等于(= = =)和赋值(和赋值(= =)是两个不同的操作。)是两个不同的操作。 等于等

32、于用于测试给定的两个操作数用于测试给定的两个操作数是否相等是否相等。例如例如:if if ( x ( x = = = = 999 ) printf999 ) printf(“x is 999n”x is 999n”); ; if if ( x ( x = = 999 ) printf999 ) printf(“x is 999n”x is 999n”); ;C C程序中,程序中,表达式都有值表达式都有值,赋值赋值运算符产生的值是运算符产生的值是所所赋的值赋的值( (任意值、任意值、0 0或非或非0)0),而关系运算符产生的值是比,而关系运算符产生的值是比较的结果,可能是较的结果,可能是0 0或

33、或1 1,即,即“假假”或或“真真”。假设基本整型变量假设基本整型变量i的初值为的初值为2,则表达式,则表达式i = = 3的值为的值为false(0),而表达式),而表达式i = 3的值为的值为3。 &请分析下列表达式的值请分析下列表达式的值 (a=3,b=2,c=1,f= -1) 。ab 表达式值:(表达式值:( ) c=ab ( )b+cb ( ; d= )(d=ab)!=b+f ( ; d= ) d=ab!=b+f ( ; d= )e=abc ( )11011010002.4.3 关系运算符和关系表达式1 1逻辑运算符逻辑运算符 C C语言提供了语言提供了3 3种逻辑运算符种逻

34、辑运算符 。 ! ! 逻辑非,单目运算符逻辑非,单目运算符 & 逻辑与,双目运算符逻辑与,双目运算符 | 逻辑或,双目运算符逻辑或,双目运算符 优先级优先级高低高低2.4.4 逻辑运算符和逻辑表达式2 2、逻辑表达式、逻辑表达式用逻辑运算符将操作数连接起来的式子称为用逻辑运算符将操作数连接起来的式子称为逻辑表逻辑表达式达式,用于表示复杂的,用于表示复杂的运算条件运算条件。 例如:例如: 数学不等式:数学不等式: C C语言逻辑表达式:语言逻辑表达式:逻辑表达式的值逻辑表达式的值: :0 0表示逻辑假,非表示逻辑假,非0 0表示逻辑真。其运算结果若为真,则表表示逻辑真。其运算结果若为真,

35、则表达式的值为达式的值为1 1,否则值为,否则值为0 0。00&x1或或x1|x -12.4.4 逻辑运算符和逻辑表达式 设的取值范围为设的取值范围为“-10-1010”10”时,不能写时,不能写成成“-10=x=10”-10=x=10”,应写成,应写成“-10=x & x=10” -10=x & xb)&(n=cd) ,当当a=1,b=2,c=3,d=4,m和和n的原值为的原值为1时,求出时,求出m、n和和表达式的值。表达式的值。(m=0, n=1,表达式的值为表达式的值为0)提示:提示:设计逻辑设计逻辑“与与” 运算,将最可能为运算,将最可能为“假假”的表达

36、式放在最的表达式放在最左侧左侧设计逻辑设计逻辑“或或”运算,将最可能为运算,将最可能为“真真”的表达式放在最左的表达式放在最左侧侧逻辑表达式v例题:设设int a=3,b=1, x=2, y=0; 问题:问题: (1) (y|b) & (y|a) 的运算结果为多少?的运算结果为多少? (2) y|b & y|a 的运算结果是多少?的运算结果是多少? (3)两个表达式在运算次序是否一致?)两个表达式在运算次序是否一致?2.4.4 逻辑运算符和逻辑表达式&请分析下列表达式的值。请分析下列表达式的值。&设设x=1,y=1 !x|y- - 表达式值表达式值: ( ) 4

37、&0|2 ( ) c&d ( ) 53&2|84&!5|109+!0 ( )11110/ 整个表达式的值为整个表达式的值为double类型的类型的10.0/整个条件表达式的值为整个条件表达式的值为9/这个条件表达式可求两个数中的大数这个条件表达式可求两个数中的大数条件运算符条件运算符是是C C中唯一的一个中唯一的一个三目三目运算符,该运算符由两运算符,该运算符由两个符号组成,即个符号组成,即“ “ ? ? ”和和“ “ : : ”。条件表达式条件表达式的一般的一般形式形式: : 表达式表达式1 1?表达式表达式2 2: :表达式表达式3 3 其运算规则为其运算规

38、则为:如果:如果表达式表达式1 1的值为的值为真真,则整个条件表达,则整个条件表达式的值就是式的值就是表达式表达式2 2的值,否则整个条件表达式的值是的值,否则整个条件表达式的值是表表达式达式3 3的值。例如,有如下条件表达式:的值。例如,有如下条件表达式: 46 ? 3 :9 4 6 ? 12.6 : 10 (ab) (ab)? ?a a: :b b2.4.5 条件运算符和条件表达式2.4.5 条件运算符和条件表达式如果有如下条件表达式:如果有如下条件表达式:ab?a:cd?c:d它相当于:它相当于: ( (ab)?a:(cd?c:d)若若a=1,b=2,c=3,d=4,则条件表达式的值为:

39、则条件表达式的值为:4 4条件运算符的结合性条件运算符的结合性:右结合。:右结合。优先级:优先级:高于赋值运算符,而低于逻辑、关系和算术运算高于赋值运算符,而低于逻辑、关系和算术运算符。符。如果有如下表达式如果有如下表达式: c=(: c=(ab)?a:(b+1); 它就可以写成:它就可以写成:c=c=ab?a:b+1;若若a=1,b=2,则整个表达式的值则整个表达式的值( (即即c c的值的值) )为:为:3 3注意:当多个条件表达式嵌套使用时,每个后续的注意:当多个条件表达式嵌套使用时,每个后续的“:”总与前面总与前面最近的、没有配对的最近的、没有配对的“?”相联系相联系例如:例如: xy

40、?x:zw?z:w 等同于等同于xy?x:(zw?z:w)2.4.5 条件运算符和条件表达式&【例例2.5 】程序要求用户输入一个字符,如果这个字符是】程序要求用户输入一个字符,如果这个字符是小写字母,将这个字符转换成大写字母,否则字符不变。小写字母,将这个字符转换成大写字母,否则字符不变。 #include int main( )v v char char chch; ;v printf(pleaseprintf(please input a character: ); input a character: ); v scanf(%c,&chscanf(%c,&ch)

41、; );v chch= =chch=a& =a& chch=z ? =z ? chch- a + A : - a + A : chch; ;v printf(Theprintf(The result is: % result is: %cncn, , chch); );v return 0; return 0;v 条件表达式v例题: int x=10,y=9; int a,b,c; a=(-x=y+)?-x:-y; b=x+; c=y;执行上述程序段后执行上述程序段后a,b,c的结果是?的结果是?分别为分别为8,8,10 逗号运算符逗号运算符是是C C语言提供的一种语言提供的一

42、种特殊运算符特殊运算符,其,其功能功能是是将表达式连接起来,将表达式连接起来,从左向右从左向右求解各个表达式求解各个表达式( (左结合性左结合性) ),而整个逗号表达式的值为而整个逗号表达式的值为最后最后求解的表达式的值,它的类求解的表达式的值,它的类型也是最后一个表达式的类型型也是最后一个表达式的类型 。因此,逗号运算符也称。因此,逗号运算符也称顺顺序求值运算符序求值运算符。逗号运算符的逗号运算符的优先级最低优先级最低。2.4.6 逗号运算符及逗号表达式一般形式:表达式1,表达式2, ,表达式n 按顺序计算表达式1,表达式2, 表达式n的值。 例如: int a,b,c; a=1, b=a+

43、2, c=b+3; 逗号表达式的值:是表达式n的值,这是语句所不能代替的。 例如: int a,b,c,d; d=(a=1,b=a+2,c=b+3); printf(“%dn”,d); 逗号表达式在逗号表达式在C程序中用途比较少,引入逗号表达式的目的程序中用途比较少,引入逗号表达式的目的是为了简化程序书写(代替几条语句),通常只用于是为了简化程序书写(代替几条语句),通常只用于for循环循环语句中语句中 。/*输出结果为输出结果为6*/2.4.6 逗号运算符及逗号表达式v 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位二进位组成的位串信息,按位完成指按位完成指定的运算定

44、的运算,得到位串信息的结果。位运算分为按位逻辑运算和移位运算。 2.4.7 位运算符运算符 含义 操作说明 结合性 优先级 按位取反 将操作数逐位取反 右结合 高 右移 左结合 & 按位与 0 & 0 = 0,0 & 1 = 0,1 & 0 = 0,1 & 1 = 1即有0得0,全1得1 左结合 低 按位异或0 0 = 0,1 1 = 0, 1 0 = 1, 0 1 = 1 相同为 0,相反为1。 左结合 |按位或0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1即有1得1,全0得0左结合 2.4.7 位运算符2.4.7

45、 位运算符注意:注意:v (1)上述6个逻辑运算符中,只有按位取反运算符是单目运算符,其余均为双目运算符。v (2)移位运算分为算术移位和逻辑移位,算术移位是带符号数的移位,而逻辑移位是不带符号数的移位。移位运算又分为左移运算和右移运算。具体采用逻辑移位还是算术移位取决于不同的计算机系统。逻辑移位运算均补0;而负数的补码算术左移补0,右移补1。u复合复合赋值运算符:赋值运算符:由由五个算术运算符五个算术运算符组成的组成的复合复合赋值运算符赋值运算符:+=+=、-=-=、* *= =、/=/=和和%=%=;由五个位运算符由五个位运算符组成的组成的复合复合赋值运算符赋值运算符:=、&=&a

46、mp;=、|=|=和和= = 。复合赋值运算符 由复合赋值运算符构成复合赋值表达式,一般形式为:由复合赋值运算符构成复合赋值表达式,一般形式为: V oper = E其中:其中:oper表示算术运算符,表示算术运算符,E是一个表达式,是一个表达式,V为变量。为变量。等价于等价于V = V oper E。例如:例如: c *= a 等价于等价于 c = c * a; a+=3 等价于等价于 a=a+3 a%=2 等价于等价于 a=a%2注意:注意: d %= a + b 等价于等价于 d = d % (a + b), 而不是而不是 d = d % a + b。 a*=x-y 等价于等价于 a=a*(x-y),而不是,而不是a=a*x-y复合赋值运算符2.5 类型转换2.5.1 自动类型转换自动类型转换 long double long double double float double float long long unsigned unsigned int int char ,char , shortshort 纵向箭头是纵向箭头是肯定要进行肯定要进行的转换的转换 纵向箭头是纵向箭头是肯定要进行肯定要进行的转换的转换 表示当运算表示当运算对象为不同类对象为不同类型时转换的方型时转换的方向向 高高低低

温馨提示

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

评论

0/150

提交评论