




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1 1页页 基本类型:char int float double enum 构造类型:Array struct union 数据类型 空类型void 指针类型:与以上各种类型相结合。 第三章 数据类型、运算符与表达式 3.1 C 的数据类型 C语言提供了丰富的数据类型(Data Type),如下所示: LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2 2页页 3.2 常量与变量 一、 标识符 用来表示变量名,函数名,数组名,文件名,类型名的有效字符序列 。C 语言的标识符分三类:保留关键字、预定义标识符、用户标识符。 1. 保留关键字 均用小写字母表示,如:char int auto break long等。保留关键字 不能作用户标识符使用。 (见p375,附录II) 2. 预定义标识符 通常供C的库函数名或预编译处理中的专用命名使用。如: NULL = 0 等。 3. 用户标识符 C 程序中用户用于表示变量名,函数名,数组名,文件名,类型名的 有效字符序列。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3 3页页 用户标识符的命名规则如下: a. 由英文字母、数字、下划线组成,且必须是由字母或下划 线开头。 b. 区分大小写,即大、小写英文字母具有不同的含义。 c. 长度随机器系统的不同而不同。一般取前面 8 个字符。 如: studentname,studentnumber 可改为studnam,studnum ( 注:Turbo C 可取 32 个字符 ) d. 应尽量 “ 简洁明了,见名知意 ”。 例 :以下各标识符组中,合法的用户标识符为: 1) A) Pad! B) getcc C) void D) a* 2) A) bb B) CCp? C) hiy D) _isw 3) A)_0123 B) _del C) if D) keep% 答案:(1) B (2) C , D (3) A , B LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4 4页页 符号常量是一种标识符形式的常量,即用一个标识符代表一 个常量。符号常量名习惯上用大写字母表示,这是一种约定。 例 2.1 #define PRICE 30 main ( ) int num , total ; num = 10 ; total = num * PRICE ; printf ( “ total = %d ” , total ) ; 常量,是指在程序运行过程中,其值不能被改变的量。 常量包括:整型常量(1,4,3,0);实型常量(1.23,0.345); 字符常量(a,d);字符串常量(“CHINA”);符号常量。 二、常量和符号常量 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 5 5页页 注意: 符号常量在其作用域内不能改变,也不能被赋值。 例: #define PRICE 30 main ( ) int num , total ; num = 10 ; total = num * PRICE ; printf ( “ total = %d ” , total ) ; PRICE = 40 ; /* */ total = num * PRICE ; printf ( “ total = %d ” , total ) ; LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 6 6页页 变量,是指在程序运行过程中,其值可以被改变的量,它对 应着内存空间中一定长度的存储单元。 一个变量必须有一个变量名,才能在程序中被引用。变量的 命名规则同用户标识符一致。习惯上变量名用小写字母表示。 C 语言中,变量必须 “ 先定义,后使用 ”。 定义格式: 存储类型 数据类型 变量名 如: auto int a; 可省略为:int a; 这条定义语句的作用:表示定义了一个变量名变量名为 a 的整型整型变 量,编译系统在处理这条变量定义语句时,就会在存储空间中 为其分配两个字节的存储单元存储单元,并按整型整型格式格式存储数据。 三、 变量 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 7 7页页 例: int a = 3 ; 3 a 变量名 变量值 2个字节的存储单元 定义变量的作用: a.根据变量的数据类型而分配相应的内存空间; b.保证变量的正确引用(地址在哪里,有多少字节,存储格式); c.根据变量的类型确定变量参与的运算是否合法。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 8 8页页 一、整型常量 十进制整型常量。如: 123 , 0 , 45 八进制整型常量,用0(零)开头。如:012,011 十六进制整型常量,用 0x 开头。如:0x12,-0x11 整型常量 表示形式 二、整型变量 1. 定义 变量定义的一般格式: 存储类别 数据类型 变量名 如: int x ; int a , b ; 2. 分类 基本型 int 短整型 short int 或 short 长整型 long int 或 long 3.3 整型数据 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 9 9页页 说明: 可以加修饰符 unsigned 无符号型 如:unsigned int ; unsigned short ; unsigned long signed 有符号型(可以缺省) 如:signed int ; signed short ; signed long 其中signed int和 int等价。signed long和 long等价。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1010页页 3. 整型数据的存储方式 如: int a ; a = 10 ; 00000000 00001010a 对于有符号型整型数据,其存储单元的最高位代表符号位( 0 为正;1 为负)。 对于无符号型整型数据,无符号位,存储单元的所有位均用 于存放数值本身。 下面以整数 13 为例: short 型 符号位 int 型 long 型 unsigned int 型 unsigned short 型 unsigned long 型 0 0000000 00001101 000011010 0000000 000000000 00000000000110100000000 0000110100000000 0000110100000000 00001101000000000000000000000000 注意:在今后理解数据类型和变量这两个概念时,要始终把握两条主线。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1111页页 4、原码、反码和补码(补充) 在计算机进行数据运算的过程中,机器数还使用原 码、反码和补码的表示法。 原码:正数的符号位用0表示,负数的符号位用1表示 的二进制数,称为原码。 所有正数的原码、反码和补码相同。 对于负数:负数的反码为对应正数的原码取反;负数 的补码为它的反码加1(即对应正数的原码取反加1)。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1212页页 00000000 00001010 10 的原码 00000000 00001010 10 的反码 10000000 00001010 10 的原码 00000000 00001010 10 的补码 00000000 00001010 10 的原码 11111111 11110101 10 的反码 11111111 11110110 10 的补码 例如:10和-10的原码,反码,补码分别为: LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1313页页 将一个负数的补码转换为十进制数: a : 取反 b : 加1,得对应的正数 c : 再转换成相应的十进制负数 则相应的十进制负数为:-10 如:求以下补码对应的十进制数 10 00000000 00001001 11111111 11110110 00000000 00001010 取反 加1 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1414页页 a = 32767; b = a + 1; 32767 则相应的十进制负数为:b= -32768 0111111111111111 1000000000000000 0111111111111111 “溢出”问题的分析 : +1 1000000000000000 +1 取反 32768 如: main ( ) int a , b ; a = 32767 ; b = a + 1 ; printf( “%d,%d”, a ,b ) ; 5. 整型数据的溢出 一个 signed int 变量的最大允许值是 32767。超出这个范围 则会发生溢出。 结果为: 32767 , 32768 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1515页页 32766 0 -1 01111111 11111110 00000000 00000000 11111111 11111111 无符号与有符号整型变量不断加1后的变化情况: 10000000 00000000 -32768 -3276710000000 00000001 3276701111111 11111111 1 00000000 00000001 0 65535 00000000 00000000 11111111 11111111 1 00000000 00000001 65534 11111111 11111110 注意:基本整型占2个字节,能够表示216(65536)个状态。 01111111 11111111 10000000 00000000 32767 32768 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1616页页 6. 整常量的类型 常量的类型是根据常量的值所在的数值范围来确定的: (1) 值在 32768 32767 范围的整常量,视为int型,可赋值 于int型和long型。 若值超出了上述范围,而在 231 (2311) 范围, 则视 为long型,只能赋值于long型。 (2) 一个非负值的整常量,可以赋给 unsigned int型或 unsigned long型变量。但应考虑数值的范围。 如: 50000 unsigned int变量,正确。 70000 unsigned int变量,则溢出。 因为unsigned int的范围在:0 65535( 0 2161)。 (3) 用户可以在一个整常量后面加一个字母L或l,人为指定它为 long型常量。这主要用在实参和形参之间实现类型匹配,在赋值语句 中给整常量加上L或l没有意义。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1717页页 32767(2151) 32768(-215) (231 1) 231 65535(216 1) 0 (232 1) int或short long long Unsigned int Unsigned short Unsigned long 整型常量的取值与类型的关系 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1818页页 一、实型常量 实数(real number) 是一种带有小数的数据。在书写的时 候,它有以下两种形式: 1. 小数形式: 十进制数 + 小数点(必须有小数点) 如: 0.123 ; .123 ; 123.0 ; 123.等。 2. 指数形式: 小数 + e(或E) + 指数部分 如:264.9e+11 26.49E+12 2.649E13 规范化的指数形式:指在字母e或E之前的小数部分中, 小数点左边有且只有一位非零的数字。 注: 在指数形式中,字母 e 之前必须要有数字, 后面 指数必须为整数。如:e3,1.25e3.8,.e3是非法的书写形式。 3.4 实型数据 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1919页页 二、实型变量 1. 实型变量的存储形式: 实型数据在计算机中通常是以指数形式存放的。前面所讲的指 数形式包括小数部分和指数部分,分别对应计算机中浮点数( floating-point number)的“尾数”和“阶码”部分。 通常,float在内存中占据4个字节(32位)的空间,其中 23 位 表示尾数,8 位表示阶码,1位表示符号位。 实数的值N=(-1)S m2e ,其中m=1.M或0.M,e=E-127 详细请参阅W. Kahan教授的Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic一文 E S M 默认小数点 低位高位 符号位阶码尾数 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2020页页 如: float x, y ; double m, n ; 说明:实型变量的有效数字位数取决于“尾数”的bit数,数值范 围取决于“阶码”的bit数。 类型位(bit)数有效数字数值范围(规范化时) Float326-7-1.210-383.41038 Double6415-16-2.210-3081.810308 Long double12818-19-3.410-49321.2104932 2. 实型变量的分类: 223=8388608对 应十进制7位 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2121页页 3. 实型数据的舍入误差 由于存放实型数据的内存单元bit数是有限的,因此计算 机能够提供的有效位数也是有限的,在有效位范围以外的数 字将被舍去,造成误差。 例 3.4:P47 main ( ) float a , b ; a = 123456.789e5; b = a + 20 ; printf ( “a=%f, b=%f ”, a, b ) ; 输出结果: a 和 b 都为 12345678848.000000 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2222页页 关于实型常量的说明: 1) 许多C编译系统将实型常量作为双精度(64位)来处理。 这可以保证计算的精度,但降低了运算的速度。 如:float f; f=2.4567*4523.65; 系统先按双精度运 算,然后将运算结果(双精度)赋值给单精度变量f(取十进制的 前7位)。当然,用户也可在实型常量的后面加字母f 或F 来使 系统按单精度(32位)运算。 2) 实型常量赋给一个float 或double 型变量时,应考虑 有效位数会不同。 如:float a; a=111111.111; a 的实际值为: 111111.1 ( 8位,包括小数点 ) 如: double a; a=111111.111 ; a 的实际值为: 111111.111。即精度不同而已。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2323页页 一 、字符常量 C 语言中,字符常量代表 ASCII 码字符集里的一个字符, 用单引号括起来的一个字符来表示。 如: a ; X ; 等。 字符常量可作为整数量来处理,即字符常量也可以参加各 种算术运算。 转义字符: C 语言有一类特殊形式的字符常量,是用反斜杠“ ”开 头的字符序列,代表一个特定的ASCII码字符。 如: n代表一个换行符。 详见表3.3(P48) 如下页: 3.5 字符型数据 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2424页页 字符形式含 义ASCII代码 n换行,将当前位置移到下一行开头10 t水平制表(跳到下一个tab位置)9 b退格,将当前位置移到前一列8 r回车,将当前位置移到本行开头13 f换页 ,将当前位置移到下页开头12 反斜杠字符“”92 单引号字符39 “双引号字符34 ddd1到3位8进制所代表的字符101 表示字母A xhh1到2 位16进制所代表的字符x41 表示字母A 注解:n (line)系统在输出换行符时,会自动加上一个回车符; t (tab)跳到下一个制表位置(系统默认一个制表区占8列); b (back)从当前位置后退一格; r (return)回车不换行; 表3.3 转义字符及其含义 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2525页页 例3.5:( P49 ) main ( ) printf ( “ ab ct derftgn”) ; printf ( “htibbj k” ) ; fabcgde hjik 打印结果: 显示结果:fgde hjk abcdefg hijk 显示过程: 1234567891011 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2626页页 二、字符变量 用关键字 char 来说明。如:char c1 , c2 ; char min ; 一个字符变量只能存放一个字符,一般在内存中占一个 字节 ( 8位 )。 三、字符变量在内存中的存储形式及使用方法 例2.6:(p50) main ( ) char c1 ; int c2 ; c1 = 97 ; c2 = b ; printf ( “ %c ,%c n ” , c1 , c2 ) ; printf ( “ %d ,%d n ” , c1 , c2 ) ; 输出: a,b 97,98 9701100001 c1 9801100010 c2 00000000 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2727页页 结论: 字符变量与整型变量在一定范围内可以通用, 即:二者 可以互相赋值,也可以以字符形式或整数形式输出。 请问:这个范围是哪个范围? 实际上,有些系统( 如Turbo C )就是将字符型变量当作一个 整型来处理的,只是它仅有一个字节罢了。比如,我们可以这样 定义a : signed char a; 等同于 char a; 取值范围为( 128 127 ) 。 unsigned char a; 取值范围为( 0 255 ) 。 如: signed char c = 376 ; printf ( “ %d ” , c) ; 输出为: 2 0255 或 -128127 1 11111100 0000001 按位取反加1 2 0 0000010 3位八进制数所表示 的字符,等于(254)10 可省略 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2828页页 四 、字符串常量 由若干个系统所允许使用的字符组成的序列,叫字符串。 C 语言中用一对双引号括起来的字符序列表示字符串常量。 如: “CHINA” ; “ How do you do ? ” C 语言对字符串常量的长度不加限制,C 编译系统总是 自动在字符串末尾自动加上一个转义字符 0 (空操作符 ,不可显) ,作为字符串常量的结束标志,以便于用户和系统 对字符串的处理。如: “Hello” 在内存中占6个字节。 H e l l o 0 72 101 108 108 111 0 注意:字符常量与字符串常量是两个不同类型的数据。 如: a 和 “a”,在内存中存放的形式分别为: aa a 0 “a” LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 2929页页 C 语言中规定变量应先定义后使用。允许在定义变量时对变 量进行初始化。 1) int a = 3 ; /* 指定 a 为整型变量,初值为3 */ float f = 3.56 ; char c = a ; 2) int a , b , c = 5; 在这里,变量c的初始化不是在编译时完成的,而是在程序 运行时完成的。因此,在作用上,等价于: int a, b, c; c=5; 3) 若多个同类型的变量在定义时要赋相同的初值,正确的 赋值方式为: int a = 3 , b = 3 , c = 3 ; 而 int a = b = c = 3 ; ( 错误的 ) 3.6 变量赋初值 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3030页页 例:main ( ) int a = b = c = 3 ; printf ( “ %d %d %d ” , a , b , c ) ; 例:main ( ) int a = 3 , b = 3 , c = 3 ; printf ( “ %d %d %d ” , a , b , c ) ; a = b = c = 8 ; /*可连续赋值*/ printf ( “ %d %d %d ” , a , b , c ) ; 变量初始化出错 等效于:int a, b, c; a=3; b=3; c=3; LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3131页页 C 语言中各类型数据间可以进行混合运算,但不同类型的 数据应先转换成同一类型,然后进行运算。 double float long double long int int short char unsigned long unsigned int unsigned short unsigned char C/C+类型转换的方向 转换规则为: 存储格式相同时, 向存储空间大的方 向转换;存储格式 不同时,向double 类型转换。 3.7 各类数值型数据间的混合运算 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3232页页 如:假设已定义i为int变量,f为float变量,d为double变量 ,e为long变量,则10 + a + i*f d/e的运算过程为 (1) i, f double型 i*f (2) e double d/e (3) a 97 (10+97) (4) 107 double型再加i*f的结果 (5) 将10 + a + i*f 的结果与d/e的商相减结果为double型。 关于强制类型转换:以上所讲的类型转换是系统在运算过 程中自动进行的,称为隐式类型转换。与之对应的是强制类型 转换(又称显式类型转换),它是由程序员人为地强行指定其 类型转换。 格式: (类型名) (表达式) 如: (double) a ( 将 a 转换成 double 类型 ) (int) (x+y) ( 将 x + y 的值转换成整型 ) LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3333页页 注意: 1、在强制类型转换时,得到的是一个所需类型的中间变量,原 来的变量的类型并未发生变化。 例: main ( ) float x ; int i ; x = 3.6 ; i = ( int ) x ; printf ( “ x = %f , i = %d ” , x , i ) ; 结果: x = 3.600000 , i = 3 即 x 的类型仍为 float 型。 2、强制类型转换一般用于隐式转换所不能实现的场合。比如在 函数的实参和形参数据类型不匹配,%的操作数不为整型数据时 。 例:若定义float x ; 则x % 3 不合法。 但可以用: (int) x % 3 。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3434页页 一 、C 运算符简介 C 语言的运算符极为丰富,共有13类。除了控制语句和输入输 出外,几乎所有的基本操作都可以作为运算符来处理。掌握运算符 的关键在于掌握 “ 优先级与结合性 ”两条主线 。 二 、算术运算和算术表达式 1. 基本算术运算符 , , , / , % 说明:(1) % 为求余运算符(模运算符),操作数均为整型数据,可 正可负,但运算结果的正负号由被除数的符号决定。比如,10%3为 1;10%-3也为 1;-10%-3为 1;-10%3为 -1。 (2) 两整数相除其结果为整数。如: 5/3值为1。 如果其中有一个为负值,则舍入方向不固定,由具体的 机器决定。如:5/3可能是1或是2 。一般采用“向零取整”。 3.8 算术运算和算术表达式 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3535页页 2. 算术表达式: 用算术运算符和括号将运算对象(操作数)连接起来的 、符合C语法规则的式子,称C算术表达式。其中,运算对象包 括:常量、变量、函数等。 如:a b/c 1.5 + a 3. 算术运算符和算术表达式的优先级和结合性 C语言中不同的运算符有不同的优先级(Precedence),见 P365,按先高后低的原则进行运算。*、/、%为第3级,+、-为 第4级。 对同一优先级的运算符按其结合性进行运算。结合性分 为:“从左至右”和“从右至左”。算术运算符是 “从左至右 ”。 如: abc 其运算顺序为: a (bc) ab+c 其运算顺序为: (ab) +c LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3636页页 4. 自增、自减运算符(Auto increment and decrement) 作用: 使变量(整型、实型、指针型)的值增1或减1。 格式:用+ + 或 表示 + + i i (前置运算) i + + i (后置运算) 如:int j, i = 3; j= + + i ; 以上语句的执行过程为:首先i的值自增1,变为4,然 后赋值给j变量,最后 i 和 j 都等于 4 。 又如:float j, i = 3.5; j=i + + ; 其执行结果为:i等于4.5,j等于3.5。 再如:int i = 3 ; printf ( “ %d ” , i + + ) ; 输出是 3 而: int i = 3 ; printf ( “ %d ” , + + i ) ; 输出是 4 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3737页页 说明: 1)自增、自减运算只能用于变量,不能用于常量或表达式。 如:5 + + (a +b) + + ( i ) + + 都是不合法的。 2)+ + 和 的优先级是第2级,结合性按 “从右至左”。 如:i + + 等价于: (i+ +) 不等价于:(i) + + 。 3)自增、自减运算主要用在循环语句和指针变量。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3838页页 1) 表达式中有多个 + 号时 如: i + + + j 等同于 (i + +) + j 因为C 编译系统在处理时按从左至右原则尽可能多地将若干 个字符组成一个运算符。 2) 函数实参中有+或-的情况: 多个函数实参的求解顺序是自右至左。 如:int i = 3 ; printf ( “ %d , %d n ” , i , i + + ) ; 结果是:3 , 3 还是 4 , 3呢? Turbo C为4,3 。 5. 自增/自减运算符的几个特殊使用问题 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 3939页页 在同一个函数实参中+或运算符的求解顺序是自右至左 又如:int i = 3 ; printf ( “ i = %d n ” , ( i + + ) + ( i + + ) + ( i + + ) ) ; 则:5 + 4 + 3 = 12 最后 i 的值为 6 而 printf ( “ i = %dn ”, ( + + i ) + ( + + i ) + ( + + i ) ) ; 则:6 + 5 + 4 = 15 最后 i 的值为 6 郑重声明:在编程时要养成良好的书写习惯,要尽量避免产 生歧义,提高程序的可读性。 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4040页页 3) 子表达式中自增/自减运算的情况,与2)中所述不同。 ANSI C 并未规定表达式中各子表达式的求解顺序。由编译 系统自行安排,但是我们以Turbo C为准。 如: int i =3 , x ; x = (i+ +) + (i+ +) + (i+ +) ; 又如: x = ( + + i ) + ( + + i ) + ( + + i ) 结果是: x = ( + + i ) + ( i + + ) + ( + + i ) 结果是: 若系统按自左向右求解括弧内的运算,则x=3+4+5,x=12。 而有些系统( Turbo C , MS C )则是把 3 作为表达式中所有 i 的值,即:3+3+3 。 最后:x=9 ,i=6 。 x = 18 , i = 6 x = 15 , i = 6 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4141页页 当多个子表达式对同一变量进行自增/自减运算时,Turbo C 2.0是按照如下的规则进行处理的: 当子表达式都为前置运算时,首先统计自增和自减的次 数,然后对该变量进行连续地自增或自减指定次数,结果(最 终值)作为各子表达式的值。 当子表达式都为后置运算时,首先把该变量的最初值作 为各子表达式的值,然后再统计自增和自减的次数,对该变量 进行连续地自增或自减指定次数。 当有些子表达式为前置运算、有些又为后置运算时,首 先处理为前置运算的各子表达式,然后再处理为后置运算的各 子表达式,方法均同上。 关于多个子表达式为自增/自减运算的问题(补充 ) LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4242页页 一、赋值运算符 “ = ” 作用:将一个数据或一个表达式的值赋给一个变量。 如: int x, y=2; x=y; 或 x=y+2 ; 二、赋值运算符用于类型转换 1. 将float,double型赋给int型:舍去实数小数部分。 如:int i; i=3.56; 结果 i 的值是 3 。 2. int型赋给float,double型:数值不变,但按浮点格 式存储到变量中。 如: float f; f=23; 结果将 23 转换成 23.00000 再存入变量 f 中。 3. char型赋给int型:将字符型数据(8位)放入整型变量 的低8位,而高8位分两种情况: 3.9 赋值运算符和赋值表达式 LanJLanJ copyright copyright * * 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4343页页 a: 作无符号量处理时: 高8位全补零。 b: 作带符号量处理时: 按“符号扩展”( 如Turbo C )。 若字符量的最高位为“0”, 则 int 型变量的高8位全补“0” ; 若字符量的最高位为“1”, 则 int 型变量的高8位全补“1” ; 例如:int i; i=376; /*对应十进制ASCII码254*/ 1 1111110 1 111111000000000111111111 1111110 1 1111110 ii 376无符号扩 展 376符号扩 展: 4. 带符号的int型赋给long int型:按“符号扩展”。 而将long int型赋给int型: 只需将long int型数据的 低1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 简约建筑工地用工劳动合同
- 2025年焊工口试考试题及答案
- 2025湖南湘潭市市直事业单位招聘(选调)工作人员48人考试参考试题及答案解析
- 2025年哈尔滨阿城区第八幼儿园岗位招聘4人备考练习题库及答案解析
- 2025年PAU出科试题及答案
- 消防安全知识在线答题(含答案)
- 外科实习医师带教计划
- ISO9000内审员培训考核试题及答案
- 光伏电站项目多方协同施工措施
- 总工会五年工会活动开展总结及计划
- 2025-2030电动船舶电池系统安全标准构建与产业链配套能力报告
- 数字时代群体冲突演变-洞察及研究
- 2025秋新部编版一年级上册语文教学计划+教学进度表
- 大学英语四级高频词汇1500+六级高频词汇1500
- GB/T 40079-2021阀门逸散性试验分类和鉴定程序
- GB/T 38537-2020纤维增强树脂基复合材料超声检测方法C扫描法
- 部编人教版道德与法治四年级上册全册完整版课件
- 混凝土结构跳仓施工方案
- 水稳摊铺作业安全技术交底
- 二年级劳动与技术折扇课件
- 公墓施工组织设计
评论
0/150
提交评论