《c语言第2讲基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《c语言第2讲基本数据类型与表达式.ppt(49页珍藏版)》请在金锄头文库上搜索。
1、第第 2 2 讲讲 C C语言的基本数据类语言的基本数据类型与表达式型与表达式 2.1 C2.1 C语言的基本数据类型语言的基本数据类型 2.2 2.2 常量与变量常量与变量 2.3 2.3 运算符与表达式运算符与表达式 2.4 2.4 数据类型转换数据类型转换C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 字符字符型(型(charchar) 整型整型(short,int,long,unsignedshort,int,long,unsigned) 单精度型(单精度型(floatfloat) 实型实型 双精度型(双精度型(doubledouble) 枚举类型(枚
2、举类型(enumenum) 数组类型(数组类型( ) 构造类型构造类型 结构体类型(结构体类型(structstruct) 共用体类型(共用体类型(unionunion) 指针类型(指针类型(* *) 空类型(空类型(voidvoid)基本类型基本类型数据类型数据类型一、数据类型概述本讲中将对基本类型中的前三类进行介绍和学习。本讲中将对基本类型中的前三类进行介绍和学习。2.1 C2.1 C语言的基本数据类型语言的基本数据类型C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页变量:变量:指指以以标识符符为名字,其名字,其值可以改可以改变的量。的量。 在学习各种数据类
3、型之前,我们先简单了解一下常量常量和变量变量的概念。 常量常量:指在程序运行中指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。 变量变量 代表计算机内存中的某一存储空间,变量的类代表计算机内存中的某一存储空间,变量的类型决定了该存储空间的长度和其型决定了该存储空间的长度和其中存放中存放数据的编码方数据的编码方式及存储格式。式及存储格式。 变量的类型也决定了该存储空间中存放数据的数据变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。形式和取值范围。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 *八进制的数码范围为八进制的数码范围为07;0
4、18 *十六进制的十六进制的数码除了数字数码除了数字0 09 9外外, , 还使用英文字母还使用英文字母af(或或AF)表示表示1015。如:如:0x1e二、整型(采用定点整数的存储格式,只能表示纯整数)1 1、整型常量:整型常量: (1) (1) 十进制形式十进制形式: :与数学上的整数表示相同;与数学上的整数表示相同; 例如例如: 12, -100, 0: 12, -100, 0 (2) (2) 八进制形式八进制形式: :在数码前加数字在数码前加数字0 0; 例如例如: 012=1*8: 012=1*81 1+2*8+2*80 0=10(=10(十进制)十进制) (3) (3) 十六进制形
5、式十六进制形式: :在数码前加在数码前加0X0X(数字数字0和字母和字母X)。)。 例如例如: 0x12=1*16: 0x12=1*161 1+2*16+2*160 0=18(=18(十进制)十进制)C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 在在16位操作系统中,一般用字节表示一个位操作系统中,一般用字节表示一个int型变量,且型变量,且 long型(字节)型(字节)int型(字节)型(字节)short型(字节)。型(字节)。 在在VC+6.0环境中,用环境中,用4字节表示一个字节表示一个int型变量,且型变量,且 long型(字节)型(字节)int型(
6、型(4字节)字节)short型(字节)。型(字节)。 查看变量的字节数,即其长度,使用函数查看变量的字节数,即其长度,使用函数sizeof(类型名类型名) 2、整型变量的分类:整型变量的分类: 根据数据所占的存储长度的不同分为根据数据所占的存储长度的不同分为: :int、short、long;同样存储长度的数据又分同样存储长度的数据又分unsigned、signed; 故可组合出六种类型。故可组合出六种类型。3、整型变量的值域:整型变量的值域:由机器中数据的存储长度决定由机器中数据的存储长度决定C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2、实型变量的分类及
7、值域实型变量的分类及值域: 关键字关键字 字节数字节数 取值范围取值范围 精度精度( (位位) ) float float 4 3.4 4 3.41010-38 3.43.4101038 7 7 double double 8 1.7 8 1.71010-308 1.71.71010308 1515注意注意三、实型1 1、常量:常量:(1) (1) 十进制小数形式:十进制小数形式:由数字和小数点组成;由数字和小数点组成; 例如例如: 3.4, 4., .3: 3.4, 4., .3。(2) (2) 指数形式:指数形式:“十进制小数十进制小数”+ +“ e( e(或或E)E)”+ +“十进制数整
8、十进制数整数数”。 例如例如: 12.5e-6: 12.5e-6表示表示12.512.51010-6 。 小数点不能单独出现;小数点不能单独出现; 0.0. .0 .0 . . e e或或E E的两边必须有数,且其后面必须为整数;的两边必须有数,且其后面必须为整数; 如:如: 6E0.2 6E0.2 e5e5 C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 字符形式字符形式 功能功能 n n 换行换行 t t 横向跳格横向跳格 b b 退格退格 r r 回车回车 反斜杠字符反斜杠字符 单引号字符单引号字符 ddd 8 ddd 8进制数表示的进制数表示的ASCI
9、IASCII码对应的字符码对应的字符 xhh 16 xhh 16进制数表示的进制数表示的ASCIIASCII码对应的字符码对应的字符四、字符类型1 1、常量:常量: (1) (1) 用单引号括起来的一个字符;如:用单引号括起来的一个字符;如:A、 1、?等等。 注意注意 (1)(1)数值数值0 0、字符、字符0 、 字符字符0 的区别的区别 (2)大小写对应字母的大小写对应字母的ASCII值相差值相差32(A为为65,a为为97) (2) (2) 用单引号括起来的由反斜杠用单引号括起来的由反斜杠( ( ) )引导的转义字符。引导的转义字符。C语言程序设计C语言程序设计C语言程序设计C语言程序设
10、计上一页上一页下一页下一页4 4、字符串常量:字符串常量: 是用一对双引号括起来的字符序列。是用一对双引号括起来的字符序列。 注意:每个字符串的后面都有一个注意:每个字符串的后面都有一个00结束符。结束符。 如如 : “SHANGHAISHANGHAI”, “AbcdeFGHijkAbcdeFGHijk”, “How How are are youyou”。 注意注意(1)(1)a a与与“a a”的区别的区别(2)(2)strlenstrlen()()与与sizeofsizeof()()的区别的区别例如:字符例如:字符A A的的ASCIIASCII码为:码为: 65D65D(十进制)十进制)
11、=41H=41H(十六进制)十六进制)=101Q=101Q(八进制)八进制) 字符字符A A可以表示为可以表示为A A、x41x41、101101。2、字符型变量的分类:字符型变量的分类: char char 和和 unsigned charunsigned char;3 3、值域值域(字符型可参与数学运算,也可看成一种一字节的整型变量字符型可参与数学运算,也可看成一种一字节的整型变量) 每每个个字字符符型型数数据据在在内内存存中中占占一一个个字字节节;包包括括ASCIIASCII字字符符表表中的所有字符(可显示字符和非显示字符)。中的所有字符(可显示字符和非显示字符)。C语言程序设计C语言程
12、序设计C语言程序设计C语言程序设计上一页上一页下一页下一页一、常量与符号常量 常量常量是指在程序运行中是指在程序运行中,其数值不能被改变的量。其数值不能被改变的量。 常量常量又可分为直接常量和符号常量。又可分为直接常量和符号常量。2.2 2.2 常量与变量常量与变量C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 120 、 0120、 072; 0xFFFF、 0x1e; 120L, 200L ; 长整型常量长整型常量 3.14、 5.12E-6 ; a 、#、n、101 ; 099、12f、 0xg 、48EA ; E-6、6.4E+4.8; changsh
13、a 、+?ab ; 、p 、ab ;1、直接常量:直接常量:是在程序中直接引用的数据。是在程序中直接引用的数据。请请判判断断这这些些常常量量正正确确与与否否:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 定义形式定义形式: #define标识符标识符常量数据常量数据例如例如:#definePI3.14159 在程序预处理时,凡是出现标识符在程序预处理时,凡是出现标识符PI的地方都将用的地方都将用数据数据3.14159来替换。来替换。 如如: 2*2.3*PI就就等价于等价于 2*2.3*3.14159。 变量是指变量是指以以标识符符为名字,其名字,其值可以改
14、可以改变的量。的量。 变量代表计算机内存中的某一存储空间,该存储空间变量代表计算机内存中的某一存储空间,该存储空间 中存放中存放的数据就是变量的值。的数据就是变量的值。 在同一程序块中,在同一程序块中,变量变量不能被重复定义。不能被重复定义。 使用变量时必须使用变量时必须“先定义,后使用先定义,后使用”。 2、符号常量符号常量 是是用标用标识符来表示一个数据;识符来表示一个数据;在程序不能给它赋值。在程序不能给它赋值。二、 变量C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页1、定义形式:定义形式:类型标识符类型标识符 变量名变量名1 ,变量名变量名2,变量名变
15、量名3.; 自己设定,满足自己设定,满足标识符的规定。标识符的规定。如:如:int,int,float,charfloat,char;不可省;不可省2、变量初始化变量初始化 在在定义变量定义变量的同时给变量一个初始值的同时给变量一个初始值。 注意注意int a=5, b=3; int a=5, b=3; int a=b=c=3; int a=b=c=3; int a,b,c; a=b=c=3; int a,b,c; a=b=c=3; 例如例如: inta,b,c; floatx,y;charc1,c2;或或intc1,c2;定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。定义变量
16、就是在内存中划出一块相应类型的存储空间存放该变量的值。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 #include main main( ) int x int x,y y,z z,w w; /*/*定义定义x x,y y,z z,w w为整型变量为整型变量* */ / unsigned int k unsigned int k; /*/*定义定义k k为无符号整型变量为无符号整型变量* */ / x=10 x=10;y=-20y=-20;k=30k=30; z=x+kz=x+k;w=y+kw=y+k; printfprintf(“x+k=%dx+k=%d
17、,y+k=%dny+k=%dn”,z z,w w); ; 例例2-1:程序运行结果为:程序运行结果为: x+k=40x+k=40,y+k=10y+k=10 变量根据作用域的不同可分为变量根据作用域的不同可分为局部变量局部变量和和全局变量全局变量,根据存,根据存储方式的不同可分为储方式的不同可分为静态存储变量静态存储变量和和动态存储变量动态存储变量,这些我们将,这些我们将在后面详细介绍。在后面详细介绍。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页1、以下合法的字符型常量是、以下合法的字符型常量是 A x13 B 081 C 65 D n2、已知大写字母、已知大
18、写字母A的的ASCII码是码是65,小写字母,小写字母a的的ASCII码是码是97。以下不能将变量。以下不能将变量c中的大写字母转换为对应小写字母的语句是中的大写字母转换为对应小写字母的语句是 A c=(c-A)%26+a B c=c+32 C c=c-A+a D c=(A+c)%26-a3. 以下选项中,合法的一组以下选项中,合法的一组C语言数值常量是语言数值常量是A)028 B)12. C).177 D)0x8A .5e-3 0Xa23 4e1.5 10,000 .0xf 4.5e0 0abc 3.e54. 以下关于以下关于long、int和和short类型数据占用内存大小的叙述中正确的是
19、类型数据占用内存大小的叙述中正确的是A)均占均占4个字节个字节 B)根据数据的大小来决定所占内存的字节数根据数据的大小来决定所占内存的字节数C)由用户自己定义由用户自己定义D)由由C语言编译系统决定语言编译系统决定5. 以下选项中不属于字符常量的是以下选项中不属于字符常量的是A)CB)CC)xCCD)072C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页实验内容实验二实验二题目题目2 2:完成从键盘输入一个:完成从键盘输入一个1010以内的数字,在屏以内的数字,在屏幕上输出这个数字的幕上输出这个数字的3 3次方。次方。题目题目3 3:从键盘上输入两个数字,在屏幕
20、上输出这:从键盘上输入两个数字,在屏幕上输出这两个的加减乘除的结果。两个的加减乘除的结果。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 在数学里当多个运算符一起组成一个表达式时,我们规在数学里当多个运算符一起组成一个表达式时,我们规定了定了优先级优先级(先乘除后加减)和(先乘除后加减)和结合规则结合规则(从左至右)。(从左至右)。 同样,在同样,在C语言中,我们也规定了每个运算符的结合规语言中,我们也规定了每个运算符的结合规则及运算符之间的优先级。则及运算符之间的优先级。2.3 2.3 运算符与表达式运算符与表达式运算符:就是表示某种运算功能的符号。运算符:
21、就是表示某种运算功能的符号。 按操作功能运算符大致可分为:按操作功能运算符大致可分为:算术运算符、关系运算术运算符、关系运算符、逻辑运算符、赋值运算符、算符、逻辑运算符、赋值运算符、条件运算符、逗号运算条件运算符、逗号运算符以及符以及位运算符位运算符等。等。 表达式:是由操作数和运算符组成的序列。表达式:是由操作数和运算符组成的序列。 如:如:1+2*3-4 、 35-7 、a=b%2 等都是等都是C语言中的表达式。语言中的表达式。 下面分类介绍各种运算符:下面分类介绍各种运算符:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页%(%(取取余余) )( (注意:
22、取余运算的操作数只能是整数注意:取余运算的操作数只能是整数, ,结果的符号与被除数相同结果的符号与被除数相同) ) 一、一、 算术运算符和算术表达式算术运算符和算术表达式1 1、 运算符运算符 +(+(加加) ):3+43+4、 +3+3 -( -(减减) ):3-53-5、 -5-5 *( *(乘乘) ):3*53*5 /( /(除除) ):5/25/2、5.0/2 5.0/2 (注意,此二种形式,结果不同注意,此二种形式,结果不同)5%35%3的值为的值为2 2; -5%3-5%3的值为的值为-2-2;5%(-3)5%(-3)的值为的值为2 2; -5%(-3)-5%(-3)的值为的值为-
23、2-2;12.3%3 12.3%3 若若a%b a%b 的结果为的结果为0 0,则有,则有a a能被能被b b整除整除C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 2 2、算术表达式算术表达式 用算术运算符和括符将操作数连接起来的式子。用算术运算符和括符将操作数连接起来的式子。 优先级:()优先级:() * *、/ /、% +% +、- - 结合性:从左至右;结合性:从左至右; 表达式的值:表达式的值: 数值型数值型(int(int、longlong、unsignedunsigned、floatfloat、double)double);例如:例如: 已知:已
24、知: float a=2.0;float a=2.0; int b=6,c=3; int b=6,c=3; 求解:求解: a*b/c-1.5+a*b/c-1.5+a a+fabs(-5)=+fabs(-5)=?C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 float a=2.0;float a=2.0; int b =6,c =3; int b =6,c =3; a*b/c -1.5 +a*b/c -1.5 +a a +fabs(-5) +fabs(-5)12.012.0/3/354.0 4.0 - 1.5- 1.52.5 2.5 + 97(int)+ 97
25、(int)99.5 99.5 + 5+ 5104.5104.5思考思考 int a=1,b=2; 表达式表达式a/b+3的结果是多少?的结果是多少? double floatunsigned long long unsigned int int char,shortC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页等价于:等价于:j=i;i+; j=i;i+; 所以所以i i的值为的值为4 4,j j的值为的值为3 3等价于:等价于:i+;j=i; i+;j=i; 所以所以i i的值为的值为4 4,j j的值为的值为4 4(1) i=3;(1) i=3; j=i+
26、; j=i+; (2) i=3;(2) i=3; j=+i; j=+i;3 3、自增与自减运算符自增与自减运算符 (+ 、-) +i,-i+i,-i:使用之前使使用之前使i i的值增的值增1 1(或减(或减1 1);); i+,i-i+,i-:使用之后使使用之后使i i的值增的值增1 1(或减(或减1 1););分析下面几种情况中分析下面几种情况中i与与j的值:的值: 当当+、 -不与其他运算符混合使用时,不与其他运算符混合使用时,+i+i与与i+i+都等价于都等价于 i=i+1, -ii=i+1, -i与与i-i-都等价于都等价于 i=i-1i=i-1C语言程序设计C语言程序设计C语言程序设
27、计C语言程序设计上一页上一页下一页下一页 如:如:i = 2;i = 2; j = -i+; j = -i+; 求执行完这两句后求执行完这两句后i i与与j j的值分别是多少的值分别是多少 结合性:结合性:自右至左。自右至左。分析:分析:“+”与与”- -“是同优先级,且都高于是同优先级,且都高于“= =” 按结合规则,等价于:按结合规则,等价于:j=-(i+);j=-(i+); 结果:结果:i i的值为的值为3 3,j j的值为的值为-2-2。再看几个例子:再看几个例子:如:设如:设i=3i=3,k=(i+)+(i+) k=(i+)+(i+) k= i=k= i=设设a=3,b=(+a)+(
28、+a) b= a=a=3,b=(+a)+(+a) b= a=105C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页题盘练习题盘练习(1) 例题:例题:1-3。运算符。运算符/及及%的应用(函数的应用(函数fun的功能是:将两个两位数的正整数的功能是:将两个两位数的正整数a、b合合并形成一个整数放在并形成一个整数放在c中。合并的方式是:中。合并的方式是:将将a的十位数和个位数依次放在的十位数和个位数依次放在c数的千位和数的千位和十位上,十位上,b数的十位和个位数依次放在数的十位和个位数依次放在c数数的百位和个位上。)的百位和个位上。)(2) 作业:作业:2-3;3
29、-3;4-3;51-3;53-3;72-3;88-3; 4-2;5-2;注意:掌握两个数的输入方法!注意:掌握两个数的输入方法!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 1 1、6 6种关系运算符:种关系运算符: = = != = = != 2 2、关系表达式:关系表达式:用关系运算符将表达式连接起来的式子用关系运算符将表达式连接起来的式子 优先级优先级: ( = )( = ) ( = != )( = != ) 结合性结合性:自左至右;:自左至右; 表达式的值表达式的值: 若为真,则结果为若为真,则结果为1 1; 若为假,则结果为若为假,则结果为0 0。
30、35 35 值为:值为: 32 32 值为:值为: 设设x=-2; -3x-1 x=-2; -3x-1 值为:值为: 设设x=1; 2x4 x=1; 2x4 值为:值为:例例如如二、关系运算符和关系表达式二、关系运算符和关系表达式求求如下关系表达式的值:如下关系表达式的值:0001算术运算符优先级高于关系运算符算术运算符优先级高于关系运算符3+(43)*4 3+(43)*4 值为:值为: 3+43+43*4 & | 结合性:自左至右;结合性:自左至右; 表达式的值:表达式的值: 若为真,则结果为若为真,则结果为1 1; 若为假,则结果为若为假,则结果为0 0。 三、逻辑运算符和逻辑表达式三、逻
31、辑运算符和逻辑表达式 1 1、3 3种逻辑运算符:种逻辑运算符: & | !& | !参与逻辑运算的操作数叫逻辑量。参与逻辑运算的操作数叫逻辑量。逻辑量可以是整型、实型、字符型和指针类型,逻辑量可以是整型、实型、字符型和指针类型,其中,其中,0 0,0.00.0,0,NULL0,NULL代表代表假假,其余逻辑量代表,其余逻辑量代表真真。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 int a=5; float b=3.5; !a ( ) !(a b) ( ) a & b ( ) !a&b ( ) !a&!b ( ) !(a&b) ( ) a |b ( ) !
32、a|b ( ) !a|!b ( ) !(a|b) ( ) (a 0) ( ) (a 0) ( )例如例如011000110001C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如表达式运算如下:例如表达式运算如下:混合优先级:混合优先级: ! ! 高高 算术运算符算术运算符 关系运算符关系运算符 &和和| | 赋值运算符赋值运算符 低低 4 - 04 - 01 & 21 & 28 48 3 & 2 | 8 3 & 2 | 8 4 - !5C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如: (1)a = 0; b = 1
33、; (1)a = 0; b = 1; c = a+ & ( b = 3 ); c = a+ & ( b = 3 ); 执行后执行后: a: a为为 ,b,b为为 ,c,c为为 。 逻辑或优化和逻辑与优化:逻辑或优化和逻辑与优化: 在逻辑表达式的求解中,在逻辑表达式的求解中,并不是所有的逻辑运算符都并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。达式的解时,才执行该运算符。110(2)a = 1; b = 1; c=0;(2)a = 1; b = 1; c=0; d = -a d = -a | b
34、- b- | (c = b+3 ); (c = b+3 ); 执行后执行后: a: a为为 ,b,b为为 ,c,c为为 ,d,d为为 。0001C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如: (1) n(1) n是是小于小于m m的偶数:的偶数: (2)year(2)year是是闰年闰年: : (能被(能被4 4整除但不能被整除但不能被100100整除整除, ,或能被或能被400400整除)整除)逻辑表达式一般用于控制语句中的条件:逻辑表达式一般用于控制语句中的条件:n m & n % 2 = 0n m & n % 2 = 0 year % 4 =
35、 0 & year % 100 != 0 | year % 400 = 0C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页以下程序运行后的输出结果为:以下程序运行后的输出结果为:#include #include void main()void main() intint x=20; x=20;printf(%d,0x20);printf(%d,0x20);printf(%dn,0printf(%dn,0x&xx&x20); 20); 2009-92009-9 若若a a是数值类型,则逻辑表达式(是数值类型,则逻辑表达式(a=1a=1)|(a!=1)|(a!=1
36、)的值是(的值是( )A.1 B.0 C.2 D.A.1 B.0 C.2 D.不知道不知道a a的值,不能确定的值,不能确定C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如例如:(1) x=(y=12)/4 (1) x=(y=12)/4 (2) x=y=12/4 (2) x=y=12/4 (3) x=(y=12/4) (3) x=(y=12/4) (4)(x=y)=12/4(4)(x=y)=12/4四、赋值运算符和赋值表达式四、赋值运算符和赋值表达式 1 1、赋值运算符赋值运算符 = = ( (执行功能:把执行功能:把= =右边的表达式的值,存入右边的表达式
37、的值,存入= =左边的左边的变量变量对应的存储空间,即给此变量赋值对应的存储空间,即给此变量赋值) 3=2+1 a=a+2) 3=2+1 a=a+2 2 2、赋值表达式:赋值表达式:用赋值运算符将变量和表达式连接起来的式子用赋值运算符将变量和表达式连接起来的式子 形式形式: : = 求值规则求值规则: : 将将“= =”右边表达式的值赋给左边的变量。右边表达式的值赋给左边的变量。 优先级:优先级: ! ! 算术算术 关系关系 & & | | 赋值赋值 结合性:自右至左;结合性:自右至左; 表达式的值:表达式的值:被赋值变量的值被赋值变量的值。y y值为值为1212,x x值为值为3 3,表达式
38、的值为,表达式的值为3 3y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3y y值为值为3 3,x x值为值为3 3,表达式的值为,表达式的值为3 3 C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页练习:练习:设设a=12a=12,计算表达式计算表达式a+=a-=a*12a+=a-=a*12和和a+=a-=a*=12a+=a-=a*=12的值的值 3 3、复合赋值运算符复合赋值运算符 * *= =、/=/=、 %=%=、 +=+=、 -=, =-=, =, &=, &=、 =、 = = 复合运算符是一个运算符复合运算符是一个运算符,
39、 ,但功能上但功能上, ,是两个运算符功是两个运算符功能的组合。能的组合。例如例如: a+=b : a+=b 相当于相当于 a=a+ba=a+b a*=b a*=b 相当于相当于 a=a*ba=a*b注意:注意:a*=b+c a*=b+c 相当于相当于 a=a*(b+c) a=a*(b+c) 而不是而不是 a=a*b+ca=a*b+c 优先级:优先级: 与与 = = 是同一优先级。是同一优先级。 结合性:自右至左;结合性:自右至左; 表达式的值:表达式的值:被赋值变量的值被赋值变量的值。-2640C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 求值规则:求值规
40、则: 先求解表达式先求解表达式1 1的值的值 若为真若为真( (非非0),0),求解表达式求解表达式2 2,并把表达式,并把表达式2 2的值的值 作为整个条件表达式的值作为整个条件表达式的值 若为假若为假(0),(0),求解表达式求解表达式3 3,并把表达式,并把表达式3 3的值作的值作 为整个条件表达式的值为整个条件表达式的值 四、其它运算符四、其它运算符 1 1、条件运算符条件运算符 ? ?和和: : , ,它们与三个操作数组组成三元运算。它们与三个操作数组组成三元运算。 形式为形式为: : ? ? :3 优先级:优先级: 逻辑逻辑 条件条件 赋值赋值 结合性:结合性:自右至左;自右至左;
41、C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2 2、逗号运算符:逗号运算符: , 形式形式: : 表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n 求值规则求值规则: : 从左至右依次计算各表达式的值从左至右依次计算各表达式的值; 优先级:优先级: 最低;最低; 结合性:自左至右;结合性:自左至右; 表达式的值:最后一个表达式的值。表达式的值:最后一个表达式的值。又如:又如: y = x10 ? x/10 : x0 ? x: -xy = x10 ? x/10 : x0 ? x: -x 当当x x的值为整型的的值为整型的1515时,表达式的结果为
42、:时,表达式的结果为: 当当x x的值为整型的的值为整型的5 5时,表达式的结果为:时,表达式的结果为:15 5例如例如: : intint max, max,a=5a=5,b=3;b=3; max=ab?a:b max=ab?a:b 求求maxmax的值的值 max的值为的值为5C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如: a b y a b y 表达式表达式 y=a=4,b=5,a+b y=a=4,b=5,a+b y=(a=4,b=5,a+b) y=(a=4,b=5,a+b) y=(a=4,b=5),a+b y=(a=4,b=5),a+b y
43、=a=(4,b=5),a+b y=a=(4,b=5),a+b 4 45 54 49 94 45 59 99 94 45 59 95 55 55 55 51010C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 形式有三种:形式有三种: sizeof 变量名变量名 sizeof(变量名变量名) sizeof (类型名类型名) 结果为整型数。结果为整型数。 int aint a; float xfloat x; printf(“%d,%d”,sizeof a,sizeof x);printf(“%d,%d”,sizeof a,sizeof x); printf(“%
44、d,%d”,sizeof(int),sizeof(float); printf(“%d,%d”,sizeof(int),sizeof(float); 以上两个以上两个printfprintf语句结果均为语句结果均为 例如例如3 3、求求字节运算符:字节运算符: sizeof 作用:求得变量或某种数据类型所需的字节数。作用:求得变量或某种数据类型所需的字节数。4 4,4 44 4,4 4C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 C C语言允许整型、实型、字符型数据进行混合运算。语言允许整型、实型、字符型数据进行混合运算。 有有3 3种转换方式:自动转换、赋
45、值转换和强制转换。种转换方式:自动转换、赋值转换和强制转换。 一、类型自动转换一、类型自动转换 2.4 2.4 数据类型转换数据类型转换 double floatunsigned long long unsigned int int char,short特点:由数值存储位数少特点:由数值存储位数少的向多的转换;整型向实的向多的转换;整型向实型转换!型转换!操作数为相同类型的不转操作数为相同类型的不转换,仍取原类型,特别注换,仍取原类型,特别注意此时可能带来的错误!意此时可能带来的错误!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 int x=2;float
46、y=1.6;char c=A;int x=2;float y=1.6;char c=A; 则:则: c + 1/x * yc + 1/x * y = = = =例如例如char c=68.5;printf(“%c”,c);65(int)+ 0(int) * 1.6(float65(int)+ 0(int) * 1.6(float)65(float)65(float)二、二、 赋值转换赋值转换 在在赋值时将赋值符右边值的类型转换成与其左边变量赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。类型一致的类型。 有下列几种情况:有下列几种情况: (1) (1) 实型实型 整型(字符型):去
47、掉小数部分;整型(字符型):去掉小数部分;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页(2) (2) 整型(字符型)整型(字符型) 实型:实型: 补足有效位;补足有效位;float f=23; 23.00000 7位位double f=A; 65.0000000000000 15位位C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例如:例如: int a=2,b=5;int a=2,b=5; float x=4.4; float x=4.4; 则有:则有: 表达式表达式 结果结果 b/ab/a (float)b/a (floa
48、t)b/a (float)(b/a) (float)(b/a) (int)x%a+x (int)x%a+x (int)x%(a+x) (int)x%(a+x) 三、强制类型转换三、强制类型转换 形式:形式: ( (类型名类型名) )表达式表达式 强制类型转换时强制类型转换时, ,得到所需类型的中间变量,原来得到所需类型的中间变量,原来变量的类型不会改变。变量的类型不会改变。2 22.52.52.02.04.44.4C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2006-91、若变量、若变量x、y已正确定义并赋值,以下符合已正确定义并赋值,以下符合C语言语法的表
49、达式是语言语法的表达式是 A. +x,y=x- - B x+1=y C x=x+10=x+y D double(x)/102、以下关于逻辑运算符两侧运算对象的叙述中正确的是、以下关于逻辑运算符两侧运算对象的叙述中正确的是 A 只能是整数只能是整数0或或1 B 只能是整数只能是整数0或非或非0整数整数 C 可以是结构体类型的数据可以是结构体类型的数据 D. 可以是任意合法的表达式可以是任意合法的表达式3、若有定义、若有定义int x,y ; 并以正确给变量赋值,则以下选项中与表达式并以正确给变量赋值,则以下选项中与表达式 (x-y)?(x+): ( y+)中的条件表达式中的条件表达式(x-y)
50、等价的是等价的是 A (x-y)0 ) B (x-y)0) C. (x-y)0) D (x-y)=0 )4 4、有以下程序、有以下程序 main( )main( ) intint x,y,zx,y,z; x=y=1; z=; x=y=1; z=x+,y+,+yx+,y+,+y; ; printf(%d,%d,%dnprintf(%d,%d,%dn, , x,y,zx,y,z); ); A 2, 3, 3 B 2, 3, 2 A 2, 3, 3 B 2, 3, 2 C C. 2, 3,1 D 2, 2, 1. 2, 3,1 D 2, 2, 1C语言程序设计C语言程序设计C语言程序设计C语言程序设
51、计上一页上一页下一页下一页2006-95 5、有以下程序、有以下程序 main( )main( ) intint a=0,b=0; a=0,b=0; a=10; /* a=10; /* 给给a a赋值赋值 b=20; /* b=20; /* 给给b b赋值赋值 * */ / printf(a+bprintf(a+b=%=%dndn, , a+ba+b); /* ); /* 输出计算结果输出计算结果 * */ / A. A. a+ba+b=10 =10 B B a+ba+b=30 C 30 D =30 C 30 D 出错出错6 6、以下选项中,值为、以下选项中,值为1 1的表达式是的表达式是 A
52、 1-A 1-0 0 B B. 1-0 C 1-0 D 0-0. 1-0 C 1-0 D 0-07 7、设有定义:、设有定义:float x=123.4567float x=123.4567;,则执行以下语句的输出结果是(;,则执行以下语句的输出结果是( ) printf(%fnprintf(%fn, (, (int)(xint)(x*100+0.5)/100.0); *100+0.5)/100.0); 123.460000注意:0的ASCII值为48,依次类推C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页8 8、以下程序运行后的输出结果是(、以下程序运行后的
53、输出结果是( ) main( )main( ) intint m=011, n=11; m=011, n=11; printf(%dprintf(%d % %dndn, +m, n+); , +m, n+); 9 9、以下程序运行后的输出结果是(、以下程序运行后的输出结果是( ) main( )main( ) intint x,ax,a=1,b=2,c=3,d=4;=1,b=2,c=3,d=4; x=(a x=(ab)?a:bb)?a:b; x=(x; x=(x; x=(dx)?x:dx)?x:d; ; printf(%dnprintf(%dn, x); , x); 10 111C语言程序设计
54、C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2007-41 1、若有代数式、若有代数式 以下正确表示该代数式的以下正确表示该代数式的C C语言表达式是语言表达式是 A A sqrt(abs(nx+exsqrt(abs(nx+ex) B ) B sqrt(fabs(pow(n,x)+pow(x,esqrt(fabs(pow(n,x)+pow(x,e) C C. . sqrt(fabs(pow(n,x)+exp(xsqrt(fabs(pow(n,x)+exp(x) D ) D sqrt(fabs(pow(x,n)+exp(xsqrt(fabs(pow(x,n)+exp(x)2
55、 2、设有定义:、设有定义:intint k=0; k=0; 以下选项的四个表达式中与其他三个以下选项的四个表达式中与其他三个表达式表达式的值不相同的是的值不相同的是 A A. k+. k+ B k+=1 B k+=1 C +k D k+1 C +k D k+13 3、有以下程序,其中、有以下程序,其中%u%u表示按无符号整数输出表示按无符号整数输出 main()main() unsigned unsigned intint x=0xFFFF; x=0xFFFF; printf(%un,xprintf(%un,x) ;) ; 程序运行后的输出结果是程序运行后的输出结果是 A -1 A -1 B
56、 B. 65535 C 32767 D 0xFFFF. 65535 C 32767 D 0xFFFF4 4、以下选项中,当、以下选项中,当x x为大于为大于1 1的奇数时,值为的奇数时,值为0 0的表达式是的表达式是 A x%2=1 B x/2A x%2=1 B x/2 C x%2!=0 C x%2!=0 D D. x%2= =0. x%2= =0注意:考虑的是表达式的值,不是变量注意:考虑的是表达式的值,不是变量k的值的值C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2007-45、执行以下程序后的输出结果是、执行以下程序后的输出结果是 main() int
57、 a=10; a=(3*5,a+4); printf(a=%dn,a) ;6、以下程序后的输出结果是、以下程序后的输出结果是 #include main() printf(“%dn”,strlen(“IBMn0121”); (请注意转义字符请注意转义字符)7、已定义、已定义char ch=$; int i=1, j; 执行执行j=!ch&i-以后,以后,i的值是的值是2007-91. 若变量均已正确定义并赋值,以下合法的若变量均已正确定义并赋值,以下合法的C语言赋值语句是语言赋值语句是A.)x=y=5;B)x=n%2.5;C)x+n=I;D)x=5=4+1;2. 设有条件表达式:设有条件表达式
58、:(EXP)?i+:j-,则以下表达式中,则以下表达式中(EXP)完全等价的是完全等价的是A)(EXP=0)B.)(EXP!=0)C)(EXP=1)D)(EXP!=1)a=1491C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2007-93 3. . 已有定义:已有定义:charcharc c; ; 程序前面已在命令行中包含程序前面已在命令行中包含ctype.hctype.h文件,不能文件,不能用于判断用于判断c c中的字符是否为大写字母的表达式是中的字符是否为大写字母的表达式是A)A)isupperisupper(c(c) ) B B. .) )A A=c=
59、c=Z ZC)C)A A=c&cc&c=Z Z D)cD)c=(=(z z-32)&(-32)&(a a-32)=c-32)=c4. 4. 已知字符已知字符A A的的ASCASC代码值是代码值是6565,字符变量,字符变量c1c1的值是的值是A A,c2,c2的值的值是是D D。执行语句。执行语句printf(%d,%d,c1,c2-2);printf(%d,%d,c1,c2-2);后,输出结果是后,输出结果是A)AA)A,B B B)AB)A,6868 C C.)65.)65,6666 D)65D)65,68685. 5. 以下正确的字符串常量是以下正确的字符串常量是A)A) B)B)abc
60、abcC)OlympicGamesC)OlympicGamesD.)D.) isupperisupper用法:#include 功能:判断字符c是否为大写英文字母说明:当c为大写英文字母(A-Z)时,返回非零值,否则返回零。附加说明: 此为宏定义,非真正函数。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2008-41. 当变量当变量c的值不为的值不为2,4,6时,值也为时,值也为“真真”的表达式是的表达式是A)(c=2)|(c=4)|(c=6)B.)(c=2&c=2&c=2&c=6)&(c%2!=1)2. 已有定义:已有定义:charc= ;inta=1,b
61、;(此处此处c的初值为空格字符的初值为空格字符),执行,执行b=!c&a;后后b的值为的值为【6】。3. 设变量已经正确定义为整型,则表达式设变量已经正确定义为整型,则表达式n=i=2,+i,i+的值为的值为【7】。 注意逗号表达式外有无括号的问题。注意逗号表达式外有无括号的问题。03C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页2010-31.若有定义:double a=22;int i=0,k=18;则不符合C语言规定的赋值语句的是( )A a=a+,i+; B i=(a+k)=(i+k);C. i=a%11; D i=!a;2.以下关于C语言数据类型使用
62、的叙述中错误的是A若要准确无误差的表示自然数,应使用整数类型B 若要保存带有多位小数的数据,应使用双精度类型C 如要处理如“人员”信息等还能有不同类型的相关数据,应自定义结构体类型D .若只处理“真”和“假”两种逻辑值,应使用逻辑类型3.若a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是A. 1 B 0 C 2 D不知道a的值,不能确定4.设x为int型变量,请写出一个关系表达式,用以判断x同时为3和7的倍数时,关系表达式的值为真x%3=0 & x%7=0C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页题库练习四舍五入:66-3(强制类型转换)条件表达式:50-1C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页笔试课后作业笔试模拟试卷:第一套题选择题 17填空题 6,7第二套题选择题 13,14,15,16填空题 6,7第三套题选择题13,14,15,16,17第四套题选择题:14,16,17,18,19填空题 6