三章数据类型运算符与表达式.ppt
C程序设计程序设计三章数据类型运算符与表达式 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望C程序设计程序设计3.1 C3.1 C的数据类型的数据类型3.2 3.2 常量与变量常量与变量3.3 3.3 整型数据整型数据3.4 3.4 浮点型数据运行浮点型数据运行3.5 3.5 字符型数据字符型数据3.3.变量赋初值变量赋初值 第三章第三章数据类型、运算符与表达式数据类型、运算符与表达式3.7 3.7 各类数值型数据间各类数值型数据间的混合运算的混合运算 3.8 3.8 算术运算符和算术算术运算符和算术表达式表达式 3.9 3.9 赋值运算符和赋值赋值运算符和赋值表达式表达式 3.10 3.10 逗号运算符和逗号逗号运算符和逗号表达式表达式C程序设计程序设计 3.1 C 3.1 C的数据类型的数据类型C语言提供了以下一些数据类型。数据类型数据类型构造类型构造类型指针类型指针类型空类型(空类型(无值类型)无值类型)void void枚举类型枚举类型枚举类型枚举类型 enum enum enum enum数组类型数组类型数组类型数组类型结构类型结构类型结构类型结构类型 struct struct struct struct联合类型联合类型联合类型联合类型 union union union union基本类型基本类型整型整型整型整型 int int int int字符型字符型字符型字符型 char char char char实型(浮点型)实型(浮点型)实型(浮点型)实型(浮点型)单精度实型单精度实型单精度实型单精度实型 float float float float双精度实型双精度实型双精度实型双精度实型 double doubleC程序设计程序设计 3.2 常量与变量3.2.1 常量和符号常量在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:整型整型 100 100,125125,-100-100,0 0实型实型 3.14 3.14,0.125 0.125,-3.789-3.789字符型字符型 a,ba,b,22字符串字符串 a,ab a,ab,12321232C程序设计程序设计例3.1 符号常量的使用#define PRICE 30#define PRICE 30#include#include void main()void main()int num,total;int num,total;num=10;num=10;total=num*PRICE;total=num*PRICE;printf(total=%dn,total);printf(total=%dn,total);符号常量符号常量符号常量符号常量:用一个用一个标识符代表一标识符代表一个常量。符号个常量。符号常量的值在其常量的值在其作用域内不能作用域内不能改变改变,也不能再也不能再被赋值。被赋值。运行结果:运行结果:total=300total=300说明:说明:说明:说明:程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算 3.2 常量与变量C程序设计程序设计3.2.2变量变量 3.2 3.2 常量与变量常量与变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。这就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。单元中读取数据。C程序设计程序设计 变量命名的规定:变量命名的规定:语言规定标识符只能由字母、数语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母字和下划线三种字符组成,且第一个字符必须为字母或下划线。或下划线。3.2 3.2 常量与变量常量与变量例:例:sumsum,_total,month,Student_name_total,month,Student_name,lotus_1_2_ lotus_1_2_,BASIC,li_ling BASIC,li_ling M.D.John,M.D.John,¥123,3D64,ab123,3D64,abC程序设计程序设计 3.2 3.2 常量与变量常量与变量注意:注意:编译系统将大写字母和小写字母认为是两个不同的字符。编译系统将大写字母和小写字母认为是两个不同的字符。建议变量名的长度最好不要超过建议变量名的长度最好不要超过8 8个字符。个字符。在选择变量名和其它标识符时,应注意做到在选择变量名和其它标识符时,应注意做到“见名知意见名知意”,即选有含意的英文单词即选有含意的英文单词 (或其缩写)作标识符。(或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是要求对所有用到的变量作强制定义,也就是“先定义,后使用先定义,后使用”C程序设计程序设计 3.3 3.3 整型数据整型数据3.3.1整型常量的表示方法整型常量的表示方法 整型常量即整型常量即整常数。在整常数。在语言中,语言中,整常数整常数可用以下三可用以下三种形式表示:种形式表示:(1)十进制整数。十进制整数。如:如:123,-456.4。(2)八进制整数。以八进制整数。以0头的数是八进制数。头的数是八进制数。如:如:0123表示八进制数表示八进制数123,等于十进,等于十进制数制数83,-011表示八进制数表示八进制数-11,即十进制数即十进制数-9。(3)十六进制整数。以十六进制整数。以0 x开头的数是开头的数是16进进制数。制数。如:如:0 x123,代表,代表16进制数进制数123,等于十等于十进制数进制数 291。-0 x12等于十进制数等于十进制数10。C程序设计程序设计3.3.2 3.3.2 整型变量整型变量 3.3 3.3 整型数据整型数据(1)(1)整型数据在内存中的存放形式整型数据在内存中的存放形式整型数据在内存中的存放形式整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。数据在内存中是以二进制形式存放的。数据在内存中是以二进制形式存放的。数据在内存中是以二进制形式存放的。如如如如:int i;/*:int i;/*定义为整型变量定义为整型变量定义为整型变量定义为整型变量*/*/i=10;/*i=10;/*给给给给i i赋以整数赋以整数赋以整数赋以整数10*/10*/注意:注意:十进制数十进制数1010的二进制形式为的二进制形式为10101010,Turbo C 2.0Turbo C 2.0和和Turbo C+3.0Turbo C+3.0为一个整型变量在内存中分配为一个整型变量在内存中分配2 2个字节个字节的存储单元的存储单元(不同的编译系统为整型数据分配的字节不同的编译系统为整型数据分配的字节数是不相同的,数是不相同的,VC+6.0VC+6.0则分配则分配4 4个字节)。个字节)。数值是以补码数值是以补码(complement)(complement)表示的。表示的。C程序设计程序设计(2)(2)整型变量的分类整型变量的分类共六种共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)注意:注意:括号表示其中的内容是可选的.3.3 3.3 整型数据整型数据C程序设计程序设计整数类型的有关数据:整数类型的有关数据:类型类型类型类型类型说明符类型说明符类型说明符类型说明符长度长度长度长度数的范围数的范围数的范围数的范围 基本型基本型 int 2int 2字节字节 -32768 -327683276732767 短整型短整型 short 2short 2字节字节 -2 -215152 21515-1-1 长整型长整型 long long 4 4字节字节 -2 -231312 23131-1-1 无符号整型无符号整型 unsigned unsigned 2 2字节字节 0 06553565535 无符号短整型无符号短整型 unsigned short unsigned short 2 2字节字节 0 06553565535 无符号长整型无符号长整型 unsigned long unsigned long 4 4字节字节 0 0(2 23232-1-1)3.3 3.3 整型数据整型数据C程序设计程序设计例如:整数例如:整数1313在内存中实际存放的情况:在内存中实际存放的情况:3.3 3.3 整型数据整型数据C程序设计程序设计(3)整型变量的定义:规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。3.3 3.3 整型数据整型数据例如例如:int a,b int a,b(指定变量、为整型)(指定变量、为整型)unsigned short c,d;unsigned short c,d;(指定变量、(指定变量、为无符号短整型)为无符号短整型)long e,f;(long e,f;(指定变量、为长整型)指定变量、为长整型)C程序设计程序设计例3.2 整型变量的定义与使用#include#include void main()()int a,b,c,d;/*指定、为指定、为整型变量整型变量*unsigned;*指定为无符号整型变指定为无符号整型变量量*12;-24;10;printf(,);,);说明:说明:说明:说明:可以看到不同种类的整型数据可以进行算术运算 运行结果:运行结果:,3.3 3.3 整型数据整型数据C程序设计程序设计例3.3 整型数据的溢出#include#include void main()void main()int a,b;int a,b;a=32767;a=32767;b=a+1;b=a+1;printf(“%d,%dn”,a,b);printf(“%d,%dn”,a,b);说明:说明:说明:说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。运行结果:运行结果:32767,-3276832767,-32768 3.3 3.3 整型数据整型数据C程序设计程序设计3.3.3 整型常量的类型整型常量的类型(1)(1)一个整数,如果其值在一个整数,如果其值在-32768-32768+32767+32767范围内,认为它是范围内,认为它是intint型,它可以赋值给型,它可以赋值给intint型和型和long intlong int型变量。型变量。(2)(2)一个整数,如果其值超过了上述范围,而在一个整数,如果其值超过了上述范围,而在-2147483637-2147483637+2147483647+2147483647范围内,则认为它是为长整型。可以将它赋值给范围内,则认为它是为长整型。可以将它赋值给一个一个long intlong int型变量。型变量。(3)(3)如果所用的如果所用的C C版本(如版本(如Turbo CTurbo C)分配给)分配给short intshort int与与intint型型数据在内存中占据的长度相同,则它的表数范围与数据在内存中占据的长度相同,则它的表数范围与intint型相同。型相同。因此一个因此一个intint型的常量同时也是一个型的常量同时也是一个short intshort int型常量,可以赋型常量,可以赋给给intint型或型或short intshort int型变量。型变量。3.3 3.3 整型数据整型数据C程序设计程序设计3.3.3 整型常量的类型整型常量的类型(4)(4)一个整常量后面加一个字母一个整常量后面加一个字母u u或或U U,认为是,认为是unsigned intunsigned int型,型,如如12345u12345u,在内存中按,在内存中按unsigned intunsigned int规定的方式存放规定的方式存放(存储单元中存储单元中最高位不作为符号位,而用来存储数据最高位不作为符号位,而用来存储数据)。如果写成。如果写成-12345u-12345u,则,则先将先将-12345-12345转换成其补码转换成其补码5319153191,然后按无符号数存储。,然后按无符号数存储。(5)(5)在一个整常量后面加一个字母在一个整常量后面加一个字母l l或或L L,则认为是,则认为是long intlong int型常型常量。量。例如:例如:123l.432L.0L 123l.432L.0L 用于函数调用中。用于函数调用中。如果函数的形参为如果函数的形参为long intlong int型,则要求实参也为型,则要求实参也为long intlong int型。型。3.3 3.3 整型数据整型数据C程序设计程序设计 3.4 3.4 浮点型数据浮点型数据3.4.13.4.1浮点型常量的表示方法浮点型常量的表示方法两种表两种表示形式示形式小数小数指数指数0.1230.1233 3e-3e-3注意注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数1e31e3、1.8e-31.8e-3、-123e-6-123e-6、-.1e-3-.1e-3e3e3、2.1e3.52.1e3.5、.e3.e3、e e C程序设计程序设计 3.4 3.4 浮点型数据浮点型数据规范化的指数形规范化的指数形式:式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.例如例如:123.456:123.456可以表示为:可以表示为:123.456e0,12.3456e1,123.456e0,12.3456e1,1.23456e2,0.123456e3,1.23456e2,0.123456e3,0.0123456e4,0.00123456e0.0123456e4,0.00123456e 其中的其中的1.23456e31.23456e3称为称为“规规范化的指数形式范化的指数形式”。C程序设计程序设计3.4.2浮点型变量浮点型变量 3.4 3.4 浮点型数据浮点型数据(1)(1)浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占一个浮点型数据一般在内存中占4 4个字节个字节(32(32位位)。与整型数据的。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。规范化的指数形式。C程序设计程序设计类型类型 位数位数 数的范围数的范围 有效数字有效数字float 32float 32 10 10-37-37 101038 38 6 6 7 7 位位doubledouble型型 64 64 10 10-307-307 1010308308 15 15 1616位位long double 128 10long double 128 10-4931-4931 10104932 4932 1818 1919位位 3.4 3.4 浮点型数据浮点型数据(2)(2)浮点型变量的分类浮点型变量的分类 浮点型变量分为单精度(浮点型变量分为单精度(floatfloat型)、双精度(型)、双精度(doubledouble型)和长双精度型(型)和长双精度型(long doublelong double)三类形式。)三类形式。C程序设计程序设计例例3.4 浮点型数据的舍入误差浮点型数据的舍入误差#include#include void main()void main()float a,b;float a,b;a=123456.789e5;a=123456.789e5;b=a+20;b=a+20;printf(“%fn”,b);printf(“%fn”,b);说明:说明:说明:说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数运行结果:运行结果:123456.789e5123456.789e5 3.4 3.4 浮点型数据浮点型数据C程序设计程序设计3.4.3浮点型常量的类型浮点型常量的类型 3.4 3.4 浮点型数据浮点型数据 例如例如:f=2.45678*4523.65f=2.45678*4523.65 系统先把系统先把2.456782.45678和和4523.654523.65作为双精度数,然后进作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其行相乘的运算,得到的乘也是一个双精度数。最后取其前前7 7位赋给浮点型变量位赋给浮点型变量f f。如是在数的后面加字母。如是在数的后面加字母f f或或F F(如(如1.65f,654.87F1.65f,654.87F),这样编译系统就会把它们按单),这样编译系统就会把它们按单精度(精度(3232位)处理。位)处理。C C编译系统将浮点型常量作为双精度来处理。编译系统将浮点型常量作为双精度来处理。C程序设计程序设计 3.5 3.5 字符型数据字符型数据 3.5.1 3.5.1 字符常量字符常量aa,A A,1 1abcabc、“a a”(1)(1)用单引号包含的一个字符是字符型常量用单引号包含的一个字符是字符型常量(2)(2)只能包含一个字符只能包含一个字符C程序设计程序设计 3.5 3.5 字符型数据字符型数据 转义字符转义字符 n n 换行换行t t 横向跳格横向跳格 r r 回车回车 反斜杠反斜杠 ddd dddddd ddd表示表示1 1到到3 3位八进制数字位八进制数字xhh hhxhh hh表示表示1 1到到2 2位十六进制数字位十六进制数字C程序设计程序设计例3.5 转义字符的使用#include#include void main()void main()ptintf(ab ct ptintf(ab ct derftgn);derftgn);printf(htibbj kn);printf(htibbj kn);打印机上的显示结果:打印机上的显示结果:fabcgdehjik显示屏上的运行结果:显示屏上的运行结果:fgdejk 3.5 3.5 字符型数据字符型数据 C程序设计程序设计3.5.23.5.2字符变量字符变量 3.5 3.5 字符型数据字符型数据 字符型变量用来存放字符常量,注意只能放一个字符。字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:字符变量的定义形式如下:char c1,c2;char c1,c2;在本函数中可以用下面语句对在本函数中可以用下面语句对c1,c2c1,c2赋值:赋值:c1 c1aa;c2c2 b b;一个字符变量在内存中占一个字节。一个字符变量在内存中占一个字节。C程序设计程序设计3.5.3 3.5.3 字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法注意注意:一个字符数据一个字符数据既可以以字符既可以以字符形式输出,也形式输出,也可以以整数形可以以整数形式输出。式输出。3.5 3.5 字符型数据字符型数据 一个字符常量存放到一个字符变量中,实际一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而上并不是把该字符的字型放到内存中去,而是将该字符的相应的是将该字符的相应的ASCIIASCII代码放到存储单元代码放到存储单元中。这样使字符型数据和整型数据之间可以中。这样使字符型数据和整型数据之间可以通用。通用。C程序设计程序设计例例3.6 3.6 向字符变量赋以整数。向字符变量赋以整数。#include#include void main()void main()char c1,c2;char c1,c2;c1=97;c1=97;c2=98;c2=98;printf(printf(“%c%cn%c%cn”,c1,c2);,c1,c2);printf(printf(“%d%dn%d%dn”,c1,c2);,c1,c2);说明:说明:说明:说明:在第和第在第和第4 4行中,将整数行中,将整数9797和和9898分别赋给分别赋给c1c1和和c2c2,它的作用相当于以下两个赋值语句:,它的作用相当于以下两个赋值语句:c1c1;c2;c2;因为因为a a和和b b的的ASCIIASCII码为码为9797和和9898运行结果:运行结果:97 98 97 98 3.5 3.5 字符型数据字符型数据 C程序设计程序设计例3.7 大小写字母的转换#include#include void main()void main()char c1,c2 char c1,c2;c1=a;c2=b;c1=a;c2=b;c1=c1-32;c2=c2-32;c1=c1-32;c2=c2-32;printf(“printf(“c c cc,c1,c2c1,c2););说明:说明:说明:说明:程序的作用是将两个小写字母程序的作用是将两个小写字母a a和和b b转换成大写字母转换成大写字母A A和和B B。从代码表中可以看到每一个小写字母比它。从代码表中可以看到每一个小写字母比它相应的大写字母的相应的大写字母的ASCIIASCII码大码大3232。语言允许字符数据与整。语言允许字符数据与整数直接进行算术运算。数直接进行算术运算。运行结果:运行结果:3.5 3.5 字符型数据字符型数据 C程序设计程序设计3.5.43.5.4字符串常量字符串常量 3.5 3.5 字符型数据字符型数据 字符串常量是一对双撇号括起来的字符序列字符串常量是一对双撇号括起来的字符序列.合法的字符串常量合法的字符串常量:“How do you do.”,“CHINA”“How do you do.”,“CHINA”,“a”“a”,“$123.45”“$123.45”可以输出一个字符串,如可以输出一个字符串,如printf(“How do you do.”)printf(“How do you do.”);是字是字符常量,符常量,”是字符是字符串常量,二串常量,二者不者不同。同。如:假设被指定为字符变量如:假设被指定为字符变量 :char cchar c c=a;c=a;”a”a”;c c”CHINA”;”CHINA”;结论:结论:不能把一个字符串常量赋给一个字不能把一个字符串常量赋给一个字符变量。符变量。C程序设计程序设计 如:如果有一个字符串常量如:如果有一个字符串常量”CHINACHINA”,实际上在内存中是:实际上在内存中是:CHINA0 它占内存单元不是个字符,而是个字符,最后一个它占内存单元不是个字符,而是个字符,最后一个字符为字符为。但在输出时不输出。但在输出时不输出。3.5 3.5 字符型数据字符型数据 规定规定在每一个字符串常量的结尾加一个在每一个字符串常量的结尾加一个“字符字符串结束标志串结束标志”,以便系统据此判断字符串是否结束。,以便系统据此判断字符串是否结束。规定以字符规定以字符作为字符串结束标志。作为字符串结束标志。C程序设计程序设计 3.6 3.6 变量赋初值变量赋初值 字符串常量字符串常量(1)(1)语言允许在定义变量的同时使变量初始化语言允许在定义变量的同时使变量初始化如如:int a=3;/:int a=3;/指定为整型变量,初值为指定为整型变量,初值为 float f=3.56;/float f=3.56;/指定为浮点型变量,初值为指定为浮点型变量,初值为.56 .56 char c=a;/char c=a;/指定为字符变量,初值为指定为字符变量,初值为aa(2)(2)可以使被定义的变量的一部分赋初值。可以使被定义的变量的一部分赋初值。如如:int a,b,c=5:int a,b,c=5;表示指定、为整型变量,表示指定、为整型变量,但只对初始化,但只对初始化,c c的初值为的初值为(3)(3)如果对几个变量赋以同一个初值,如果对几个变量赋以同一个初值,应写成:应写成:int a=3,b=3,c=3;int a=3,b=3,c=3;表示、的初值都是。表示、的初值都是。不能写成不能写成 int a=b=c3;int a=b=c3;C程序设计程序设计 3.7 3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算 说明:说明:这种类型转换是由系这种类型转换是由系统自动进行的。统自动进行的。混合运算:整型(包括混合运算:整型(包括int,short,longint,short,long)、浮点型(包)、浮点型(包括括float,doublefloat,double)可以混合运算。在进行运算时,不同)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型类型的数据要先转换成同一类型,然后进行运算然后进行运算.C程序设计程序设计 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式3.8.1 3.8.1 运算符简介运算符简介 的运算符有以下几类:的运算符有以下几类:(1)(1)算术运算符算术运算符 (+-*/%+-*/%)(2)(2)关系运算符(关系运算符(!)(3)(3)逻辑运算符逻辑运算符 (!(!|)(4)(4)位运算符位运算符 (|)(5)(5)赋值运算符赋值运算符 (及扩展运算符)(及扩展运算符)(6)(6)条件运算符条件运算符 (?:)(?:)(7)(7)逗号运算符逗号运算符 (,),)(8)(8)指针运算符指针运算符 (*和)和)(9)(9)求字节数运算符()求字节数运算符()(10)(10)强制类型转换运算符(强制类型转换运算符((类型)类型))(11)(11)分量运算符(分量运算符(-)(12)(12)下标运算符()下标运算符()(13)(13)其他(如函数调用运算符()其他(如函数调用运算符()C程序设计程序设计3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式(1)(1)基本的算术运算符基本的算术运算符:(加法运算符,或正值运算符。如(加法运算符,或正值运算符。如:、)、)(减法运算符,或负值运算符。如(减法运算符,或负值运算符。如:、)、)*(乘法运算符。如(乘法运算符。如:*)(除法运算符。如(除法运算符。如:)(模运算符,或称求余运算符,两侧均应为整型数据,(模运算符,或称求余运算符,两侧均应为整型数据,如如:的值为)。的值为)。C程序设计程序设计3.8.2 3.8.2 算术运算符和算术表达式算术运算符和算术表达式 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式(2)(2)算术表达式和运算符的优先级与结合性基本的算术运算符算术表达式和运算符的优先级与结合性基本的算术运算符:用算术运算符和括号将运算对象用算术运算符和括号将运算对象(也称操作数)连接起来的、也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。运算对象包括常符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。量、变量、函数等。例如例如:*.5.5aa 是一个合法的表达式是一个合法的表达式C程序设计程序设计 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式(3)(3)强制类型转换运算符强制类型转换运算符 可以利用强制类型转换运算符将一个表达式转换成所需类可以利用强制类型转换运算符将一个表达式转换成所需类型。型。一般形式一般形式:(类型名)(表达式)(类型名)(表达式)例如:例如:(double)(double)将转换成将转换成doubledouble类型类型(int)(x+y)(int)(x+y)将将x+yx+y的值转换成整型的值转换成整型(float)(float)(5%35%3)将将5%35%3的值转换成的值转换成floatfloat型型C程序设计程序设计例3.8 强制类型转换。#include#include voidvoid()();();();printf(x=%f printf(x=%f,i=%dn i=%dn,x x,i);i);说明:说明:说明:说明:有两种类型转换,一种是在运算时不必用户指定,有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如系统自动进行的类型转换,如3+6.53+6.5。第二种是强制类型。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类转换。当自动类型转换不能实现目的时,可以用强制类型转换。型转换。运行结果:运行结果:x x3.6000003.600000,i=3 i=3 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式C程序设计程序设计(4)(4)自增、自减运算符自增、自减运算符 作用是使变量的值增或减如:作用是使变量的值增或减如:,(在使用之前,先使的值加(减),(在使用之前,先使的值加(减),(在使用之后,使的值加(减),(在使用之后,使的值加(减)3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式i+i+与与+i+i的区别:的区别:是先执行后,再使用的值;是先执行后,再使用的值;是先使用的值后,再执行。是先使用的值后,再执行。例如:例如:;i i的值先变成的值先变成4,4,再赋给再赋给,j,j的值均为的值均为 ;先将先将 i i的值的值3 3赋给赋给,的值为,然后变为的值为,然后变为C程序设计程序设计 3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式(5)(5)有关表达式使用中的问题说明有关表达式使用中的问题说明ANSI CANSI C并没有具体规定表达式中的子表达式并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。的求值顺序,允许各编译系统自己安排。语言中有的运算符为一个字符,有的运算语言中有的运算符为一个字符,有的运算符由两个字符组成符由两个字符组成 ,为避免误解,最好采取大,为避免误解,最好采取大家都能理解的写法。家都能理解的写法。在调用函数时,实参数的求值顺序,标准在调用函数时,实参数的求值顺序,标准并无统一规定。并无统一规定。C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换赋值符号赋值符号“”就是赋就是赋值运算符,它的作用是值运算符,它的作用是将一个数据赋给一个变将一个数据赋给一个变量。如量。如“”的作的作用是执行一次赋值操作用是执行一次赋值操作(或称赋值运算)。把(或称赋值运算)。把常量赋给变量。也常量赋给变量。也可以将一个表达式的值可以将一个表达式的值赋给一个变量赋给一个变量.3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换将浮点型数据(包括单、双精将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点度)赋给整型变量时,舍弃浮点数的小数部分。数的小数部分。将整型数据赋给单、双精度变将整型数据赋给单、双精度变量时,数值不变,但以浮点数形量时,数值不变,但以浮点数形式存储到变量中式存储到变量中将一个将一个doubledouble型数据赋给型数据赋给floatfloat变量时,截取其前变量时,截取其前面面7 7位有效数字,存放到位有效数字,存放到floatfloat变变量的存储单元(量的存储单元(4 4个个字节)中。但应注意数值范围不字节)中。但应注意数值范围不能溢出。能溢出。3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换字符型数据赋给整型变量时,字符型数据赋给整型变量时,由于字符只占由于字符只占1个字节,而整型变个字节,而整型变量为个字节,因此将字符数据量为个字节,因此将字符数据(个二进位)放到整型变量存(个二进位)放到整型变量存储单元的低位中。储单元的低位中。将一个将一个int、short、long型数据型数据赋给一个赋给一个char型变型变量时,只将其低量时,只将其低8位原封不动地送位原封不动地送到到char型变量(即型变量(即截断)。截断)。将带符号的整型数据(将带符号的整型数据(int型)型)赋给赋给long型变量时,要进行符号扩型变量时,要进行符号扩展,将整型数的展,将整型数的16位送到位送到long型低型低16位中位中:3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式将将unsigned intunsigned int型数据赋给型数据赋给long long intint型变量时,不存在符号扩展问型变量时,不存在符号扩展问题,只需将高位补即可。将一个题,只需将高位补即可。将一个unsignedunsigned类型数据赋给一个占字节类型数据赋给一个占字节数相同的非数相同的非unsignedunsigned型整型变量,型整型变量,将将unsignedunsigned型变量的内容原样送到型变量的内容原样送到非非unsignedunsigned型变量中,但如果数据范型变量中,但如果数据范围超过相应整型的范围,则会出现围超过相应整型的范围,则会出现数据错误。数据错误。将非将非unsignedunsigned型数据赋给长度型数据赋给长度相同的相同的unsignedunsigned型变量,也是原样型变量,也是原样照赋(符号位也作为数值一起传送)照赋(符号位也作为数值一起传送)。3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 C程序设计程序设计例3.9 有符号数据传送给无符号变量。#include#include void mainvoid main()()unsigned unsigned;int int;print print(nn,);,);说明:说明:说明:说明:“%u”是输出无符号数时所用的格式符。如果为正值,且在32767之间,则赋值后数值不变。运行结果:运行结果:3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式在赋值符在赋值符“”之前加上其之前加上其他运算符,可以构成复合的他运算符,可以构成复合的运算符。运算符。例如例如:A+=3 A+=3 等价于等价于 a=a+3 a=a+3*y+8 y+8 等价于等价于x=x*(y+8)x=x*(y+8)x%=x%=等价于等价于 x xx%3x%3以以“”为例来说明,为例来说明,它相当于使进行一次自加它相当于使进行一次自加()的操作。即先使加()的操作。即先使加,再赋给。,再赋给。3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 C程序设计程序设计1 1赋值运算符赋值运算符2 2类型转换类型转换3 3复合的赋值运算符复合的赋值运算符4 4赋值表达式赋值表达式由赋值运算符将一个变量和由赋值运算符将一个变量和一个表达式连接一个表达式连接起来的式子称为起来的式子称为“赋值表达赋值表达式式”。