第3章数据类型表达式 - 第3章数据类型运算符和表达式ppt课件_第1页
第3章数据类型表达式 - 第3章数据类型运算符和表达式ppt课件_第2页
第3章数据类型表达式 - 第3章数据类型运算符和表达式ppt课件_第3页
第3章数据类型表达式 - 第3章数据类型运算符和表达式ppt课件_第4页
第3章数据类型表达式 - 第3章数据类型运算符和表达式ppt课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 数据类型、运算符与表达式数据类型、运算符与表达式C C程序设计程序设计3.1 C3.1 C语言的数据类型语言的数据类型C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型voidvoid定义类型定义类型typedeftypedef字符类型字符类型char枚举类型枚举类型enum整整 型型实型实型单精度型单精度型floatfloat双精度型双精度型double数组数组结构体结构体structstruct共用体共用体union短整型短整型shortshort长整型长整型longlong整型整型intint3.2 3.2 常量与变量常量与变量3.2.1

2、3.2.1 常量和符号常量常量和符号常量常量是指在运行过程中,其值不能被改常量是指在运行过程中,其值不能被改变的量称为常量。变的量称为常量。根据常量的取值对象,根据常量的取值对象,C C语言将常量分为语言将常量分为以下以下5 5种类型:种类型:(1) (1) 整型常量。例如:整型常量。例如:1616,0 0,-3-3等。等。(2) (2) 浮点型常量。例如:浮点型常量。例如:3.141593.14159,-3.6-3.6等。等。(3) (3) 字符常量。例如:字符常量。例如:AA,55,#等。等。 3.2.1 3.2.1 常量和符号常量续)常量和符号常量续)(4) (4) 字符串常量。例如:字

3、符串常量。例如:AbcAbc,6estghj6estghj,45+3545+35等。等。(5) (5) 符号常量。例如:符号常量。例如:“#define PI 3.14159#define PI 3.14159中的中的PIPI等。等。符号常量,用一个标识符代表的常量。符号常量,用一个标识符代表的常量。 格式:格式:#define #define 常量名常量名 字面常量字面常量 举例:举例:#define PRICE 100#define PRICE 100 #define PI 3.14 #define PI 3.14 #define C1 a #define C1 a 习惯上,符号常量名用大

4、写,变量用小写,以示习惯上,符号常量名用大写,变量用小写,以示区别。区别。3.2.1 3.2.1 常量和符号常量续)常量和符号常量续)例例3.1 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 total=num * * PRICE; PRICE; printf(total=%dn,total);printf(total=%dn,total);

5、 3.2.2 3.2.2 变量变量变量:在程序运行过程中,其值可以改变的量称为变量:在程序运行过程中,其值可以改变的量称为变量。变量。变量的两个要素变量的两个要素(1 1变量名。每个变量都必须有一个名字变量名。每个变量都必须有一个名字变变量名,变量命名遵循标识符命名规则。量名,变量命名遵循标识符命名规则。(2 2变量值。在程序运行过程中,变量值存储在变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。内存中。在程序中,通过变量名来引用变量的值。标识符:标识符:只能由字母、数字、下划线组成,且第一个字母必只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线须

6、是字母或下划线大小写敏感大小写敏感不能使用关键字不能使用关键字长度:最长长度:最长3232个字符个字符3.2.2 3.2.2 变量续)变量续)变量名命名原则:见名知意变量名命名原则:见名知意 合法的变量名如:合法的变量名如:averaver,a a,s2s2,student_namestudent_name,_init_init 不合法的变量名:不合法的变量名:M.D.John, 1a, #33, abM.D.John, 1a, #33, abC C 语言要求对变量语言要求对变量“先定义,后使用先定义,后使用”,其目的在于,其目的在于: 凡未被事先定义的,不作为变量名,从而能凡未被事先定义的,

7、不作为变量名,从而能保证程序中变量名使用得正确。保证程序中变量名使用得正确。 每一个变量被指定为一确定类型,在编译时每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。就能为其分配相应的存储单元。 每一变量属于一个类型,就便于在编译时据每一变量属于一个类型,就便于在编译时据此检查该变量所进行的运算是否合法。此检查该变量所进行的运算是否合法。3.3 3.3 整型数据整型数据3.3.23.3.2整型常量的表示方法整型常量的表示方法 整型常量,即整型常数。整型常量,即整型常数。C C语言整型常语言整型常量可用以下量可用以下3 3种形式表示:种形式表示:十进制整数:由数字十进制整数:由数

8、字0909和正负号表示和正负号表示. .如如 123,-456,0123,-456,0八进制整数:由数字八进制整数:由数字0 0开头开头, ,后跟数字后跟数字0707表示表示. .如如0123,0110123,011十六进制整数:由十六进制整数:由0 x0 x开头开头, ,后跟后跟09,af,AF09,af,AF表示表示. . 如如0 x123,0Xff0 x123,0Xff1. 1. 整型数据在内存中的存放形式。(参见教材)整型数据在内存中的存放形式。(参见教材)数据在内存中是以二进制形式存放的。数据在内存中是以二进制形式存放的。 如如: int i; /: int i; /* * 定义为整

9、型变量定义为整型变量 * */ / i=10; / i=10; /* * 给给i i赋以整数赋以整数10 10 * */ / 3.3.2 3.3.2 整型变量整型变量编码编码正数表示方法正数表示方法负数表示方法负数表示方法原码原码最高位为符号位(最高位为符号位(0 0正数,正数,1 1负数)。其他位为负数)。其他位为此数绝对值的二进制表示。此数绝对值的二进制表示。反码反码同原码同原码最高位为符号位(最高位为符号位(1 1),其他位为),其他位为原码表示的各位取反。原码表示的各位取反。补码补码同原码同原码最高位为符号位(最高位为符号位(1 1),其他位为),其他位为原码表示的各位取反再末位加原码

10、表示的各位取反再末位加1 1。3.3.2 3.3.2 整型变量续)整型变量续)2. 整型变量的分类整型变量的分类 整型变量可分为以下整型变量可分为以下4种整型类型:种整型类型: a. 基本型,以基本型,以int表示;表示; b. 短整型,以短整型,以short表示;表示; c. 长整型,以长整型,以long表示;表示; d. 无符号整型,以无符号整型,以unsigned表示。表示。3.3.2 3.3.2 整型变量续)整型变量续)3. 3. 整型变量的定义整型变量的定义 规定在程序中所有用到的变量都必须在程序规定在程序中所有用到的变量都必须在程序中定义,即中定义,即“强制类型定义强制类型定义”。

11、 例如例如: : int a,b int a,b指定变量、为整型)指定变量、为整型) unsigned short c,d;unsigned short c,d;(指定变量、为(指定变量、为无符号短整型)无符号短整型) long e,f;(long e,f;(指定变量、为长整型)指定变量、为长整型)3.3.2 3.3.2 整型变量续)整型变量续)例例3.2 3.2 整型变量的定义与使用整型变量的定义与使用#include #include void mainvoid main()() int a,b,c,d; /int a,b,c,d; /* *指定指定, , , ,为整型变量为整型变量* *

12、 unsigned unsigned ; * *指定为无符号指定为无符号整型变量整型变量* * 1212;-24-24;1010; ; printf(“printf(“, , ”, ,,);); 3.3.2 3.3.2 整型变量续)整型变量续)4.4.整型数据的溢出整型数据的溢出例例3.3 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); 数值

13、是以补码表示的。一个整型变量只能容纳数值是以补码表示的。一个整型变量只能容纳-32768-327683276732767范围内的数,无法表示大于范围内的数,无法表示大于3276732767或小于或小于-32768-32768的数的数。遇此情况就发生。遇此情况就发生“溢出溢出”。3.3.3 3.3.3 整型常量的类型整型常量的类型 一个整常量,其值在一个整常量,其值在-215215-1内可认为是内可认为是 int 型,并可赋值给型,并可赋值给 int 型和型和 long int 型变量;型变量; 一个整常量,其值在一个整常量,其值在 231 231-1 范围内则认为它是范围内则认为它是 long

14、 int 型,可赋值给一个型,可赋值给一个 long int 型变量;型变量; 如果某一微机的如果某一微机的C版本确定的版本确定的short int 与与 int 型数据在内存中占据的长度相同,则它的表数范围与型数据在内存中占据的长度相同,则它的表数范围与 int 型相同,因型相同,因此,一个此,一个 int 型的常量也同时是一个型的常量也同时是一个 short int 型常量,可以赋给型常量,可以赋给 int 或或 short int 型变量;型变量; 常量中无常量中无 unsigned 型,但一个非负值的整常量可以赋给型,但一个非负值的整常量可以赋给 unsigned 型整变量;型整变量;

15、 在一个整常量后面加字母在一个整常量后面加字母 l 或或 L ,则认为是,则认为是long int 型常量。型常量。3.4 3.4 浮点型数据浮点型数据3.4.1 浮点型常量的表示方法浮点型常量的表示方法有两种方式:有两种方式:十进制小数形式:十进制小数形式: 123. 34,-0.0045, 0.0指数形式:指数形式: Ee) 如如0.23e2 ,-0.45e-3, 3.0+5留意留意:字母字母e(或或E)之前必须有数字,且之前必须有数字,且e后面的指后面的指数必须为整数数必须为整数例如:例如:1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e3.4 3.4

16、浮点型数据浮点型数据3.4.2 3.4.2 浮点型变量浮点型变量1. 1. 浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占一个浮点型数据一般在内存中占4 4个字个字节节(32(32位位) )。与整型数据的存储方式不同,浮。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。别存放。指数部分采用规范化的指数形式。 指数形式指数形式:(:(数符数符+ +小数部分小数部分+ +指数部分指数部分)

17、)3.4.2 3.4.2 浮点型变量浮点型变量( (续续) )规范化的指数形式:规范化的指数形式: 在字母在字母e e或或E E之前的小数部分中,小数点左边之前的小数部分中,小数点左边应有一位且只能有一位非零的数字应有一位且只能有一位非零的数字. . 例如例如: 123.456: 123.456可以表示为:可以表示为:1.23456e31.23456e3数符数符小数部分小数部分阶符阶符阶码阶码1.234563+ 3.4.2 浮点型变量(续)2. 2. 浮点型变量的分类浮点型变量的分类 浮点型变量分为单精度浮点型变量分为单精度floatfloat型)、双精度型)、双精度doubledouble型

18、和长双精度型型和长双精度型long doublelong double三类形式。三类形式。 类型类型 比特数比特数 有效数字有效数字 数值范围数值范围 float 32 67 10-371038 double 64 1516 10-30710308long double 128 1819 10-49311049323.4.2 3.4.2 浮点型变量浮点型变量( (续续) )3. 3. 浮点型数据的舍入误差浮点型数据的舍入误差 例例3.4 3.4 浮点型数据的舍入误浮点型数据的舍入误差差 #include #include void main()void main()float a,b;floa

19、t a,b; a = 123456.789e5; a = 123456.789e5; b = a + 20 ; b = a + 20 ; printf(“%fn”,b); printf(“%fn”,b); 3.4.3 浮点型常量的类型C C编译系统将浮点型常量作为双精度来处理。编译系统将浮点型常量作为双精度来处理。 例如:例如:f = 2.45678 f = 2.45678 * * 4523.65 4523.65 系统先把系统先把2.456782.45678和和4523.654523.65作为双精度数,然作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。后进行相乘的运算,得到的乘也是

20、一个双精度数。最后取其前最后取其前7 7位赋给浮点型变量位赋给浮点型变量f f。如是在数的后面。如是在数的后面加字母加字母f f或或F F如如1.65f, 654.87F1.65f, 654.87F),这样编译系统),这样编译系统就会把它们按单精度就会把它们按单精度3232位处置。位处置。 3.5 字符型数据 3.5.1 3.5.1 字符常量字符常量(1)(1)由一对单引号括起来的一个字符。如由一对单引号括起来的一个字符。如 :a, a, x, D, #x, D, #。一些特殊的字符常量:以一些特殊的字符常量:以“”开头的字符序列,有特开头的字符序列,有特殊的含义殊的含义, ,叫转义符叫转义符

21、3.5.1 3.5.1 字符常量续)字符常量续)转义符转义符 字符形式字符形式 含义含义 n 换行换行,从当前位置移到下一行开头从当前位置移到下一行开头 t 水平制表水平制表(跳到下一个跳到下一个tab位置位置) b 退格退格,将当前位置移到前一列将当前位置移到前一列 r 回车回车,将当前位置移到本行开头将当前位置移到本行开头 单撇号字符单撇号字符 反斜杠字符反斜杠字符 双撇号字符双撇号字符 ddd 13位位8进制数所代表的字符进制数所代表的字符 xhh 12位位16进制数所代表的字符进制数所代表的字符 3.5.1 3.5.1 字符常量续)字符常量续)例例3.5 转义字符的使用转义字符的使用#

22、include void main()() printf(“ ab ct der ft gn“); printf(”ht ibb j kn”); 3.5.2字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:字符变量的定义形式如下:char c1,c2;char c1,c2;在本函数中可以用下面语句对在本函数中可以用下面语句对c1,c2c1,c2赋值:赋值: c1c1aa;c2c2 b b ;一个字符变量在内存中占一个字节,以一个字符变量在内存中占一个字节,以ASCIIASCII码存储码存储3.5.33.5.3字符数据

23、在内存中的存储字符数据在内存中的存储形式及其使用方法形式及其使用方法在内存中,字符变量的实际值是字符变量相应的ASCII代码。C语言中,字符型数据和整型数据之间可以通用,因此在C语言中,一个字符数据即可以以字符形式输出,也可以以整数形式输出。 字符数据与整型数据可以互相赋值。3.5.33.5.3字符数据在内存中的存储字符数据在内存中的存储形式及其使用方法续)形式及其使用方法续)例例3.6 3.6 向字符变量赋以整数。向字符变量赋以整数。 #include #include void main()void main() char c1,c2; char c1,c2; c1=97; c1=97;

24、c2=98; c2=98; printf(“%c %cn”,c1,c2); printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); printf(“%d %dn”,c1,c2); 3.5.33.5.3字符数据在内存中的存储字符数据在内存中的存储形式及其使用方法续)形式及其使用方法续)例例3.7 3.7 大小写字母的转换大小写字母的转换 #include #include void main()void main() char c1,c2 char c1,c2; c1=a;c1=a; c2=b; c2=b; c1=c1-32; c1=c1-32; c2=c

25、2-32; c2=c2-32; printf(“ printf(“c c cc,c1,c2c1,c2);); 3.5.4 3.5.4字符串常量字符串常量字符串常量是一对双撇号括起来的字符序列.合法的字符串常量:“How do you do.”, “CHINA”, “a” , “$123.45”可以输出一个字符串,如printf(“How do you do.”);在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一个字符串。留意: a是字符常量,“a是字符串常量,二者不同。3.5.43.5.4字符串常量续)字符串常量续)规定:在每一个字符串常量的结尾加一个规定:在每一个字符串常

26、量的结尾加一个 “ “字符字符串结束标志串结束标志”,以便系统据此判断字符串是否结束。,以便系统据此判断字符串是否结束。规定以字符规定以字符作为字符串结束标志。作为字符串结束标志。 如:如果有一个字符串常量如:如果有一个字符串常量” ” ,实际,实际上在内存中是:上在内存中是:它占内存单元不是个字符,而是个字符,最后一它占内存单元不是个字符,而是个字符,最后一个字符为个字符为。但在输出时不输出。但在输出时不输出。C C中没有字符串变量中没有字符串变量 (字符串用字符型数组进行处(字符串用字符型数组进行处理)。理)。CHINA0 3.6变量赋初值 (1)(1)语言允许在定义变量的同时使变量初始化

27、语言允许在定义变量的同时使变量初始化如如: int a=3; /: int a=3; /* * 指定为整型变量,初值为指定为整型变量,初值为* */ / float f=3.56; /float f=3.56; /* * 指定为浮点型变量,初指定为浮点型变量,初值值 为为.56 .56 * */ / char c= a; / char c= a; /* *指定为字符变量,初值为指定为字符变量,初值为a a * */ / int a,b,c = 5 ; / int a,b,c = 5 ; /* *表示只给表示只给c c赋初值。赋初值。 * */ /(相当于(相当于int a,b,c; c = 5

28、;int a,b,c; c = 5;)3.63.6变量赋初值变量赋初值( (续续) )(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=c=3; int a=b=c=3;3.73.7各

29、类数值型数据间的混合运算各类数值型数据间的混合运算 不同类型的数据整型、实型、字符型可以进行不同类型的数据整型、实型、字符型可以进行混合运算。混合运算。如:如:10 + a + 1.5 10 + a + 1.5 8765.1234 8765.1234 * * b b 必须首先将它们转换成同一类型的数值。必须首先将它们转换成同一类型的数值。转换原则是由低向高转换,运算结果为最高级别的转换原则是由低向高转换,运算结果为最高级别的类型。类型。1、向左的箭头表示、向左的箭头表示必定的转换必定的转换2、float型数据在运型数据在运算时一律先算时一律先 转为转为double型,型, 然后然后再相加,以提

30、高运算再相加,以提高运算速度速度3、箭头方向表示数、箭头方向表示数据类型转换由据类型转换由 低低向高转换向高转换4、类型转换是由系、类型转换是由系统自动完成的统自动完成的doublefloatlongunsignedintchar,short高高低低如:如:10 +a + i * f - d/eintdoubledoubledouble+double 3.8算术运算符和算术表达式3.8.1 3.8.1 运算符简介运算符简介 1 1、算术运算符、算术运算符 + - + - * * / % / %2 2、关系运算符、关系运算符 = = = != = != 3 3、逻辑运算符、逻辑运算符 ! & |

31、 ! & |4 4、位运算符、位运算符 | & | &5 5、赋值运算符、赋值运算符 = =及其扩展赋值运算符及其扩展赋值运算符6 6、条件运算符、条件运算符 ? :7 7、逗号运算符、逗号运算符 ,8 8、指针运算符、指针运算符 * * & &9 9、求字节数运算符、求字节数运算符 sizeof sizeof1010、强制类型转换运算符、强制类型转换运算符 ( (类型)类型)1111、分量运算符、分量运算符 . . 1212、下标运算符、下标运算符 1313、其他、其他 如函数调用运算符()如函数调用运算符()分类分类 运算符运算符 3.8.2 算术运算符和算术表达式续)1. 1. 基本的算

32、术运算符基本的算术运算符: : (加法运算符,或正值运算符。如(加法运算符,或正值运算符。如: :、)、) (减法运算符,或负值运算符。如(减法运算符,或负值运算符。如: :、)、)* * (乘法运算符。如(乘法运算符。如: :* *) (除法运算符。如(除法运算符。如: :) (模运算符,或称求余运算符,两侧均应为整型数据,如(模运算符,或称求余运算符,两侧均应为整型数据,如: :的值的值为)。为)。 3.8.2 算术运算符和算术表达式续)2. 2. 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性: : C C 算术表达式:用算术运算符和括号将算术表达式:用算术运算符和

33、括号将运算对象运算对象( (也称操作数连接起来的、符合也称操作数连接起来的、符合语法规则的式子,称为算术表达式。运算语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。对象包括常量、变量、函数等。 例如例如: : * *.5.5aa 是一个合法的表达式是一个合法的表达式运算符的优先级和结合性:见教材附运算符的优先级和结合性:见教材附 录录IIIIII3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)3. 3. 强制类型转换运算符强制类型转换运算符C C语言可以利用强制类型转换符可以将一个表达式语言可以利用强制类型转换符可以将一个表达式转换成所需类型转换成所

34、需类型强制类型转换符的一般形式:强制类型转换符的一般形式: (类型名变量或表达式)(类型名变量或表达式)例如:例如: (double)(double) / /* *将转换成将转换成doubledouble类型类型* */ / (int)(x+y) / (int)(x+y) /* *将将x+yx+y的值转换成整型的值转换成整型* */ / (float) (float)(5%35%3) / /* *将将5%35%3的值转换成的值转换成floatfloat型型* */ /3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)阐明:阐明:1 1、表达式应用括号、表达式应用括号(

35、 )( )括起来括起来2 2、强制转换时,变量的原有类型未、强制转换时,变量的原有类型未发生变化,发生变化,只是得到一个中间变量。只是得到一个中间变量。3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)例例3.8 3.8 强制类型转换。强制类型转换。 #include #include void mainvoid main()() float float ; int iint i; x=3.6x=3.6; i=(int)xi=(int)x; printf(x=%fprintf(x=%f, i=%dni=%dn,x x,i);i);3.8.2 3.8.2 算术运算符和算

36、术表达式续)算术运算符和算术表达式续)4. 4. 自增、自减运算符自增、自减运算符 作用是使变量的值增或减作用是使变量的值增或减 例如:例如: +i+i,-i-i在使用在使用i i之前,先使之前,先使i i的值加的值加减)减) i+i+,i-i-(在使用(在使用i i之后,使之后,使i i的值加的值加减)减) 3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)i+i+与与+i+i的区别:的区别:+ + i+ + i是先计算是先计算i = i+1,i = i+1,后使用后使用i i的值即的值即把增加把增加1 1后的后的i i值作为表达式值作为表达式+ + i + + i

37、 的值)的值); ;i + +i + +是先引用是先引用 i i 的值即把的值即把i i原有的值原有的值 作为表达式作为表达式i + +i + +的值)的值), ,后进行计算后进行计算i = i = i+1i+1,此时,此时 i i 的值才增加的值才增加1 1。例如:例如: ;i i的值先变成的值先变成4, 4, 再赋给再赋给,j,j的值均为的值均为 ; 先将先将 i i的值的值3 3赋给赋给, ,的值为,然的值为,然后变为后变为3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)留意:留意: (1)(1)自增运算符(),自减运算符自增运算符(),自减运算符(),只能用

38、于变量,而不能用于常(),只能用于变量,而不能用于常量或表达式,量或表达式, (2)(2)和的结合方向是和的结合方向是“自右至自右至左左”。 自增减运算符常用于循环语句中使循自增减运算符常用于循环语句中使循环变量环变量自动加。也用于指针变量,使指针指向自动加。也用于指针变量,使指针指向下一个地址下一个地址 3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)5. 5. 有关表达式使用中的问题说明有关表达式使用中的问题说明 ANSI C ANSI C并没有具体规定表达式中的子表达并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。式的求值顺序,允许各编译系

39、统自己安排。 例如:对表达式例如:对表达式 a = f1( )+f2( )a = f1( )+f2( ) 并不是所有的编译系统都先调用并不是所有的编译系统都先调用f1( )f1( ), 然然后后调用调用f2( )f2( )。在有的情况下结果可能不同。有时。在有的情况下结果可能不同。有时会出会出现一些令人容易搞混的问题,因此务必要小心谨现一些令人容易搞混的问题,因此务必要小心谨慎。慎。 3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)语言中有的运算符为一个字符,有的运算符由语言中有的运算符为一个字符,有的运算符由两个字符组成两个字符组成 ,为避免误解,最好采取大家都能

40、理,为避免误解,最好采取大家都能理解的写法。解的写法。 例如:不要写成例如:不要写成i+ji+j的形式,而应写成的形式,而应写成 (i+)+j(i+)+j的形式的形式 3.8.2 3.8.2 算术运算符和算术表达式续)算术运算符和算术表达式续)在调用函数时,实参数的求值顺序,标准并无统在调用函数时,实参数的求值顺序,标准并无统一规定。一规定。例如:的初值为,如果有下面的函数调用:例如:的初值为,如果有下面的函数调用: printfprintf(,i+) i+) 在有的系统中,从左至右求值,输出在有的系统中,从左至右求值,输出“,” 在多数系统中对函数参数的求值顺序是自右而左,在多数系统中对函数

41、参数的求值顺序是自右而左, printfprintf函数输出的是函数输出的是“,”。以上这种写法不。以上这种写法不宜提倡,宜提倡, 最好改写成最好改写成 j = i+;j = i+; printf(%d printf(%d, %d%d, j j,i)i) 3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 1. 1. 赋值运算符赋值运算符: : 赋值符号赋值符号“”就是赋就是赋值运算符,它的作用是将一个数据常量、值运算符,它的作用是将一个数据常量、变量或表达式的值赋值给一个变量变量或表达式的值赋值给一个变量2.2.类型转换类型转换 如果赋值运算符两侧的类型不一致,但如果赋值运算符两侧

42、的类型不一致,但都是数值型或字符型时,在赋值时要进行都是数值型或字符型时,在赋值时要进行类型转换。类型转换。例如:例如:将浮点型数据包括单、双精度将浮点型数据包括单、双精度赋给整型变量时,舍弃浮点数的小数部赋给整型变量时,舍弃浮点数的小数部分。分。. . 将整型数据赋给单、双精度变量时,将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中数值不变,但以浮点数形式存储到变量中 3.9 赋值运算符和赋值表达式(续) 将一个将一个doubledouble型数据赋给型数据赋给floatfloat变量时,截取其前面变量时,截取其前面7 7位位有效数字,存放到有效数字,存放到floatfl

43、oat变量的存储单元变量的存储单元4 4个字节个字节中。但应注意数值范围不能溢出。中。但应注意数值范围不能溢出。 如果将一个如果将一个floatfloat型数据赋给型数据赋给doubledouble变量时,数值不变,变量时,数值不变,有效位数扩展到有效位数扩展到1616位,在内存中以位,在内存中以8 8个字节存储个字节存储字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占1 1个字节,个字节,而整型变量为个字节,因此将字符数据个二而整型变量为个字节,因此将字符数据个二进位放到整型变量存储单元的低位中。进位放到整型变量存储单元的低位中。将将intint、shortsho

44、rt、longlong数据给数据给char char 变量时,只将低变量时,只将低8 8位送位送到到charchar变量中即截断);变量中即截断);3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式( (续续) )将带符号的整型数据赋给将带符号的整型数据赋给long型变量时,要进型变量时,要进行符号扩展;反之,截断;行符号扩展;反之,截断;将将unsigned int数据赋给数据赋给long int 变量时,变量时,只将高位补只将高位补0即可;即可;将非将非unsigned数据赋给长度相同的数据赋给长度相同的unsigned变量变量,是照原样赋值;是照原样赋值;总之:不同类型的整型数

45、据间的赋值是按存储单总之:不同类型的整型数据间的赋值是按存储单 元中的元中的 存储形式直接传送。存储形式直接传送。3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式( (续续) ) 3. 3. 复合的赋值运算符复合的赋值运算符 在在=之前加上其他运算符比如之前加上其他运算符比如+= += 、 -= -= 、 * *= = 、 /= /= ),构成复合赋值运算符),构成复合赋值运算符例如例如: : 等价于等价于 * * 等价于等价于 * *()() 等价于等价于 为便于记忆,可以这样理解:为便于记忆,可以这样理解: a += b ( a += b (其中其中a a为变量,为变量,b b

46、为表达式为表达式) ) a += b a += b将有下划线的将有下划线的“a+”a+”移到移到“=”=”右侧)右侧) |_|_ a = a + b a = a + b (在(在“=”=”左侧补上变量名左侧补上变量名a a)3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式( (续续) )留意留意: :如果是包含若干项的表达式,则相当于如果是包含若干项的表达式,则相当于它有括号。它有括号。如:如: x %= y+3 x %= y+3 x %= (y+3) x %= (y+3) |_ |_ x = x %(y+3)( x = x %(y+3)(不要错写成不要错写成x=x%y+3) x=x%y+3) 语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符:,* *,| | 3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式( (续续) )4. 4. 赋值表达式赋值表达式 由赋值运算符将一个变量和一个表达式连由赋值运算符将一个变量和一个表达式连接起来的式子称为接起来的式子称为“赋值表达式赋值表达式”。一般形式为一般

温馨提示

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

评论

0/150

提交评论