第3章_数据类型_第1页
第3章_数据类型_第2页
第3章_数据类型_第3页
第3章_数据类型_第4页
第3章_数据类型_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、3.1 C3.1 C的数据类型的数据类型3.2 3.2 常量与变量常量与变量3.3 3.3 整型数据整型数据3.4 3.4 浮点型数据运行浮点型数据运行3.5 3.5 字符型数据字符型数据 3.变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值运算符和赋值表达式 3.10 逗号运算符和逗号表达式 一个程序包括两个方面:一个程序包括两个方面:1. 1. 数据描述:加工处理的数据,及其组织形式数据描述:加工处理的数据,及其组织形式 C C语言通过定义数据类型,来给出具体的数据描述语言通过定义数据类型,来给出具体的数据描述简单数据类型:整型、实型、字符型等。

2、简单数据类型:整型、实型、字符型等。数据组织形式:反映数据之间的联系,由程序设计人员数据组织形式:反映数据之间的联系,由程序设计人员根据应用需要构造根据应用需要构造2. 2. 算法描述:加工处理的操作步骤算法描述:加工处理的操作步骤注意:考虑最佳注意:考虑最佳数据结构和算法数据结构和算法用指针、结构体还可构成链表、树、栈等复杂的数据结构用指针、结构体还可构成链表、树、栈等复杂的数据结构 第第 一一 章章 C C语言概述语言概述 第第 二二 章章 算法介绍算法介绍 第第 三三 章章 数据类型、运算符、表达式数据类型、运算符、表达式 第第 四四 章章 顺序程序设计顺序程序设计 第第 五五 章章 选

3、择结构程序设计选择结构程序设计 第第 六六 章章 循环结构程序设计循环结构程序设计 第第 七七 章章 数组数组 第第 八八 章章 函数函数 第第 九九 章章 预处理预处理 第第 十十 章章 指针指针 第第 十一十一 章章 结构体和共用体结构体和共用体 第第 十二十二 章章 位运算位运算 第第 十三十三 章章 文件文件3.2.1 常量和符号常量n在程序运行过程中在程序运行过程中, ,其值不能被改变的量称为常量其值不能被改变的量称为常量n常量区分为不同的类型:常量区分为不同的类型:整型 100,125,-100,0实型 3.14 , 0.125,-3.789字符型 a, b,2字符串 a, ab,

4、1232运行结果: total=300- - 在程序执行过程中,其值可以变化的量在程序执行过程中,其值可以变化的量1.1.变量名:合法的标识符变量名:合法的标识符2.2.标识符:标识符: 用来标识变量名、常量名、数组名、类型名、文件名的有用来标识变量名、常量名、数组名、类型名、文件名的有效字符序列效字符序列。各种名字各种名字( (函数、数组、文件、结构体等函数、数组、文件、结构体等) )都是标识符都是标识符字母、数字、下划线,第一个字符必须是字母或下划线字母、数字、下划线,第一个字符必须是字母或下划线合法:合法:ab,_12,a3c5ab,_12,a3c5非法:非法:5b5b,a$e,wang

5、-1a$e,wang-1标识符长度标识符长度有效长度一般有效长度一般1818个字符(超过个字符(超过8 8个前个前8 8个有效)个有效)建议标识符名不要超过建议标识符名不要超过8 8个字符个字符区别大小写区别大小写case sensitivecase sensitiveA A,a a是两个不同的标识符是两个不同的标识符保留字保留字(32(32个个) ):语言成份,特定含义、专用,不作标识符:语言成份,特定含义、专用,不作标识符3.3.变量的使用:按变量的使用:按先定义后使用先定义后使用的原则进行的原则进行定义:类型名定义:类型名 变量表;变量表; int x, yint x, y; ;使用:赋

6、值,引用等使用:赋值,引用等4.4.变量变量 - - 内存存储单元内存存储单元变量对应单元存放变量的值变量对应单元存放变量的值变量名和变量值是不同概念变量名和变量值是不同概念不同类型变量的内存单元大小不同不同类型变量的内存单元大小不同指定某一变量的类型,则在编译时要检查该指定某一变量的类型,则在编译时要检查该变量所进行的运算是否合法。变量所进行的运算是否合法。 如如float afloat a; a a2 23变量名变量名变量值变量值存储单元存储单元a5.5.变量的赋值变量的赋值n定义变量时,赋初值定义变量时,赋初值int x = 5;int x = 5;n独立的赋值语句独立的赋值语句变量变量

7、 = = 表达式表达式n调用输入函数调用输入函数int x;int x;scanf(%d, &x);scanf(%d, &x);n例:例:int x=5, y=6, t;int x=5, y=6, t; t=x; x=y; y=t; t=x; x=y; y=t;3.3.13.3.1整型常量整型常量 1、十进制整数、十进制整数:如如 29, -36 , 0 2、八进制整数、八进制整数:以以0开头开头,后跟后跟07中的若干数字中的若干数字; 如如:0123 (83)103、十六进整制、十六进整制:以以0 x开头开头,后跟后跟09,A,B,C,D,E,F(可小写)中的(可小写)中的

8、若干字符若干字符,如如0 xA2 (162)10 以数字以数字0开头表示的整数开头表示的整数 例例:0235, 0146, 012等等. 0235=28238515710 014618248610210 012(182)1010十六进制十六进制 以以0 x开头的整型数开头的整型数 如如: 0 x16, 0 x28 0 xA2 (162)10 八进制八进制八进制和十六进制八进制和十六进制1. 1. 整数型变量的定义整数型变量的定义整数基本类型为整数基本类型为intint,即,即integerinteger的缩写的缩写int a1, b2, c3;int a1, b2, c3;/ /* * 定义定

9、义3 3个整数型变量个整数型变量 * */ /2. 2. 整数型变量的取值范围整数型变量的取值范围 int : int : 占两个字节占两个字节1616位位 按按ANSIANSI标准,取值范围是标准,取值范围是 32768, 3276732768, 32767但实际编译系统的规定不尽相同但实际编译系统的规定不尽相同例:例:int i ,j; i=10;j=-10;/int i ,j; i=10;j=-10;/* *以补码形式存放,正数的补以补码形式存放,正数的补码和其原码相同,负数的补码为正数补码取反后加码和其原码相同,负数的补码为正数补码取反后加1 1* */ /1616位数字中,最左面的一

10、位数字是标识符号的,正数为位数字中,最左面的一位数字是标识符号的,正数为0 0,负,负数为数为1 1求负数补码:求负数补码:求该数的绝对值的二进制;求该数的绝对值的二进制; 对其值求反加对其值求反加1i10 数据数据i存放示意图存放示意图数据数据i在内存中实际存放情况在内存中实际存放情况0 0 0 0 0 0 0 00 0 0 0 1 0 1 0-10 j数据数据j存放示意图存放示意图数据数据j在内存中实际存放情况在内存中实际存放情况1 1 1 1 1 1 1 11 1 1 1 0 1 1 0%d, %o, %x, %ld, %un整数类型的有关数据:整数类型的有关数据:intint型变量最大

11、允许值为型变量最大允许值为3276732767, ,如果大于此数,将产生溢出如果大于此数,将产生溢出 例例3.3 3.3 整型数据的溢出情况整型数据的溢出情况 main( ) main( ) int a,b; int a,b; a=a=3276732767; b=a+1; ; b=a+1; printf(“%d,%d”,a,b); printf(“%d,%d”,a,b); 运行结果:运行结果:3276732767, -, -3276832768 此种情况,编译系统不会报错,这要靠编程者的细心和经验此种情况,编译系统不会报错,这要靠编程者的细心和经验。0 1 1 1 1 1 1 1 1 1 1

12、1 1 1 1 1a: 32767 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b: -32768 整型数据格式化输入输出整型数据格式化输入输出scanf / printf的格式控制符的格式控制符%d以以十进制十进制输入输出一个整数输入输出一个整数%o以以八进制八进制输入输出一个整数输入输出一个整数%x以以十六进制十六进制输入输出一个整数输入输出一个整数%md等等 输出时指定占位数输出时指定占位数#include /* P12例例2-3 */void main() printf(%d,%o,%xn, 10, 10, 10);printf(%d,%d,%dn, 10, 010,

13、 0 x10);printf(%d,%xn, 012, 012);例例#include void main()int a, b ,c; c15;scanf(%d%d, &a, &b);printf(“%d%5d%dn, a, b,c);3.4.1 3.4.1 实型常量的表示方法实型常量的表示方法 实数实数又称又称浮点数浮点数 1.1.十进制形式:由数字和小数点组成,十进制形式:由数字和小数点组成, 如:如:3.14, 0.26, 0.0, 326.453.14, 0.26, 0.0, 326.45,.123.123 2.2.指数形式:由尾数部分、字母指数形式:由尾数部分、字母e

14、 e 或或E E、指数部分组成。、指数部分组成。 如:如:48.62e+12,48.62e+12,其中:其中:48.6248.62为尾数,为尾数,+12+12为指数,为指数, e e为基数为基数10,10,它表示它表示48.6248.62 1010 12 12 C C规定:规定:e e的前面要有数字,的前面要有数字,e e的后面要有整数。的后面要有整数。 如如 e3, 1e0.2e3, 1e0.2浮点型变量分为以下三类形式。浮点型变量分为以下三类形式。类型类型比特数比特数 有效数字有效数字 数值范围数值范围floatfloat32326-76-73.4(10381038)doubledoubl

15、e646415-1615-161.7( 1030810308)long long doubledouble12812818-1918-191.2( 104932104932)浮点型变量存储是估计值:浮点型变量存储是估计值: 实型数据的舍入误差:实型数据的舍入误差: 由于存储单元位数有限,有效位以外由于存储单元位数有限,有效位以外 的数字将被舍去,由此产生了误差。的数字将被舍去,由此产生了误差。main( ) main( ) float a,b; float a,b; a=123456.789e5; a=123456.789e5; b=a+20;b=a+20;printf (a=%fnb=%fn

16、,a,b,c); printf (a=%fnb=%fn,a,b,c); 输出结果:输出结果: a=12345678848.000000 a=12345678848.000000 b=12345678848.000000 b=12345678848.000000 a a的值比的值比2020大的多,大的多,a+20a+20的理论值是的理论值是12345678920,12345678920,而实而实型变量有效位只有型变量有效位只有7 7位,因此,后面的数字是无意义的,应位,因此,后面的数字是无意义的,应避免将一个很大的数和一个很小的数相加或相减,以免造避免将一个很大的数和一个很小的数相加或相减,以免

17、造成误差。成误差。n格式符%f小数形式输出(有效数6位)%e指数形式输出%g%g根据数值大小,自动选取根据数值大小,自动选取e e,f f 格式中占位数较少格式中占位数较少者者%-m.nf%-m.nf等指定输出总位数等指定输出总位数m m,小数位数,小数位数n n%m.nf%m.nf等指定输出总位数等指定输出总位数m m,小数位数,小数位数n n 函数数据类型格式符printffloat%f, %e double %f, %escanf float %f, %e double %lf, %lemain( ) main( ) float x,yfloat x,y; x=111111.111x=1

18、11111.111;y=222222.222y=222222.222; printf (“x+y=%fn”,x1+y1)printf (“x+y=%fn”,x1+y1); 运算结果:运算结果: x+y=333333.328125x+y=333333.3281253.5.1字符常量字符常量字符常量:用一对单引号字符常量:用一对单引号(不分左右)(不分左右)括起的一个字符,如括起的一个字符,如a, A , # , 9说明:说明:1. 字符常量的值是该字符在字符常量的值是该字符在ASCII码中的码值码中的码值(P374)。 2. a 和和A 是两个不同的字符常量,是两个不同的字符常量,a 97, A

19、 65 3. 开头的字符序列称为特殊形式的字符常量(转义字符)开头的字符序列称为特殊形式的字符常量(转义字符) 常用的转义字符功能及码值常用的转义字符功能及码值 转义字符转义字符 功功 能能 十进制的十进制的ASCII码值码值 a 响铃响铃 7 b 退格退格 8 f 换页换页 12 n 换行换行 10 r 回车回车 13 t 横向跳八格横向跳八格 9 ddd 三位八进制三位八进制 101 A xhh 两位十六进制两位十六进制 x42 B 例例main ( ) printf (-n); printf (“-ab-ct-derftgn); printf (htibbj-kn); 运行结果:运行结果

20、:- f gde h j-k 3.5.2 字符变量 字符变量:用于存放一个字符常量。 字符变量的定义形式: 如:char c1,c2; /*定义c1,c2为字符型变量,占一个字节*/ c1=a; c2=b; /*将字符常量 a, b 赋给c1和c2 */字符常量存放到字符变量中,是把其字符常量存放到字符变量中,是把其ASCII码值码值存放到内存中,由于其存储存放到内存中,由于其存储形式与整数存储形式相似,所以整、字符型数据之间可通用。形式与整数存储形式相似,所以整、字符型数据之间可通用。main( ) char c1,c2; c1=97; c2=98; printf (c1=%c,c2=%c

21、n,c1,c2); printf (c1=%d,c2=%d n,c1,c2); 运行结果:运行结果:c1=a, c2=b c1=97,c2=98c1c29798内存中变量内存中变量c1、c2的值的值c1c2内存中变量内存中变量c1、c2实际存储形式实际存储形式0 1 1 0 0 0 0 10 1 1 0 0 0 1 0main( ) char c1, c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf (c1=%c, c2=%cn, c1,c2); 运行结果:运行结果:c1=A, c2=B 0 1 1 0 0 0 0 1a存储(存储(ASCII码码)“%c”“

22、%d”a97输出格式符输出格式符显示显示main( ) int i; char c; c=97; i=a; printf (%c , %dn , c, c); printf ( %c , %dn , i, i ); 运行结果:运行结果:a , 97 a , 97 在在Turbo C 中,字符数据占一个字节,当中,字符数据占一个字节,当ASCII 码值在码值在128255之间时,其最高位为之间时,其最高位为1,占据了符号位,以数据输出时为占据了符号位,以数据输出时为负数,以字符输出时是对应的字符,以无符号数据输出时,也负数,以字符输出时是对应的字符,以无符号数据输出时,也是其对应的数据。是其对应

23、的数据。 字符串常量:用一对双引号(不分左右)括起的字符序列。字符串常量:用一对双引号(不分左右)括起的字符序列。 如:如:BEIJINGCHINA$123a字符串使用的有关说明:字符串使用的有关说明: 字符串可出现在输出函数中;字符串可出现在输出函数中; 如:如:printf (This is a C program. n); 2. 字符常量与字符串常量是不同的字符常量与字符串常量是不同的; 如:如:char c1, c2; c1=a; 可以可以 c2=a ; 错误错误 不能把字符串赋给字符型变量,字符串在内存中存放时,系统自动加字符不能把字符串赋给字符型变量,字符串在内存中存放时,系统自动

24、加字符串结束符串结束符 0,该字符在,该字符在ASCII码中的码值为码中的码值为0,是空操作符,即无动,是空操作符,即无动作,不显示。作,不显示。 a 0 a3. C3. C中无字符串变量,字符串可以赋给字符数组中无字符串变量,字符串可以赋给字符数组; ;4. 4. 若字符串为若字符串为 CHINA CHINA , ,它在内存中的实际存储形式是:它在内存中的实际存储形式是: 其长度是其长度是6 6而不是而不是5,5,最后一个字符是最后一个字符是0,0,是系统自动加上的,是系统自动加上的,不能人为加上此字符,它既无显示或打印输出也无任何动作。不能人为加上此字符,它既无显示或打印输出也无任何动作。

25、 C H I N A 0 1.定义的同时给变量赋初值定义的同时给变量赋初值 如:如:int a=3; float b=3.1415; char c=x; 2.定义变量时,可以对其中的一部分变量赋初值定义变量时,可以对其中的一部分变量赋初值 如:如: int a=3, b, c, d=8; 3.把一个常量赋给不同变量时,最好分别进行。把一个常量赋给不同变量时,最好分别进行。 如:如:int a=b=c=3; 而应写为:而应写为:int a=3,b=3,c=3; 4.初始化是在程序运行时,执行本函数时赋以初值的。初始化是在程序运行时,执行本函数时赋以初值的。 如:如:int a=3; 相当于:相当

26、于:int a; a=3; 在在C C语言中,整、实、字符型数据间可以混合运算语言中,整、实、字符型数据间可以混合运算 一、不同类型数据间进行运算时,要转换成同一类型一、不同类型数据间进行运算时,要转换成同一类型 转换过程中,低类型向高类型靠拢,然后进行运算,不同类型之间转转换过程中,低类型向高类型靠拢,然后进行运算,不同类型之间转换如下图所示,横向左箭头为必转,纵向箭头表示有条件类型转换。换如下图所示,横向左箭头为必转,纵向箭头表示有条件类型转换。 高高 double float long unsigned 低低 int char, short例如:例如:10+a1.58765.1234b例

27、:例:T3-7-3.c main( ) float a; double b; a=10 + a + 1.5 - 8765.1234 * b; b=10 + a + 1.5 - 8765.1234 * b; printf (a=%f , b=%f n, a,b); 运行结果:运行结果:a=-858873.562500 , b=-858873.5932003.8.1 C3.8.1 C运算符简介运算符简介 除控制语句除控制语句(if, while,for)(if, while,for)和输入和输入/ /输出函数;大部分操作都由运算符输出函数;大部分操作都由运算符处理。处理。 1. 1. 算术运算符:

28、算术运算符:+ + 、- -、* * 、 / / 、% % 2. 2. 关系运算符:关系运算符: 、=、 、=、= = =、!= != 3. 3. 逻辑运算符:逻辑运算符:! !、&、| | 4. 4. 位运算符:位运算符: 、 、| |、 、& & 5. 5. 赋值运算符:赋值运算符:= = 6. 6. 条件运算符:条件运算符:? ? : 7. 7. 逗号运算符:逗号运算符:, , 8. 8. 指针运算符:指针运算符:* *、 & & 9. 9. 求字节数运算符:求字节数运算符:sizeof sizeof 10. 10. 强制类型转换运算符:强制类型转

29、换运算符:( (类型类型) ) 11. 11. 分量运算符:分量运算符: 、12. 12. 下标运算符:下标运算符: 、 13. 13. 其它运算符:如函数调用其它运算符:如函数调用1、基本的算术运算符、基本的算术运算符 +:加法或正值运算符,如:加法或正值运算符,如:2+3 、+5 -:减法或负值运算符,如:减法或负值运算符,如:8-3 、-6 *:乘法运算符,:乘法运算符, 如:如:3*5 / : 除法运算符,除法运算符, 两则可以是整或实型数据。两则可以是整或实型数据。 %:求余运算符:求余运算符 两则必是整型数据。两则必是整型数据。例例. 整型数据除法运算整型数据除法运算 main (

30、 ) int a,b,c; a = 5;b = 3; c = a / b; printf(“c=%dn”, c); 运算结果:运算结果:c=1 例例. 实型数据除法运算实型数据除法运算 main ( ) float a,b,c; a = 5;b = 3; c = a / b; printf (“%fn”,c); 运算结果:运算结果:1.666667 算术表达式:算术表达式: 用算术运算符和括号将运算对象(常量、变量、函数)连接起用算术运算符和括号将运算对象(常量、变量、函数)连接起来的,符合来的,符合C C语言语法规则的式子。语言语法规则的式子。 如:如:a a* *b/c-1.5+ab/c-

31、1.5+a在在C C语言中,运算符共有语言中,运算符共有1515个优先级,其中算术运算符的优先个优先级,其中算术运算符的优先级是:级是: * *、/ / 、% %(3 3级)级) + + 、- -(4 4级)级)算术运算符的结合方向:从左向右算术运算符的结合方向:从左向右 如:如:a-b+c a-b+c :算符优先级相同,结合性:从左向右:算符优先级相同,结合性:从左向右 a-ba-b* *c c :算符:算符* *的优先级高于的优先级高于- - 若运算符两侧的运算对象类型不同时,低类型向高类型转换若运算符两侧的运算对象类型不同时,低类型向高类型转换一般形式:一般形式: (类型名)(类型名)

32、(表达式)(表达式) 如:(如:(double)a 将将a转换为转换为double型型 (int)(x+y) 将将x+y的值转换为整型的值转换为整型 (float)(5%3) 将将5%3的值转换成单精度实型的值转换成单精度实型 说明:说明:1.(int)(x+y) 与与(int)x+y 意义不同意义不同 2. 类型转换后得到一个中间值,原变量类型不发生变化。类型转换后得到一个中间值,原变量类型不发生变化。 例例T3-8.c main( ) float x , i; x=3.6; i=(int) (x); printf (“x=%f, i=%fn”, x, i); 运算结果:运算结果:x=3.6

33、00000, i=3.000000 例例main( ) float a,b,c,d; int e,f ; a=5; b=3; c=a/b; d=(float)(5%3); e=(int)(a/3); f=(int) (b+3.8); printf(“c=%f, d=%f, e=%d, f=%dn”,c,d,e,f); 运算结果:运算结果:c=1.666667, d=2.000000, e=1, f=6 思考:思考:程序运行期间,程序运行期间,a,b的值发生变化没有?的值发生变化没有? :增:增1 1运算符,使变量值增运算符,使变量值增1 1。 :减:减1 1运算符,使变量值减运算符,使变量值减

34、1 1。 如:如:+i ,-i+i ,-i:在使用变量:在使用变量i i之前,先使变量之前,先使变量i i加(减)加(减)1 1。 i+,i-i+,i-:在使用变量:在使用变量i i之后,使变量之后,使变量i i值加(减)值加(减)1 1。 例例T T- - -.c .c main( ) main( ) int i,j;int i,j;i=3;i=3;j=+i; j=+i; printf (“i=%d,j=%dn”,i,j); printf (“i=%d,j=%dn”,i,j); 运算结果:运算结果:i=4,j=4i=4,j=4 例例main( ) int i,j; i=3;j=i+; pri

35、ntf (i=%d,j=%dn,i,j); 运算结果:运算结果:i=4,j=3 说明:说明: 1.+,-运算符只能用于变量,而不能用于常量和表达式。 如a+,b-是正确的,而5+,(x+y)-却是错误的。 2.+,-运算符的结合方向是从右向左。例例main( ) int i; i=3; printf (“i1=%dn”,-i+);printf (“i2=%dn”,i); 运算结果:运算结果:i1=-3 i2=4 例例T3-8-5.c main( ) int i;i=3; printf (“i1=%dn”,-+i);printf (“i2=%dn”,i); 运算结果:运算结果:i1= - 4 i

36、2= 4(1)C中的运算符和表达式中的运算符和表达式: 表达式中的表达式中的子表达式子表达式的的求值顺序求值顺序各编译系统是各编译系统是有差别有差别的。的。 如对表达式:如对表达式: a=f1( )+f2( ) a=f1( )+f2( ) 一般情况下是先调用一般情况下是先调用f1( ),f1( ),再调用再调用f2( ),f2( ),先后次序无关紧要,先后次序无关紧要,但有些情况,结果却不同,编程时要注意所用的编译系统。但有些情况,结果却不同,编程时要注意所用的编译系统。 如表达式:如表达式: (i+) + (i+) + (i+) (i+) + (i+) + (i+) 有的系统的求值顺序是先求

37、第一个,再求第二个有的系统的求值顺序是先求第一个,再求第二个, ,最后求第三最后求第三个子表达式,其结果是:个子表达式,其结果是: 3+4+5=12, 3+4+5=12, 最后最后i i的值为的值为6 6 而在而在Turbo CTurbo C中却有所不同:中却有所不同:例例main( ) int i=3,j=3,k,q; k=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); printf (i=%d,j=%d,k=%d,q=%dn,i,j,k,q); 运算结果:运算结果:i=6,j=6,k=9,q=18(TC)i=6,j=6,k=9,q=16(VC)(2)(2)在在C C语言

38、中运算符的确定语言中运算符的确定 在由多个字符组成的表达式中,应尽可能多地在由多个字符组成的表达式中,应尽可能多地从左向右将若干个字符组成从左向右将若干个字符组成一个运算符一个运算符, , 必要时加:括号或空格,以避免混淆必要时加:括号或空格,以避免混淆(这是好的设计程序风(这是好的设计程序风格)格)。 如:如:i+j i+j 其结合性是:其结合性是:(i+) +j (i+) +j 而不是:而不是:i+(+j)i+(+j)。 结论:不写别人甚至自己都看不懂的程序,也不写那些不知道系统会怎样结论:不写别人甚至自己都看不懂的程序,也不写那些不知道系统会怎样运行的程序运行的程序基本的算术运算符基本的

39、算术运算符算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性强制类型转换运算符强制类型转换运算符自增、自减运算符自增、自减运算符表达式使用的进一步说明表达式使用的进一步说明1 1、赋值运算符、赋值运算符 “ “=”=”是赋值号,也是赋值运算符是赋值号,也是赋值运算符 功能:将赋值号右边表达式的值赋给赋值号左边的变量,赋值功能:将赋值号右边表达式的值赋给赋值号左边的变量,赋值 号同时含有计算的功能。号同时含有计算的功能。 如:如:a=3; b=xa=3; b=x* *y; y; a,b a,b变量中原来不管存放什么值,执行赋值语句后,变量中原来不管存放什么值,执行赋值语句后,

40、新值将新值将 取代旧值取代旧值 变量类型的不同,所接收的数据也是不同的,当赋值运算符两侧的数据类型不一致时,在赋值时要进行类型转换 (1) 实型数据赋给整型变量时,舍去实型数据的小数部分 如:int i; i=3.56; (2) 整型数据赋给实型变量时,数值不变,但以浮点形式 存放于内存。 (3) double型数据赋给float变量,截取7位有效数字存放float单元,应注意数值溢出 (4)字符型数据赋给整型变量 无符号字符型赋给整型量:将其存放在整型变量的低8位中,而高位以0补齐 带符号字符型赋给整型量时若最高位为1(负数),则整型变量的高8位补1,若最高位为0(正数),则整型变量高8位补

41、0。 (5) int, short, long型数据赋给char变量,则将其低位赋给char型变量 (6) long型数据赋给int型变量,将long型数据的低16位赋给int型变量(7)将unsigned int型数据赋给 long 型变量时 将unsigned short型数据送到long int型变量的低16位,longint的变量高16位补0 若无符号数据赋给相同长度的带符号的变量,则原样赋给。 (8) 将带符号的数赋给长度相同的无符号变量 2 2、类型转换、类型转换 变量类型的不同,所接收的数据也是不同的,当赋值运算变量类型的不同,所接收的数据也是不同的,当赋值运算 符两侧的数据类型

42、不一致时,在赋值时要进行类型转换符两侧的数据类型不一致时,在赋值时要进行类型转换 (1)(1)实型数据赋给整型变量时,舍去实型数据的小数部分实型数据赋给整型变量时,舍去实型数据的小数部分 如:如:int i; i=3.56; int i; i=3.56; 结果结果i i的值为的值为3 3 (2)(2)整型数据赋给实型变量时,数值不变,但以浮点形式整型数据赋给实型变量时,数值不变,但以浮点形式 存放于内存。存放于内存。 如:如: float a=23; float a=23; 先将先将2323转换成转换成23.00000023.000000,然后送,然后送a a中中 double b=23; d

43、ouble b=23; 先将先将2323转换为转换为23.00000000000000,23.00000000000000,然后送然后送b b中中 (3) double(3) double型数据赋给型数据赋给floatfloat变量变量 截取其前面的截取其前面的7 7位有效数字,存放到位有效数字,存放到floatfloat单元,应注意数值单元,应注意数值 范围不能溢出,如:范围不能溢出,如: float f; float f; double d=123.45678 double d=123.45678e e65; 65; f=d; f=d; 由于数据溢出,由于数据溢出,f f将得到错误的值将得

44、到错误的值 float float 数据赋给数据赋给doubledouble变量时,数值不变,变量时,数值不变, 有效位扩展到有效位扩展到1616位。位。(4)字符型数据赋给整型变量 字符数据占一个字节,整型数据占两个字节,字符数据存入整型变量的低8位,有两种情况: 无符号字符型数据赋给整型变量时:将其存放在整型变量的低8位中, 而高位以0补齐 main ( ) int i; unsigned char c ; c=376; i=c; printf(“i=%d, c=%dn”, i, c); 结果结果: i=254 c=2541 1 1 1 1 1 1 0c=376i0 0 0 0 0 0 0

45、 0 1 1 1 1 1 1 0带符号的字符型数据赋给整型变量时带符号的字符型数据赋给整型变量时 若最高位为若最高位为1(负数),则整型变量的高负数),则整型变量的高8位补位补1,若最高位为,若最高位为0(正数)正数) 则整型变量高则整型变量高8位补位补0。 例例T3-8-9.c main( ) int i; char c; c=376; i=c; printf (“i=%d,c=%dn”,i,c); 运行结果:运行结果:i= -2,c= -2 1 1 1 1 1 1 1 0c=376i1 1 1 1 1 1 1 1 1 1 1 1 1 1 0(5)int, short, long型数据赋给c

46、har变量,则将其低位赋给char型变量 例T3-8-10.cmain() int i=289; char c; c=i; printf(“i=%d,c=%d, c=%c n”,i,c,c); 运算结果运算结果:i=289,c=33,c=! 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1i=2890 0 1 0 0 0 0 1 c=33(6)long型数据赋给型数据赋给int型变量型变量,将将long型数据的低型数据的低16位赋给位赋给int型变量型变量 例例T3-8-11.c main() short a;long b=65544; a=b; printf(a=%d,b=%l

47、dn,a,b); 运算结果运算结果:a=8, b=65544 a=8符号位符号位b=655440 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0(7)将将unsigned int 型数据赋给型数据赋给 long 型变量时型变量时 将unsigned short 型数据送到 long int 型变量的低16位,long int的变量高16位补 0例T3-8-12 main ( ) unsigned a=65535; long b; b=a; printf(a

48、=%u ,b=%ldn, a, b); 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ab数值位数值位0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0符号位符号位输出:输出: a=65535, b=65535 若无符号数据赋给相同长度的带符号的变量,则原样赋给。若无符号数据赋给相同长度的带符号的变量,则原样赋给。 Unsigned int int unsigned short short int unsigned long long int 要注意数据的有效位占据符号位要注意数据的有效位占据符号位 例例

49、T3-8-13.c main( ) unsigned int a=65535; int b;b=a; printf (“a=% u ,b=%dn”,a,b); 运算结果运算结果:a=65535,b= -11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1符号位符号位1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ab数值位数值位(8)将带符号的数赋给长度相同的无符号变量将带符号的数赋给长度相同的无符号变量 过程过程: 原样赋给原样赋给 例例T3-9.c main( ) unsigned int a; int b= -1; a=b; printf (“a=% u,b=%

50、dn”,a,b); 1 1111111111111111 111111111111111ab符号位符号位数值位数值位运算结果运算结果: a=65535,b= -1 在赋值号前加其它运算符,可以构成复合运算符。在赋值号前加其它运算符,可以构成复合运算符。 如:如: a=a+b a+=b x=x*(y+8) x*=y+8 x=x%3 x%=3 为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再 补上变量名。补上变量名。 如:如:a + = b a + = (b) a=a+b , 其中其中a是变量,是变量,b是表达式是表达式 x * = y+

51、8 x * = (y+8) x=x*(y+8) 在在C语言中,有十个二元运算符:语言中,有十个二元运算符:+、-、*、/、%、&、| 可与赋值号一起构成复合运算符;可与赋值号一起构成复合运算符; 其优点是:简化程序,提高编译效率。其优点是:简化程序,提高编译效率。 由赋值运算符将一个变量和一个表达式连接起来的式子。由赋值运算符将一个变量和一个表达式连接起来的式子。 (1)(1)一般形式:一般形式: (2) (2)赋值表达式求解过程:赋值表达式求解过程: 计算赋值号右边表达式的值,然后赋给左边的变量。计算赋值号右边表达式的值,然后赋给左边的变量。 如:如:a=3+5 a=3+5 在在C

52、C语言中,表达式又可以是赋值表达式,语言中,表达式又可以是赋值表达式, 如如a=(b=5); a=(b=5); 其中其中 b=5b=5是赋值表达式,其值是是赋值表达式,其值是5 5, 因此因此a a的值是的值是5 5,整个表达式的值是,整个表达式的值是5 5。 赋值运算符的结合顺序:从右向左赋值运算符的结合顺序:从右向左 因此:因此:a=(b=5) a=(b=5) 与与 a=b=5 a=b=5 是等价的。是等价的。 例:例: a=b=c=5 a=b=c=5 表达式的值为表达式的值为5 5,a,b,ca,b,c的值为的值为5 5。 a=5+a=5+(c=6) c=6) 表达式的值为表达式的值为1

53、111,a a的值为的值为1111,c c的值为的值为6 6。 a=(b=4)+(c=6) a=(b=4)+(c=6) 表达式的值为表达式的值为1010,a a的值为的值为10,b10,b为为4,c4,c为为6 6。 a=(b=10)/(c=2) a=(b=10)/(c=2) 表达式的值为表达式的值为5 5,a a的值为的值为5,b5,b为为10,c10,c为为2 2。 赋值表达式也可以包含复合的赋值运算符赋值表达式也可以包含复合的赋值运算符 main( ) int a=12, b; b=(a+=a-=a*a); printf (“a=%d, b=%dn”,a,b); 运算结果:运算结果:a= -264, b= -264 逗号运算符:逗号运算符:, 逗号表达式逗号表达式:用逗号将两个表达式连接起来的式子。:用逗号将两个表达式连接起来的式子。 形式形式:表达式:表达式1 1, , 表达式表达式2 2 求解过程求解过程: : 先求表达式先求表达式1 1的值,再求表达

温馨提示

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

最新文档

评论

0/150

提交评论