




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 2 章 数据类型、运算符与表达 式 1 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 c常量与变量 c整型数据 c字符型数据 c浮点型数据 c运算符和表达式 c 不同类型数据间的转换 2 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 枚举类型enum C 数 据 类 型 基本类型 构造类型 指针类型 空类型void 定义类型typedef 字符类型char 整 型 实型 单精度型float 双精度型double 数组 结构体struct 共用体union 短整型short 长整型long 整型int 数据类型决定: 1. 数据占内存字节数 2. 数据可以执行的操作 2.1 C语言的数据类型 3 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 2.2常量与变量 标识符: 定义:用来标识变量、常量、函数等的字符序 列 组成: c 只能由字母、数字、下划线组成,且第一个字母 必须是字母或下划线 c 大小写敏感 c 不能使用关键字 c 长度:最长31个字符 命名原则: 见名知意 不易混淆 如1、l与I, o与0 例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123 32个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义) ) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while C语言使用常量和变量来表示程序中使用的数据 4 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 常 量 一般用大写字母 是宏定义预处理命令,不是C语句 c 直接常量: 整型常量 实型常量 字符常量 字符串常量 如 #define PRICE 30 定义:程序运行时其值不能改变的量(即常数) v 分类: c 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量 例 符号常量举例 #define PRICE 30 main() int num,total; num=10; total=num*PRICE; printf(“total=%d“,total); 运行结果:total=300 5 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 变 量 编译程序根据变量定义为其 分配指定字节的内存单元 . 地址 int a=1, b=-3,c; a b c 2字节 2字节 2字节 地址 地址 . 内存 1 -3 随机数 概念:其值可以改变的量。数据及其存储空间的抽象。 v 变量名与变量值 v 变量定义的一般格式: 数据类型 变量1,变量2,变量n; v 变量初始化:定义时赋初值 例: int a, b, c; float data; 决定分配字节数 和数的表示范围 以及可执行的操作 合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1; 例1 int student; stadent=19; /Undefined symbol statent in function main v 变量定义位置:一般放在函数开头 main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data); 变量定义 可执行语句 main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data); v 变量的使用:先定义,后使用 Error:expression syntax in function main 6 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 变量的赋值 传送数据到变量所代表的存储单元。 赋值操作用“=”表示,一般形式为:变量=表达式, 如: a = 1.0; /* 把1.0传送给a*/ a = a + 1; /*把a的值加上1后传给a*/ 用赋值号连接变量和表达式的式子称为赋值表达式 。 赋值符号的运算方向为自右向左。 赋值表达式的值是被赋值后的变量的值。如: d=c=b=a=3+5 赋值表达式 7 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 /*定义x, y为整型数*/ unsigned short m, n; /*定义m, n为无符号短整型数*/ long a; /*定义a为长整型数*/ 9 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 a=32767; b=a+1; printf(“%d,%dn“,a,b); 运行结果: 32767, -32768 01 11 11 11 11 11 11 11a:最大:32767 10 00 00 00 00 00 00 00最小:-32768 b: 说明计算机在运算时, 出现数据溢出情况, 达到最大值后,又从最小值算起。 表示a为字符型,在内存中占用8位即1个字节 0 1 1 0 0 0 0 1 #include void main() int a = 97; printf(“%c = %dn”, a, a); 输出:a = 97 12 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 int total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%d,ch1=%cn”,total,ch1); 宏定义 变量定义 输出结果 运行结果: total=30, ch1=d 15 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 例 /*转义字符的使用*/ #include void main() printf(“ ab ct derftgn”); printf(“htibbj kn”); 1234567812345678 1234567812345678 f g d e h j k abcdefg hijk 16 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 例 /*转义字符的使用*/ #include void main() printf(“ABbCDEFrGHn”); 在屏幕上显示结果为:? GHDEF 17 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 3.5 实数类型 实数在C语言中又称为浮点数。浮点数有且只有两种表示形式: 1、十进制形式。这种形式的数由整数部分、小数点和小数部分组 成。如:1.24,0.345 ,.222 ,234.0 ,333. ,0.0等。 2、指数形式。这种形式用来表示一些比较大的数值,它们是实数 部分、字母E或e、整数部分。表示形式:e 要注意: 1 字母E或e之前之后必须有数字 2 之后的数字必须为整数 3 没有八进制或十六进制实数表示法 规范化浮点数: 在字母e(E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零 数字。 123.456=123.456e0=12.3456e1=1.23456e2=0.123456e31.234e4, 0e3, 1e, e2.344545e23, e4, 2.3e4.2 18 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 浮点数的分类 数据类类型别别称解释释 内存中所占 字节节数 表示数值值的范围围 float无单精度类型4字节 10381038(正负数) double无双精度类型8字节10-30810308(正负数) float型的数据在内存中占4个字节的空间,double型的数据在内存 中占8个字节的空间。 float型的数据提供67位有效数字,double型的数据提供1516位 的有效数字。 实型常量总是按double型处理。 浮点数的存储方式 符号位尾数指数(阶码) + .314159+1 19 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 x=7.1234567890; printf(“%20.18f“,x ); 7.12345695495605469 0_ x被赋值了一个有效位数为11位的数字。在printf语句 中使用%20.18f 指示printf语句在输出x时总长度应为20位,小数点位 数占18位。 输出的结果表明float型的数据只接收7位有效数字。 21 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 sizeof运算符 用途:测定某一数据类型所占存储空间的长度 。 格式:sizeof(类型标识符) 例子:#include void main() short s; long l; float f; char c; printf(“short is %d bytesn“, sizeof(s); /* short is 2*/ printf(“long is %d bytesn“, sizeof(l); /* long is 4*/ printf(“float is %d bytesn“, sizeof(f); /* float is 4*/ printf(“char is %d bytesn“, sizeof(c); /* char is 1*/ 22 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 基本数据类型小结 类型符号关键字数的表示范围所占位数 整型字符型实型 有 无 (signed)int16 -3276832767 (signed)short16 -3276832767 (signed)long 32 -21474836482147483647 16unsigned int 065535 32 04294967295unsigned long unsigned short16 065535 有float 32 1.2e-383.4e38 有double642.2e-3081.7e308 有char 8-128127 无unsigned char 80255 说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例: 23 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 3.6 运算符和表达式 运算符(操作符)是表述最基本的运算形 式的符号。 表达式由运算符(操作符)和运算量(操 作数)组成,用以描述对什么数据以什么 顺序进行什么操作。 任何有值的东西都可以称为表达式。 24 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 C语言中的运算符(13类) 算术运算符:+ - * / % + - 关系运算符: = != 逻辑运算符:! float d; a*b/c-1.5 (a*b)/c*1.5 27 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 自增、自减运算符 + - c作用:使变量值加1或减1 优先级与相同,右结合 c种类: 前置 +i, -i (先执行i+1或i-1,再使用i值相当于i=i+1) 后置 i+,i- (先使用i值,再执行i+1或i-1) 例 j=3; 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;b=5;c=(a+)*b; /k=4,j=4 /k=3,j=4 /4 /3 /c=20,a=4 /c=15,a=4 说明: + - 不能用于常量和表达式,如5+, (a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ - (2) (3) (4) 例 -i+ i=3; printf(“%d”,-i+); 例 -i+ -(i+) i=3; printf(“%d”,-i+); /- 3 28 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 2赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量标识符 = 表达式 作用:将一个数据(常量或表达式)赋给一个变量 a+=3a=a+3 x*=y+8x=x*(y+8) x%=3x=x%3 例 a=3; d=func(); c=d+2; 复合赋值运算符 种类:+= -= *= /= %= = = a+b=3; 例 int i; i=2.56; /结果i=2; 例: a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) /表达式值11,c=6,a=11 /表达式值10,a=10,b=4,c=6 /表达式值5,a=5,b=10,c=2 赋值转换规则:使赋值号右边表达式值自动转换成 其左边变量的类型 赋值表达式的值与变量值相等,且可嵌套 例: a=12; a+=a-=a*a/a=-264 等价于a=a+(a=a-(a*a) 30 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 3逗号运算符和表达式 形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:求多个表达式的连续计算,常用于循环 for语句中 例 a=3*5,a*4 a=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 /赋值表达式,表达式值18,x=18 /逗号表达式,表达式值18,x=3 /1,2,3 /3,2,3 例: #include main() int x,y=7; int z=4; x=(y=y+6,y/z); printf(“x=%dn“,x); 运行结果:x=3 31 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 4关系运算符和表达式 关系运算符 种类:= != 结合方向:自左向右 优先级别: 6-7 运算结果为:1 或 0 例 int a=3,b=2,c=1,d,f; ab c= ab b+cb f=abc /表达式值1 /表达式值1 /表达式值0 /d=1 /f=0 = = != 优先级 (高) 优先级 (低) 32 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 关系运算注意事项: 例 若a=0; b=0.5; x=0.3; 则 a0 结果为 A100 结果为 1 0 应避免对实数作相等或不等 的判断 如 1.0/3.0*3.0=1.0 结果为 0 例 注意区分“=”与“=” int a=0,b=1; if (a=b) printf(“a equal to b”); else printf(“a not equal to b”); a equal to b (a= =b) a not equal to b 33 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 5逻辑运算符和表达式 ab!a!bab=5; !a ab=2;c=3;d=4;m=1;n=1; (m=ab) else printf(“%d”,b); printf(“%d”,ab?a:b); 例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b); expr1 取expr2值取expr3值 非0=0 例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a x0,表达式值为a xy?1:1.5 /xy ,值为1.0; x 良好的源程序书写习惯: 表达式中,在双目运算符的左右两侧各加一个空格,可 增强程序的可读性。 比较:“(x + y) / 2 1” 与 “(x+y)/21” 尽量把复杂的表达式分成多个表达式来写。 尽量使用圆括号显式指明哪部分先运算,而不是依赖 运算符的优先级。 #include main() int x,y=7; int z=4; x=(y=y+6,y/z); printf(“x=%dn“,x); #include main() int x; int y = 7; int z = 4; y += 6; x = y / z; printf(“x=%dn“, x); 知识提示 : 结合性是语言的独有概念。除单目运算符、赋 值运算符和条件运算符是右结合性外,其它运算 符都是左结合性。 38 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 不同类型数据间的转 换 三种形式 c 同一类型但长度不同的数据间的转换 如:int x = 1; long y = 50000; x + y = 50001 c 定点方式与浮点方式间的转换 如:int x = 1, float y = 1.0; x + y = 2.0 c 整型数中有符号数和无符号数间的转换 如:unsigned int x = 1, int y = -2; x + y = ?65535 39 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 注意 有符号与无符号之转换 由有符号负数转为同长度的无符号数时,最高位不再被当作符 号位,结果相当于216或232加上该负值 由无符号数(超出表示范围)转为同长度的无符号数时,最高 位被当作符号位,结果相当于该数减去216或232。 实数转整数,小数被截取。double转float,超出有效数字范围的四 舍五入。 数据转换可能丢失精度。在截取与四舍五入及long型转实型时可能 发生。 数据转换结果具有不确定性。将较长整数转为较短整数时,只低字 节有效。double转float, 实数转整数时,如值超过目标类型的取值范 围,则结果是不确定的。 #include void main() long a = 80000, b = 3200L; short i, j; double d = 123456.789098765; float f; short s; i = a; j = b; f = d; s = d; printf(“%ld = %hdn“, a, i); printf(“%ld = %hdn“, b, j); printf(“%16.9lf = %f = %16.9hdn“, d, f, s); 输出 80000 = 14464 /* 80000 = 0x1 3880, 0x3880 = 14464 */ 3200 = 3200 123456.789098765 = 123456.789062500 = -7616 40 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 隐式转换 什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变 量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转 换 运算转换规则 不同类型数据运算时先自动自动转换成同一类型,转 换结果使表达式中只有5种类型,即: int, unsigned int, long, unsigned long, double “向高看齐”原则。 41 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 doublefloat long unsigned intchar,short 低 高 说明: 必定的转换 运算对象类型不同时转换 例 char ch; int i; float f; double d; ch/i + f*d - (f+i) int int double double double double double double 42 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 显式转换(强制转换) c 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (double)3/2 (int)3.6 c 说明:强制转换得到所需类型的中间变量 ,原变量类型不变 c优先级为(2),右结合 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3 精度损失问题 较高类型向较低类型转换时可能发生 43 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 1 * -2 + 3 / 4 1 * -2 + 3 / 4 扫描方向 -2 -2 0 -2 Back 44 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 (int) x + y (int) x + y 扫描方向假设: x = -2.6 y = 3 -2 TC 规则:向零取整 1 Back 45 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 -i + -i + 扫描方向假设: i = 1 1 -1 (1) 表达式的值:-1 (2) i 的值:2 Back 46 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 i + j i + j 扫描方向假设: i = 1 j = 2 1 3 (1) 表达式的值:3 (2) i 的值:2 Back 47 程序设计基础(程序设计基础( C C语言)语言) 第 2 章 数据类型、运算符和表达式 a += a -= a * a a += a -= a * a 扫描方向 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五星村农房买卖协议合同
- 5亿元采购施工合同范本
- 大型发电机租售合同协议
- 合同期满搬离协议书范本
- 医院清洁工聘用合同范本
- 合同协议终止与解除范本
- 厨师业内合同协议书范本
- 1983年劳动合同范本
- 厂房出售中介费合同范本
- 办公家具销售合同协议书
- 冶金渣公司安全生产委员会工作职责
- 老年患者护理心理护理
- 项目担保合作协议范本
- 2024-2025学年湖南省“炎德·英才·名校联考联合体”高二第一次联考(暨入学检测)数学试题(含答案)
- 夹娃娃机合同模板
- 维修人员技能提升与企业绩效关联研究
- 2024-2030年中国儿童室内游乐园行业市场发展现状及发展趋势与投资前景研究报告
- GB 44263-2024电动汽车传导充电系统安全要求
- 项目资金融资合同范本
- DL∕T 1945-2018 高压直流输电系统换流变压器标准化接口规范
- DL∕T 1848-2018 220kV和110kV变压器中性点过电压保护技术规范
评论
0/150
提交评论