C语言课件第3章_第1页
C语言课件第3章_第2页
C语言课件第3章_第3页
C语言课件第3章_第4页
C语言课件第3章_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、第 2 页第第3 3章章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 C3.1 C的数据类型的数据类型3.2 3.2 常量和变量常量和变量3.3 3.3 整型数据整型数据3.4 3.4 实型数据实型数据3.5 3.5 字符型数据字符型数据3.6 3.6 变量赋初值变量赋初值3.7 3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算3.8 3.8 算术运算与算术表达式算术运算与算术表达式3.9 3.9 赋值运算与赋值表达式赋值运算与赋值表达式3.10 3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式第 3 页3.1 C3.1 C语言的数据类型语言的数据类型1.1.基本

2、类型基本类型 分为整型、实型、字符型和枚举型四种。分为整型、实型、字符型和枚举型四种。2.2.构造类型构造类型 分为数组、结构体和共用体类型三种。分为数组、结构体和共用体类型三种。3.3.指针类型指针类型4.4.空类型空类型第 4 页3.2 3.2 常量和变量常量和变量3.2.1 3.2.1 常量和符号常量常量和符号常量1.1.常量的概念常量的概念在程序运行过程中,其值不能被改变的量称为常量。在程序运行过程中,其值不能被改变的量称为常量。2.2.常量的分类常量的分类常量分为字面常量和符号常量。常量分为字面常量和符号常量。 第 5 页3.2.1 3.2.1 常量和符号常量常量和符号常量 字面常量

3、可以从书写形式来判别其数据类型,字面常量可以从书写形式来判别其数据类型,一般分为三类:一般分为三类: (1 1)整型常量,如)整型常量,如1 1,0 0,-3-3,6553565535(2 2)实型常量,如)实型常量,如1.231.23,.23.23,123.123.(3 3)字符常量,如)字符常量,如a a,d d( (由单引号括起由单引号括起来的来的 单个字符单个字符) )符号常量是用一个标识符代表一个常量。符号常量是用一个标识符代表一个常量。符号常量的值在程序运行期间其值是不能被改变的。符号常量的值在程序运行期间其值是不能被改变的。符号常量通常用大写字母表示。符号常量通常用大写字母表示。

4、第 6 页3.2.1 3.2.1 常量和符号常量常量和符号常量例例3.1 3.1 求圆面积和周长求圆面积和周长#define PI 3.14 / /* *符号常量的定义方法符号常量的定义方法* */ /main()float r,s,l;r=2;s=PI*r*r;l=2*PI*r;printf(“l=%f,s=%fn”,l,s);getch();使用符号常量的好处:使用符号常量的好处:(1 1)含义明确)含义明确(2 2)修改方便)修改方便第 7 页3.2.2 3.2.2 变变 量量1.1.变量的概念变量的概念在程序运行过程中,其值可以被改变的量称为变量。在程序运行过程中,其值可以被改变的量称

5、为变量。2.2.变量的两个要素变量的两个要素(1 1)变量名变量名 每个变量都必须有一个名字每个变量都必须有一个名字变量名,变量名实变量名,变量名实际上是一个符号地址。在对程序进行编译连接时系际上是一个符号地址。在对程序进行编译连接时系统会给每个变量名分配一个内存地址。统会给每个变量名分配一个内存地址。(2 2)变量值变量值 在程序运行过程中,变量值存储在内存中,系统通在程序运行过程中,变量值存储在内存中,系统通过变量名来引用变量的值。过变量名来引用变量的值。第 8 页3.2.2 3.2.2 变变 量量变量名变量名2000H34a变量值变量值内存地址内存地址int a;a=34;第 9 页.

6、.标识符命名规则标识符命名规则标识符指变量名、符号常量名、函数名、数组名等。标识符指变量名、符号常量名、函数名、数组名等。标识符命名必须遵守以下规则:标识符命名必须遵守以下规则:(1 1)只能由)只能由字母、数字和下划线字母、数字和下划线组成,且以组成,且以字母或下字母或下划线划线开头。开头。(2 2)C C语言的关键字不能用作变量名语言的关键字不能用作变量名(3 3)区分大小写英文字母,同一字母的大小写形式被)区分大小写英文字母,同一字母的大小写形式被认为是两个不同的字符。认为是两个不同的字符。3.2.2 3.2.2 变变 量量第 10 页习惯上,变量名、函数名、数组名中的英文字母用习惯上,

7、变量名、函数名、数组名中的英文字母用小写,符号常量用大写字母表示。小写,符号常量用大写字母表示。合法的变量名有:合法的变量名有:name,sum ,total ,_average ,p1,li_ming 不合法的变量名有:不合法的变量名有:123 ,M.John ,a#2 ,int ,#33,3.2.2 3.2.2 变变 量量第 11 页4.4.变量的定义与初始化变量的定义与初始化在语言中,要求对所有用到的变量,必须在语言中,要求对所有用到的变量,必须先定义、先定义、后使用后使用。在定义变量的同时进行赋初值的操作为在定义变量的同时进行赋初值的操作为变量初始化变量初始化。 3.2.2 3.2.2

8、 变变 量量int a=5,b=6,sum=0;初始化初始化如:如: int a,b,sum; a=5;b=6;sum=a+b;第 12 页(1 1)变量定义的格式)变量定义的格式 数据类型数据类型 变量名变量名1, 1, 变量名变量名2;2; 如,如,float radius, length, area; ; (2 2)变量初始化的格式)变量初始化的格式 数据类型数据类型 变量名变量名1=1=初值初值1, 1, 变量名变量名2=2=初值初值2;2; 如,如,float radius=2.5, length, area; ; 3.2.2 3.2.2 变变 量量第 13 页3.3.1 3.3.1

9、 整型常量的表示方法整型常量的表示方法整型常量有三种表示形式:整型常量有三种表示形式:十进制十进制整数,如整数,如123123,-456-456,0 0八进制八进制整数,以整数,以0 0开头、数码取值为开头、数码取值为0-70-7的数的数十六进制十六进制数,以数,以0 x0 x或或0X0X开头、数码取值为开头、数码取值为0-90-9,A-FA-F或或a-a-f f的数。的数。3.3 3.3 整型数据整型数据整型数据分为整型常量和整型变量两种。合法的八进制整数,如合法的八进制整数,如015(015(十进制为十进制为13)13)0101(0101(十进制为十进制为65)65)0177777(017

10、7777(十进制为十进制为65535)65535)以下各数不是合法的八进制数:以下各数不是合法的八进制数: 256(256(无前缀无前缀0) 03A2(0) 03A2(包含了非八进制数码包含了非八进制数码) )-0127(-0127(出现了负号出现了负号) )以下是合法的十六进制整数:以下是合法的十六进制整数:0X2A(十进制为十进制为42)0XA0 (十进制为十进制为160)0XFFFF (十进制十进制为为65535)以下是不合法的十六进制整数:以下是不合法的十六进制整数: 5A (无前缀无前缀0X)0X3H (含有非十六进制数码含有非十六进制数码)第 14 页3.3 3.3 整型数据整型数

11、据3.3.2 3.3.2 整型变量整型变量1.1.分类分类根据占用内存字节数的不同,整型变量又分为根据占用内存字节数的不同,整型变量又分为3 3大类:大类:基本整型(类型关键字为基本整型(类型关键字为intint)短整型(类型关键字为短整型(类型关键字为short intshort int)长整型(类型关键字为长整型(类型关键字为long intlong int)长度应满足:短整型长度应满足:短整型 基本整型基本整型 长整型长整型在在TC 2.0中,基本整型和短整型长度都为中,基本整型和短整型长度都为16位,长整型为位,长整型为32位。位。第 15 页3.3.2 3.3.2 整型变量整型变量根

12、据是否有符号位又可分为六种:根据是否有符号位又可分为六种:长整型长整型 无符号长整型(无符号长整型(unsigned long int) unsigned long int) 有符号长整型(有符号长整型(signed long intsigned long int)短整型短整型无符号短整型(无符号短整型(unsigned short int unsigned short int )有符号短整型(有符号短整型(signed short intsigned short int)基本整型基本整型无符号基本整型(无符号基本整型(unsigned intunsigned int)有符号基本整型(有符号基

13、本整型(signed intsigned int)第 16 页n n位有符号整型变量的值域为:位有符号整型变量的值域为:-2-2n-1 n-1 2 2n-1n-1-1-1n n位无符号整型变量的值域为:位无符号整型变量的值域为:0 0 (2 2n n-1-1) 3.3.2 3.3.2 整型变量整型变量2 2、值域、值域不同类型的整型变量,其值域不同。不同类型的整型变量,其值域不同。详见详见P33 P33 表表3.13.1类型说明符数的范围类型说明符数的范围 分配字节数分配字节数int -3276832767 short int -3276832767 unsigned int 065535 u

14、nsigned short 065535 long int -21474836482147483647 (-231231-1)unsigned long 04294967295 (0232-1)第 17 页3 3、整型变量的定义、整型变量的定义例:例:int a,b;unsigned int c,d;unsigned long e;long f;short g;3.3.2 3.3.2 整型变量整型变量思考:思考:a,b,c,d,e,f,g的取值范围各的取值范围各为多少?为多少?0 +65535-32768 +32767-231 231-10 232-1-32768 +32767第 18 页3.

15、3.2 3.3.2 整型变量整型变量4 4、整型数据的溢出、整型数据的溢出当数值范围超出变量的值域,则会发生数据溢出当数值范围超出变量的值域,则会发生数据溢出现象,因此现象,因此编程时要注意变量的值域编程时要注意变量的值域。例:例:main()main()int a=32767,b;int a=32767,b;b=a+1;b=a+1;printf(printf(“%d%d”,b);,b); 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ab变成负数,必须将补码转换为变成负数,必须将补码转换为原码,才能知道其数值大小原

16、码,才能知道其数值大小结果为结果为-32768第 19 页3.3.3 3.3.3 整型常量的类型整型常量的类型将整型常量赋给整型变量时要注意变量的将整型常量赋给整型变量时要注意变量的取值范围取值范围。(1 1)在)在3276832768+32767+32767之间的整数可以看成是之间的整数可以看成是intint型型或或short intshort int型,可赋值给型,可赋值给short int short int ,int, long int, long intint型变量。型变量。(2 2)一个整数值超过上述范围,但在)一个整数值超过上述范围,但在-2147683468-214768346

17、821476836472147683647之间,则看成是之间,则看成是long long 型整数,可赋值给型整数,可赋值给long intlong int型变量。型变量。(3 3)在一个整型常量后面加上)在一个整型常量后面加上u u或或U U,则将其看成是,则将其看成是unsigned intunsigned int型,如型,如12345u12345u,-1u-1u(4 4)在整型常数后添加一个)在整型常数后添加一个L L或或l l字母表示该数为长整字母表示该数为长整型数型数, , 如如22L, 0773L, 0Xae4l22L, 0773L, 0Xae4l。第 20 页3.4 3.4 实型数

18、据实型数据3.4.1 3.4.1 实型常量的表示方法实型常量的表示方法实数又称浮点数,其表示形式有两种:实数又称浮点数,其表示形式有两种:(1 1)十进制小数形式)十进制小数形式如:如: 0.1230.123,.123.123,123.123.,123.0, 123.0, 都是十进制都是十进制小数形式。小数形式。注意:小数点不可缺少。注意:小数点不可缺少。(2 2)指数形式)指数形式如如1.23e31.23e3或或1.23E31.23E3都表示都表示1.231.23103103注意:指数形式字母注意:指数形式字母e(e(或或E)E)前面必须有数字,且前面必须有数字,且e e后后面的指数必须为整

19、数。面的指数必须为整数。第 21 页u一个实数可以有多种指数表示形式,但只有一种规一个实数可以有多种指数表示形式,但只有一种规范化指数形式。范化指数形式。u规范化指数形式的特点:规范化指数形式的特点:在字母在字母e e(或(或E E)之前的小)之前的小数部分中,小数点前面有且只有一位非零数字。如数部分中,小数点前面有且只有一位非零数字。如 2.345e22.345e2,1.234E51.234E5都是规范化的指数形式。都是规范化的指数形式。u一个实数在用指数形式输出时,是按规范化指数形一个实数在用指数形式输出时,是按规范化指数形式输出的。式输出的。 3.4.1 3.4.1 实型常量的表示方法实

20、型常量的表示方法第 22 页3.4.23.4.2实型变量实型变量1 1、实型数据在内存中的存放形式、实型数据在内存中的存放形式 实型数据在内存中按指数形式存储实型数据在内存中按指数形式存储 如:如:123.45123.45可以用可以用0.123450.12345 10102 2来表示来表示尾数尾数阶码阶码阶码符阶码符尾数符尾数符+ .123452+第 23 页3.4.23.4.2实型变量实型变量2、实型变量的分类实型变量的分类详见详见P36 表表3.2类型类型长度长度有效数字位有效数字位数值范围数值范围单精度(单精度(float型)型)32位位67位位10-3710+38双精度(双精度(dou

21、ble型)型) 64位位1516位位10-30710+308长双精度型(长双精度型(long double型)型)128位位1819位位10-493110+4932第 24 页3.4.23.4.2实型变量实型变量u对于对于float型变量,其在内存中存储时,一般是用型变量,其在内存中存储时,一般是用8位表示指数部分,位表示指数部分,24位表示小数部分。位表示小数部分。u表示指数的位数越多,则所能表示的数值范围越大,表示指数的位数越多,则所能表示的数值范围越大,而表示小数部分的位数越多,则精确度越高。而表示小数部分的位数越多,则精确度越高。ufloat型变量取值范围为型变量取值范围为-3.4*1

22、0-373.4*1038实型变量的定义float x,y;double z;long double t;第 25 页3.4.23.4.2实型变量实型变量3、实型数据的舍入误差、实型数据的舍入误差main() float a,b; a=123456.789e5; b=a+20; printf(%f,b); u原因:原因:floatfloat型数据有效数型数据有效数字字6 67 7位,第位,第7 7位以后的数位以后的数据不一定可靠。据不一定可靠。u因此要避免一个很大的数因此要避免一个很大的数与一个很小的数进行加减与一个很小的数进行加减。运行结果为运行结果为12345678848.000000第 2

23、6 页3.4.3 3.4.3 实型常量的类型实型常量的类型uTC 2.0TC 2.0编译系统将实型常量作为双精度来处理,以编译系统将实型常量作为双精度来处理,以提高运算精确度。提高运算精确度。如如: :float f; f=2.23456float f; f=2.23456* *1.23456; 1.23456; 运算结果为运算结果为 2.7586982.758698计算时将两个常量作为双精度数据处理,计算结计算时将两个常量作为双精度数据处理,计算结果则取前果则取前7 7位有效数字赋给位有效数字赋给f f有时为了提高运算速度,也可以在实数后面加有时为了提高运算速度,也可以在实数后面加f f或或

24、F F,作为单精度实数处理。,作为单精度实数处理。第 27 页3.4.3 3.4.3 实型常量的类型实型常量的类型u一个实型常量可以赋给一个实型常量可以赋给floatfloat型、型、doubledouble型或型或long long doubledouble型变量,系统会自动根据变量的类型来截取实型变量,系统会自动根据变量的类型来截取实型常量中相应的有效位数字。型常量中相应的有效位数字。 如:如:float a;float a; a=111111.111; a=111111.111; 则则a a只能接收前面只能接收前面7 7位有效数字,最后位有效数字,最后2 2位不起作用。位不起作用。第 2

25、8 页3.53.5字符型数据字符型数据3.5.1 3.5.1 字符常量字符常量(1 1)一般形式的字符常量)一般形式的字符常量uC C的字符常量是用单引号括起来的单个字符,如的字符常量是用单引号括起来的单个字符,如a,$,b,ca,$,b,c等都是字符常量。等都是字符常量。u字符常量要区分大小写字母,如字符常量要区分大小写字母,如aa和和AA是两个不是两个不同的字符常量。同的字符常量。第 29 页3.5.1 3.5.1 字符常量字符常量(2 2)特殊形式的字符常量)特殊形式的字符常量uC C语言允许使用一种特殊形式的字符常量,即以语言允许使用一种特殊形式的字符常量,即以“ ”开头的字符序列,称

26、作转义字符。开头的字符序列,称作转义字符。u其意思是将反斜杠(其意思是将反斜杠( )后面的字符转换成)后面的字符转换成另外的意义。另外的意义。 3.5.1 3.5.1 字符常量字符常量转义字符转义字符功能功能转义字符转义字符功能功能n回车换行回车换行反斜杠反斜杠t跳到下一个跳到下一个制表位制表位单引号单引号b退一格退一格”双引号双引号r回车不换行回车不换行ddd13位八进位八进制所代表的制所代表的字符字符f走纸换页走纸换页xff12位十六位十六进制所代表进制所代表的字符的字符第 31 页3.5.1 3.5.1 字符常量字符常量udddddd是用是用ASCIIASCII码(八进制数)表示一个字符

27、码(八进制数)表示一个字符 u xhhxhh是用是用ASCIIASCII码(十六进制数)表示一个字符码(十六进制数)表示一个字符如:如:101101代表代表ASCIIASCII码(十进制数)为码(十进制数)为6565的字符的字符“A A”。x41x41代表代表ASCIIASCII码(十进制数)为码(十进制数)为6565的字符的字符“A A”。00或或000000是代表是代表ASCIIASCII码为码为0 0的控制字符,即的控制字符,即“空操作空操作”字符,它将用在字符串中作为结束标志。字符,它将用在字符串中作为结束标志。第 32 页3.5.1 3.5.1 字符常量字符常量例例3.5 转义字符的

28、使用转义字符的使用main()clrscr();printf(abctderfn);printf(hijktLbMn);getch();结果为:结果为: fabc de hijkM运行运行第 33 页3.5.2 3.5.2 字符变量字符变量字符型变量用于存放一个字符字符型变量用于存放一个字符, ,在内存中占一个字节。在内存中占一个字节。字符变量的定义形式:字符变量的定义形式: char c1,c2,c3;char c1,c2,c3; c1= c1=a a; ; c2= c2=b b; ; c3= c3=123123; /; /* *转义字符转义字符* */ /第 34 页(1 1)存储形式)存

29、储形式u字符数据在内存中以字符数据在内存中以ASCIIASCII码形式存储。码形式存储。(2 2)使用方法)使用方法u字符型数据和整型数据可以通用字符型数据和整型数据可以通用, ,可以互相赋值。可以互相赋值。u对字符数据也可进行算术运算。对字符数据也可进行算术运算。u一个字符型数据可以字符形式或整数形式输出。一个字符型数据可以字符形式或整数形式输出。3.5.3 3.5.3 字符数据在内存中的存储字符数据在内存中的存储形式及用法形式及用法第 35 页例例3.6 3.6 字符数据和整型数据通用字符数据和整型数据通用main() char ch1,ch2; ch1=a; ch2=98; printf

30、(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); 结果:结果: ch1=a,ch2=b ch1=97,ch2=98运行运行3.5.3 3.5.3 字符数据在内存中的存储字符数据在内存中的存储形式及用法形式及用法第 36 页 例例3.7 字符数据的算术运算字符数据的算术运算 /*程序功能程序功能: 大小写字母转换大小写字母转换*/main( ) char ch1,ch2;ch1=a; ch2=B; printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); 运行运行3.5.3 3.5.3 字符数据在内存

31、中的存储字符数据在内存中的存储形式及用法形式及用法第 37 页注意:若变量定义为注意:若变量定义为signed charsigned char类型,则类型,则其其ASCIIASCII码的取值范围为码的取值范围为128128127,127,此时此时: :u如果使用如果使用ASCIIASCII码为码为0 0127127之之间的字符,其字节中最高位为间的字符,其字节中最高位为0 0,因此用,因此用d d输出可得到一个输出可得到一个正数;正数;u如果使用如果使用ASCIIASCII码为码为128128255255之间的字符,由于其最高位为之间的字符,由于其最高位为1 1,因此用,因此用%d%d格式输出

32、时将得格式输出时将得到一个负整数。到一个负整数。例例3.8: 3.8: main()main()char a=130; char a=130; printf(printf(“%d%d”, ,a);a);结果为结果为:-126:-1263.5.3 3.5.3 字符数据在内存中的存储形式及字符数据在内存中的存储形式及用法用法第 38 页3.5.4 3.5.4 字符串常量字符串常量字符串常量是用一对双引号括起来的字符序列。字符串常量是用一对双引号括起来的字符序列。如:如:How do you do?, CHINA, aHow do you do?, CHINA, a可以用可以用printf()pri

33、ntf()函数直接输出一个字符串常量函数直接输出一个字符串常量如:如:printf(How do you do?);printf(How do you do?);第 39 页3.5.4 3.5.4 字符串常量字符串常量字符串常量与字符常量的区别:字符串常量与字符常量的区别:(1 1)书写形式不同书写形式不同,字符常量是用一对,字符常量是用一对单引号单引号括起来括起来的的单个字符单个字符,字符串常量是用一对,字符串常量是用一对双引号双引号括起来的括起来的字符序列。字符序列。如:如:aa是字符常量,是字符常量,aa是字符串常量。是字符串常量。(2 2)存储形式不同存储形式不同,每个字符串常量的结尾

34、都会自动,每个字符串常量的结尾都会自动加上一个加上一个字符串结束标志字符串结束标志00, ,即即“空操作符空操作符”,它是它是ASCIIASCII码为码为0 0的字符,不会引起任何控制动作,的字符,不会引起任何控制动作,也不是一个可显示的字符。也不是一个可显示的字符。第 40 页3.5.4 3.5.4 字符串常量字符串常量如如“ChinaChina”在内存中的存储形式如下:在内存中的存储形式如下:又如:又如:“How do you do.” 在内存中占在内存中占15个字节个字节 “Good morning.”在内存中占在内存中占14个个字节字节因此,因此,a和和“a” 在存储形式上是根在存储形

35、式上是根本不同的。本不同的。a只占只占1个字节个字节“a”占占2个字节个字节小结:小结:字符串常量字符串常量在内存中所占的字节数等于其在内存中所占的字节数等于其有效字符个有效字符个数加数加1 1 ;字符常量字符常量所占字节数为所占字节数为1 1 。China0“China”在内存中实际占用6 6个字节个字节。第 41 页3.5.4 3.5.4 字符串常量字符串常量注意事项:注意事项:(1 1)如果反斜杠和双引号作为字符串中的有效字符,)如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。则必须使用转义字符。 例如:例如:C:msdosv6.22 C:msdosv6.22 C:msdo

36、sv6.22 C:msdosv6.22 I say:Goodbye! I say:Goodbye! I say:Goodbye! I say:Goodbye! (2 2)字符串常量中的)字符串常量中的00是系统自动加上的,在是系统自动加上的,在写字符串时不必加写字符串时不必加00,否则会出错。,否则会出错。第 42 页课堂练习课堂练习(1 1)以下选项中可作为)以下选项中可作为C C语言合法整数的是语言合法整数的是( )( ) A A)10110B B10110B B)0386 C0386 C)0Xffa D0Xffa D)x2a2x2a2(2 2)以下所列的)以下所列的C C语言常量中,错误

37、的是(语言常量中,错误的是( ) A) 0 xFF B) 1.2e0.5 C) 2L D) 72A) 0 xFF B) 1.2e0.5 C) 2L D) 72(3 3)下列选项中,合法的)下列选项中,合法的C C语言关键字是(语言关键字是( ) A) VAR B) cher C) integer D) defaultA) VAR B) cher C) integer D) default第 43 页课堂练习课堂练习(4 4)以下不能定义为用户标识符的是)以下不能定义为用户标识符的是( )( ) A A)scanf Bscanf B)Void CVoid C)_3com_ D_3com_ D)i

38、ntint(5 5)下列关于)下列关于C C语言用户标识符的叙述中正确的是(语言用户标识符的叙述中正确的是( )A A)用户标识符中可以出现下划线和点号)用户标识符中可以出现下划线和点号B B)用户标识符中不可以出现连字符()用户标识符中不可以出现连字符(- -),但可以出),但可以出 现下划线(现下划线(_ _)C C)用户标识符中可以出现下划线,但不可以放在用)用户标识符中可以出现下划线,但不可以放在用 户标识符的开头户标识符的开头D D)用户标识符中可以出现下划线和数字,它们都可以放在用)用户标识符中可以出现下划线和数字,它们都可以放在用 户标识符的开头户标识符的开头第 44 页3.63

39、.6变量赋初值变量赋初值 u赋初值即对一些变量预先设置值。赋初值即对一些变量预先设置值。u可以先定义变量,再赋初值可以先定义变量,再赋初值 如:如: int a;a=5;int a;a=5;u也可以在定义变量的同时对变量赋初值(这种也可以在定义变量的同时对变量赋初值(这种情况称为初始化)情况称为初始化) 如:如:int i=1;int i=1;u可以对变量的一部分赋初值可以对变量的一部分赋初值 如:如: int i,j,sum=0;int i,j,sum=0;u也可以对几个变量赋同一个初值。也可以对几个变量赋同一个初值。 如:如:int a,b,c; a=b=c=1;int a,b,c; a=

40、b=c=1;第 45 页3.6 3.6 变量赋初值变量赋初值如:如: int a;float b=1.234;char c=a;int d,e,f=5; int g=3,h=3,i=3; 注意:不能写成:注意:不能写成: int g=h=i=3;即不能同时将多个变即不能同时将多个变量量初始化初始化为同一个值为同一个值但可以写成:但可以写成:int g,h,i;int g,h,i;g=h=i=3;g=h=i=3;a=3;注意:注意:l对变量赋初值是在程序对变量赋初值是在程序运行运行时进行的,时进行的,而不是在编译阶段完成的。而不是在编译阶段完成的。l在编译阶段只是给变量分配存储空间在编译阶段只是

41、给变量分配存储空间 第 46 页3.6 3.6 变量赋初值变量赋初值例:例: void main( )long x,y;int a,b,c,d;x=5;y=6;a=7;b=8;c=x+a;d=y+b;printf(c=x+a=%d,d=y+b=%dn,c,d);程序输出结果为:程序输出结果为: c=x+a=12,d=y+b=14第 47 页各类数据间的混合运算各类数据间的混合运算l整型、实型、字符型数据间可以进行混合运算。整型、实型、字符型数据间可以进行混合运算。l但在进行运算时,不同类型的数据要先转换成同一但在进行运算时,不同类型的数据要先转换成同一类型后才可进行运算。这种转换由系统自动进行

42、。类型后才可进行运算。这种转换由系统自动进行。注意:注意:表示必须的转换,表示必须的转换,表示数据表示数据类型转换的方向。类型转换的方向。只表示数据类型级别的高低,只表示数据类型级别的高低,并不表示数据类型转换的步骤。并不表示数据类型转换的步骤。如如intint型与型与doubledouble型数据进行运算型数据进行运算,先将,先将intint型数据转换成型数据转换成doubledouble型型,然后再进行运算。,然后再进行运算。double float long unsigned int char,short P41图图3.4第 48 页例如:假设已指定例如:假设已指定i为整型变量,为整型变

43、量,f为为float型变型变量,量,d为为double型变量,型变量,e为为long型型则则: 10+a+i*f-d/e 结果为结果为double型型 各类数据间的混合运算各类数据间的混合运算第 49 页3.7.1 C3.7.1 C语言运算符简介语言运算符简介1、算术运算符、算术运算符+,-, *, /,%,+,-2、关系运算符、关系运算符 = = !=3、逻辑运算符、逻辑运算符! & |4、位运算符、位运算符 | & 5、赋值运算符、赋值运算符=及其扩展赋值运算符及其扩展赋值运算符6、条件运算符、条件运算符(?: )7、逗号运算符、逗号运算符,8、指针运算符、指针运算符* &

44、amp;9、求字节数运算符、求字节数运算符sizeof 10、强制类型转换运算符、强制类型转换运算符(类型类型)11、分量运算符、分量运算符. 12、下标运算符、下标运算符 13、指向运算符、指向运算符详见详见P433.7 C3.7 C语言运算符和表达式语言运算符和表达式第 50 页3.7.2 3.7.2 算术运算符和算术表达式算术运算符和算术表达式 1 1、基本的算术运算符、基本的算术运算符C C语言基本的算术运算符包括语言基本的算术运算符包括+ +、 - -、 * *、 / /、 % %、+、- - -注意:注意:(1 1)为模运算符,又称求余运算符,)为模运算符,又称求余运算符,% %两

45、侧均应为两侧均应为整型数据整型数据。如。如5%3 ,6%105%3 ,6%10是合法的,是合法的,1.5%21.5%2不合法。不合法。(2 2)两个整数相除结果为整数两个整数相除结果为整数,小数部分被舍去。,小数部分被舍去。 如如5/35/3结果为结果为1 1, -5/3-5/3结果为结果为-1-1,3/53/5结果为结果为0 0。(3 3)若参加)若参加+ +、 - -、 * *、 / /运算的两个数中运算的两个数中有一个为有一个为实数,则运算结果为实数,则运算结果为doubledouble型型,因为所有实数都是,因为所有实数都是按按doubledouble型进行运算。型进行运算。 如如1.

46、0/21.0/2结果为结果为0.50.5,而,而1/21/2结果为结果为0 0。第 51 页3.7.2 3.7.2 算术运算符和算术表达式算术运算符和算术表达式自增、自减运算符的作用是使变量的值增自增、自减运算符的作用是使变量的值增1 1或减或减1 1。+i, -i +i, -i 在使用在使用i i之前,先使之前,先使i i的值加(减)的值加(减)1 1;i+, i- - i+, i- - 在使用在使用i i之后,使之后,使i i的值加(减)的值加(减)1 1i=3;printf(“%d”,+i); 运行结果为:运行结果为:4i=3; printf(%d,i+);运行结果为:运行结果为:3如:

47、第 52 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式例例3.9main() int x=6, y; printf(x=%dn,x); y = +x; printf(x=%d,y=%dn,x,y); y = x-; printf(x=%d,y=%dn,x,y); 程序运行结程序运行结果:果:x=6x=7,y=7x=6,y=7第 53 页注意:注意:(1)自增()自增(+)、自减()、自减(- -)运算符只能用于变)运算符只能用于变量,不能用于常量或表达式量,不能用于常量或表达式, 5+、-(a+b)等都是等都是非法的。非法的。(2)+和和- -的结合方向为的结合方向为

48、“自右向左自右向左”,即右结,即右结合性。如合性。如: -i+,相当于相当于-(i+) 设设i=3,则,则printf(“%d,-i+”);相当于先将相当于先将3加上加上负号输出负号输出-3,再对,再对i加加1,使,使i增值为增值为4。3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式第 54 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式4 4、有关表达式使用中的问题说明、有关表达式使用中的问题说明(1 1)不同的编译系统对表达式中子表达的求值顺)不同的编译系统对表达式中子表达的求值顺序的规定不同。序的规定不同。 如:如:(i+)+(i+)+(i+)

49、(i+)+(i+)+(i+),设,设i i的原值为的原值为3 3,则,则如果按从左到右的顺序求解,其值为如果按从左到右的顺序求解,其值为1212,而如,而如果将果将3 3作为全体作为全体i i的值,则结果为的值,则结果为9 9。第 55 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式main()int i=3;printf(%d,(i+)+(i+)+(i+); 运行结果为运行结果为12main()int i=3,j;j=(i+)+(i+)+(i+);printf(%d,j); 运行结果为运行结果为9要避免出现歧义,要避免出现歧义,可以写成下列语句:可以写成下列语句:i=

50、3;a=i+;b=i+;c=i+;d=a+b+c; 则则d为为12第 56 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式(2)C语言对调用函数时实参的求值顺序无统一规定,语言对调用函数时实参的求值顺序无统一规定,多数编译系统按自右向左的顺序进行求值。多数编译系统按自右向左的顺序进行求值。 例:例:i=3; printf(“%d,%d”,i, i+); 结果为结果为4,3第 57 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式例例3.11main() int i,j; i=1;j=2; printf(“%d,%dn”,(i+)+(i+),(+i)

51、+(+i); printf(“%dn”,(i+)+(i+); printf(“%dn”,(+i)+(+i); printf(“%dn”,i+j); printf(“%dn”,i+(+j); 第 58 页3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式2 2、强制类型转换运算符、强制类型转换运算符作用:将变量或表达式转换成所需类型作用:将变量或表达式转换成所需类型语法形式:语法形式: ( (类型名类型名)()(表达式表达式) ) ( (类型名类型名) )变量名变量名 如:如:(int)x, (double)(x+y)(int)x, (double)(x+y),(float)(

52、5%3)(float)(5%3)注意注意: :(1 1)表达式应该用括号括起来。)表达式应该用括号括起来。(2 2)在强制类型转换时,原来变量的类型并不变。)在强制类型转换时,原来变量的类型并不变。第 59 页课堂练习课堂练习(1)假定假定x和和y为为double型,则表达式型,则表达式x=2,y=x+3/2的值是的值是A) 3.500000 B)3 C) 2.000000 D) 3.000000(2)设正设正x、y均为整型变量,且均为整型变量,且x=10, y=3,则以下语句,则以下语句的输出结果是的输出结果是printf(%d,%dn, x-, -y);A) 10,3 B) 9,3 C)

53、9,2 D)10,2(3) 设有设有 int x=11; 则表达式则表达式 (x+ * 1/3) 的值是(的值是( ) A) 3 B) 4 C) 11 D) 12第 60 页课堂练习课堂练习(4) 下列程序的输出结果是(下列程序的输出结果是( )main() double d=3.2; int x,y;x=1.2; y=(x+3.8)/5.0;printf(%d n, d*y); A) 3 B) 3.2 C) 0 D) 3.07运行程序运行程序第 61 页3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 1 1、赋值运算符、赋值运算符 “= =”为赋值运算符。为赋值运算符。 其作用

54、是将一个数据或一个表达式的值赋给一个其作用是将一个数据或一个表达式的值赋给一个变量。变量。2 2、类型转换、类型转换 当赋值运算符两侧的数据类型不一致,在赋值当赋值运算符两侧的数据类型不一致,在赋值时要进行类型转换。时要进行类型转换。第 62 页3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式转换规则:转换规则:(1 1)将实型数据(包括单、双精度)赋给整型)将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分,在内存中以整变量时,舍弃实数的小数部分,在内存中以整数形式存储。数形式存储。 如:如:i i为整型变量,为整型变量,i=1.234i=1.234的结果是的结果是i

55、 i1 1。(2 2)将整型数据赋给单、双精度变量时,数值)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。赋给单不变,但以浮点数形式存储到变量中。赋给单精度变量时有效数字为精度变量时有效数字为7 7位,双精度为位,双精度为1616位,位,有效数字不足时,将用零补足。有效数字不足时,将用零补足。 如如: : 将将1212赋给赋给floatfloat型变量型变量f f,即,即f=12,f=12,则先将则先将1212转转换成换成12.0000012.00000再存储在再存储在f f中中; ;如如: : 将将1212赋给赋给doubledouble型变量,则转换成型变量,则转换

56、成12.0000000000000012.00000000000000。第 63 页3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式(2 2)将字符型数据赋给整型变量时,将字符数)将字符型数据赋给整型变量时,将字符数据(据(8 8位)放到整型变量的低位)放到整型变量的低8 8位中。位中。u若是若是unsigned charunsigned char型数据赋给整型变量,则型数据赋给整型变量,则高高8 8位全补位全补0 0。u若是若是charchar型数据,则字符最高位为型数据,则字符最高位为0,0,整型变整型变量高量高8 8位位全全补补0 0;否则全补;否则全补1 1。第 64 页3

57、.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式(3)将一个将一个int、short、long型数据赋给一个型数据赋给一个char型变型变量时,只将其低量时,只将其低8位原样送到位原样送到char型变量中型变量中,即截断。即截断。 如:如: int i=300; char c=a; c=i;C的值为多少?的值为多少?第 65 页3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式(4)(4)将带符号的整型数据将带符号的整型数据(intint型)赋给型)赋给longlong型变量型变量时,要进行符号扩展。将时,要进行符号扩展。将整型数据的整型数据的1616位送到位送到longlong型变量的低型变量的低1616位中位中, ,u若整数为正数,则若整数为正数,则longlong型变量的高型变量的高1616位全为位全为0 0;u若为负数,则全为若为负数,则全为1 1。 main() int a=-1; l

温馨提示

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

评论

0/150

提交评论