《C语言学习-02数据描述与基本操作》由会员分享,可在线阅读,更多相关《C语言学习-02数据描述与基本操作(60页珍藏版)》请在金锄头文库上搜索。
1、主要内容第2章 数据描述与基本操作2.0 预备知识 2.1 数据类型 2.2 不同数据类型间的转换 2.3 常量和变量 2.4 运算符和表达式 2.5 数据的输入和输出第2章 数据描述与基本操作2.0 预备知识数制基权表示数码特点10,10,10,十进制数0910逢十进一二进制数0122,2,2,逢二进一八进制数0788,8,8,逢八进一十六进制数09,AF,af1616,16,16,逢十六进一十进制:4956= 410+910 +510+610二进制:1011=12+02 +12+12十六进制:81AE=816+116 +1016+1416八进制:4275=48+28 +78+58 进位计数
2、制基本概念第2章 数据描述与基本操作2.0 预备知识 各种进制数间的转换n二、八、十六进制转换成十进制 方法:按权相加第2章 数据描述与基本操作2.0 预备知识 各种进制数间的转换n十进制转换成二、八、十六进制 方法:连续除以基,从低到高记录余数,直至商为0。例 把十进制数459转换成十六进制数45916 2816 116 0(459)10=(1CB)161 C B 余11 余12 余 1第2章 数据描述与基本操作2.0 预备知识 各种进制数间的转换n二进制与八进制之间的转换l二进制转换成八进制: 从右向左,每3位一组(不足3位左补0),转换 成八进制。l八进制转换成二进制: 用3位二进制数代
3、替每一位八进制数。例 (1101001)2=(001,101,001)2=(151)8例 (246)8=(010,100,110)2=(10100110)2000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7第2章 数据描述与基本操作2.0 预备知识 各种进制数间的转换n二进制与十六进制之间的转换l二进制转换成十六进制: 从右向左,每4位一组(不足4位左补0), 转换成十六进制。l十六进制转换成二进制: 用4位二进制数代替每一位十六进制数。例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16例 (4B9
4、E)16=(0100,1011,1001,1110)2=(100101110011110)20000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F第2章 数据描述与基本操作2.0 预备知识 字节和位l内存以字节为单元组成l每个字节有一个地址l一个字节一般由8个二进制位组成l每个二进位的值是0或176432510 1 2 3 4 5 6 7 8 9 10.01234567第2章 数据描述与基本操作2.0 预备知识数值的表示方法原码
5、、反码和补码l原码:最高位为符号位,其余各位为数值本身的绝对 值。l反码:正数:反码与原码相同。负数:符号位为1,其余位对原码取反。l补码:正数:原码、反码、补码相同。负数:最高位为1,其余位为原码取反,再对整个数 加1。第2章 数据描述与基本操作2.0 预备知识数值的表示方法原码、反码和补码原码反码补码 +7000001110000011100000111-7100001111111100011111001 +0000000000000000000000000-0100000001111111100000000数的范围01111111 11111111 (-127+127)01111111
6、10000000 (-127+127)01111111 10000000 (-128+127)(用一字节表示数)负数补码转换成十进制数:最高位不动,其余位取反加1。 例 补码:11111001取反:10000110加1: 10000111=-7第2章 数据描述与基本操作2.1 数据类型 数据类型总表C 数 据 类 型基本类型构造类型指针类型 空类型void定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组 结构体struct 共用体union短整型short长整型long整型int数据类型决定: 1. 数据占内存字节数 2. 数据取值范围
7、 3. 其上可进行的操作第2章 数据描述与基本操作2.1 数据类型 基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767 (signed)short16-3276832767 (signed)long32-21474836482147483647 16unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38 有double641.7e-3081.7e308有char8-128127无unsigned char80255
8、说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例第2章 数据描述与基本操作2.2 不同数据类型间的转换什么情况下发生? 运算转换-不同类型数据混合运算时。 赋值转换-把一个值赋给与其类型不同的变量 时。 输出转换-输出时转换成指定的输出格式。 函数调用转换-实参与形参类型不一致时转换 。 运算转换规则:不同类型数据运算时先自动转换 成同一类型。 隐式转换第2章 数据描述与基本操作2.2 不同数据类型间的转换 隐式转换doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换第2章 数据描述与基本操作2.2 不同数据类
9、型间的转换 隐式转换intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble例 char ch;int i;float f;double d;10+a +i * f - d / lch / i + f * d - (f + i)例 int i;float f;double d;long l;第2章 数据描述与基本操作一般形式:(类型名)(表达式) 例: (int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变
10、。 2.2 不同数据类型间的转换 显式转换(强制转换)第2章 数据描述与基本操作例 main() float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生第2章 数据描述与基本操作2.3 常量和变量 标识符n定义:用来标识变量、常量、函数等的字符序列。n组成: 只能由字母、数字、下划线组成,且第一个字母必 须是字母或下划线 大小写敏感 不能使用关键字n长度:最长32个字符n命名原则: 见名知意 不宜混淆 如l与I, o与0第2章 数据描述与基本操作例:判断下列标识符
11、号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33charab$123第2章 数据描述与基本操作如 #define PRICE 30定义:程序运行时其值不能改变的量(即常数) 分类: 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量= !=) 逻辑运算符:(! k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3
12、;b=5;c=(a+)*b; /k=4,j=4 /k=3,j=4 /4 /3 /c=20,a=4 /c=15,a=4自增、自减运算符+ -第2章 数据描述与基本操作作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1)说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ -(2) (3) (4)例 -i+ -(i+)i=3; printf(“%d”,-i+); /- 3 例 j+k; (j+)+k;例 -i+i=3; printf
13、(“%d”,-i+); 自增、自减运算符+ - 第2章 数据描述与基本操作简单赋值运算符 符号: = 格式: 变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一 个变量复合赋值运算符 种类:+= -= *= /= %= = = d=func();c=d+2;赋值运算符和表达式第2章 数据描述与基本操作n结合方向:自右向左n优先级: 14n左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换 成其左边变量的类型例 3=x-2*y;a+b=3;例 float f; int i;i=10; f=i; 则 f=10.0例 int i;
14、 i=2.56; /结果i=2; 例: a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/表达式值为5,a,b,c值为5 / b=5;a=5 /表达式值11,c=6,a=11 /表达式值10,a=10,b=4,c=6 /表达式值5,a=5,b=10,c=2说明(1):第2章 数据描述与基本操作结合方向:自右向左优先级: 12左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换 成其左边变量的类型例: a=12; a+=a-=a*a例: int a=2; a%=4-1; a+=a*=a
15、-=a*=3; /a=-264 等价于a=a+(a=a-(a*a)/a=0 等价于a=a+(a=a*(a=a-(a=a*3)说明(2):第2章 数据描述与基本操作l形式:表达式1,表达式2,表达 式nl结合性:从左向右l优先级: 15l逗号表达式的值:等于表达式n的 值l用途:常用于循环for语句中例 a=3*5,a*4a=3*5,a*4,a+5 例 x=(a=3,6*3)x=a=3,6*a 例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值60 /a=15,表达式值20 /赋值表达式,表达