C语言第三章数据类型、运算符与表达式.ppt_第1页
C语言第三章数据类型、运算符与表达式.ppt_第2页
C语言第三章数据类型、运算符与表达式.ppt_第3页
C语言第三章数据类型、运算符与表达式.ppt_第4页
C语言第三章数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第三章 数据类型、运算符与表达式 第三章 数据类型、运算符和表达式 v主要内容 C语言的常量与变量 C语言的基本数据类型 各数据类型间的混合运算 运算符和表达式 C语言的数据类型 v我们上节课讲到: 著名的计算机科学家N. Wirth提出: 程序 = 数据结构(描述数据) + 算法(描述操作) v一个良好的程序,应当综合考虑算法和数据结构 v算法处理的对象是数据,而数据是以某种特定的形式 存在的 v数据结构是指数据的组织形式 C语言的数据类型 vC语言的数据结构是以数据类型形式出现的 C 数 据 类 型 指针类型 空类型 void 定义类型 typedef 基本类型 字符类型 char 数值类型 整 型 短整型 short 长整型 long 整型 int 浮点型 单精度型 float 双精度型 double 构造类型 枚举类型 enum 数组 结构体 struct 共用体 union 常量和变量 一、基本字符集 v字符,是组成语言的最基本元素,允许出现在C语言源 程序的所有字符的集合,称为字符集。 字母:az,AZ 数字:09 特殊字符:控制字符、分隔符、运算符 常量和变量 二、关键字 v关键字,也叫做保留字,是指在C语言中具有特定的含 义的字符,它们由系统定义,不能做为他用。 C语言中的一共有32个关键字: autobreakcase charconst continue defaultdodoubleelse enumexternfloatforgoto ifintlongregisterreturn shortsignedsizeofstaticstruct switchtypedefunsigned unionvoid volatilewhile 常量和变量 三、标识符 v用来标识变量名、符号常量名、函数名、数组名、类 型名、文件名的有效字符序列称为标识符。 也就是说,标识符是一个名字 vC语言中的标识符只能由字母、数字和下划线组成 而且第一个字符不能是数字 v不能将关键字作为标识符 常量和变量 vC语言中的标识符只能由字母、数字和下划线组成 而且第一个字符不能是数字 问题:下面四个选项中,均是合法的标识符的选项是 (A) a1 b! 12_e (B) min f12 1x (C) a int PI (D) x2 m_nsum min 常量和变量 v标识符的注意事项 C语言区分大小写,大小写不同的标识符是不同的 例如:Student和student是两个不同的标识符 标识符的长度有限制,要注意开发环境的限定 Turbo C 允许的标识符的最大长度是32 标识符的命名用有意义的单词组合 如:Stu_Num表示学号, 不要一味地用a, b, c等简单标识符名 常量和变量 三、常量 v常量:在程序的运行过程中,其值不能被改变 v常量的分类: 按字面形式 直接常量(字面常量 ) 符号常量 按数据类型 整型常量 实型常量 字符常量 0、-2、123 0.2、4.8、1.3e20 A 、g、+、? (用标识符表示的常量) /* Constant example*/ # #define PRICE 30define PRICE 30 main() int num, total; num = 10; total = num * PRICEPRICE; printf(“total=%d“, total) 运行结果:total=300 符号常量定义 符号常量使用 常量和变量 v使用符号常量的优点: 含义清晰(定义时要注意采用合适的常量名) 一改全改 /* Constant example*/ # #define PRICE 30define PRICE 30 main() int num, total; num = 10; total = num * PRICEPRICE; printf(“price=%d, total=%d“, PRICEPRICE, total) 运行结果:price=30, total=300 /* Constant example*/ # #define PRICE define PRICE 2525 main() int num, total; num = 10; total = num * PRICEPRICE; printf(“price=%d, total=%d“, PRICEPRICE, total) 运行结果:price=30, total=300 /* Constant example*/ # #define PRICE define PRICE 2525 main() int num, total; num = 10; total = num * PRICEPRICE; printf(“price=%d, total=%d“, PRICEPRICE, total) 运行结果:price=25, total=250 用指定的字符串PRICE来代替“25” 在预编译处理时 会将程序中所有“PRICE”用“25”代替 替换时是做简单地置换,不作正确性检查 常量和变量 v使用符号常量的优点: 含义清晰(定义时要注意采用合适的常量名) 一改全改 /* Constant example*/ # #define PRICE define PRICE 2525 main() int num, total; num = 10; total = num * PRICEPRICE; printf(“price=%d, total=%d”, PRICEPRICE, total); 运行结果:price=25, total=250 宏定义(参见第十一章) 常量名一般用大写字母 #define命令出现在函数外 有效范围是从定义处到源文件结束 宏定义不是C语句,不需要分号 常量和变量 v使用符号常量的优点: 含义清晰(定义时要注意采用合适的常量名) 一改全改 /* Constant example*/ # #define PRICE define PRICE 2525 main() int num, total; PRICEPRICE = 50; num = 10; total = num * PRICEPRICE; printf(“price=%d, total=%d“, PRICEPRICE, total) 运行结果:price=25, total=250 常量不能被再次赋值 编译时,简单地将“PRICE”替换成“25” 此语句被替换成:25 = 50 常量和变量 四、变量 v变量:在程序的运行过程中,其值可以被改变的量 v变量必须用有效的标识符作为名字 v变量名实际上是存放变量值的存储单元地址的抽象 XXXXXXXX XXXXXXXX 内存 XXXXXXXX int sum; sum XXXXXXXX 0 内存 XXXXXXXX sum=0; sum=sum+1; XXXXXXXX 1 内存 XXXXXXXX 常量和变量 四、变量 vC语言要求对所有变量:先定义,后使用(强制定义) 保证程序中的变量名使用正确 如:程序在声明部分声明变量student: int student; 在执行部分错写成studant: studant = 30; 在编译的时候会检查出studant未定义,不做为变量名 编译时分配相应的存储单元 编译时可以检查该变量所进行的运算是否合法 如:在程序的声明部分做了如下定义: int a;float b; 在程序的执行部分有下面运算: a % b 编译时会给出相关的出错信息 类型说明符 变量列表 int number 整型数据 一、整型常量的表示 v十进制 如:123,-123,0 v八进制 (以 0 开头) 如:0123 表示十进制数83 v十六进制(以 0x 开头) 如:0x123表示十进制数291 整型数据 二、整型变量在内存中的存储 v整型变量在内存中是以二进制补码补码的形式存放的 int i=10; int j=-10; 10 i j -10 00000000 00001010 11111111 11110110 11111111 11110101 取反 加1 整型数据 三、整型变量的种类 v基本类型:int v根据数值的范围分为:int,short,long v根据有无符号(singed/unsigned)及范围可分: 类 型比特数取值范围 signed int16-215 (215-1) unsigned int160 (216-1) signed short int16-215 (215-1) unsigned short int160 (216-1) signed long int32-231 (231-1) unsinged long int320 (232-1) 01111111 11111111 signed int 的最大值 32767 (215-1) 10000000 00000000 signed int 的最小值 -32768(-215 ) 11111111 11111111 unsigned int的最大值 65535 (216-1) 00000000 00000000 unsigned int的最小值 0 整型数据 四、整型变量的定义 v变量定义放在函数开头的声明部分或者函数中某一分 程序开头的声明部分。 main() int a,b,c,d; unsigned u; a = 12; b = -24; u=10; c=a+u; d=b+u; printf(“c=%d,d=%d“,c,d); main() int a,b; unsigned u; a = 12; b = -24; u=10; int c,d; c=a+u; d=b+u; printf(“c=%d,d=%d“,c,d); Compiling c:ex3-2.c Error 5: Expression syntax in function main Error 6: Undefined symbol c in function main Error 7: Undefined symbol d in function main main() int a,b; unsigned u; a = 12; b = -24; u=10; int c,d; c=a+u; d=b+u; printf(“c=%d,d=%d“,c,d); 整型数据 五、整型数据的溢出 v一个int型变量允许的最大值是32767 01111111 11111111 signed int 的最大值 32767 (215-1) 10000000 00000000 signed int 的最小值 -32768(-215 ) 当给32767加1时: 01111111 1111111110000000 00000000 main() int a, b; a = 32767; b = a + 1; printf(“a=%d,b=%d“,a,b); a = 32767, b = -32768 输出: 整型数据 五、整型数据的溢出 v一个int型变量允许的最大值是32767 main() int a, b; a = 65544; b = a + 1; printf(“a=%d,b=%d“,a,b); a = 8, b = 9 输出: 0000100000000000a1 0000100100000000b1 整型数据 六、整型常量的类型 v一个整数,若值在-3276832767范围内,认为是int型 v一个整数,若在-21474836482148473647范围内,而 超过了-3276832767的范围,认为是long int型 v一个整数,后面加一个字母u或U,认为是unsigned int型 如:12345u v一个整数,后面加一个字母l或L,认为是long int型 如:12345L 实型数据 一、实型常量的表示 v十进制小数形式如:.123 123. 0.123 0.0 v指数形式 如:123e3 123E3 1.23e5 注意:e的前面必须有数字,后面必须是整数 如:e32 1.23e2.3 e 都是不合法的 实型数据 二、实型变量在内存中的存储 v实型变量在内存中以指数指数的形式存放,一般占4个字节 float f = 3.14159; 3.14159 = 0.314159 101 = 0.1100100 10000111 11100111 101 01100100 10000111 1110011100000001 阶码小数部分数符阶符 实型数据 三、实型变量的种类 v基本类型:float v根据数值的范围分为: vfloat(单精度型) vdouble(双精度型) vlong double(长双精度型) 类 型字节数有效数字取值范围 float46710-38 1038 double8151610-308 10308 long double16181910-4932104932 main() float a,b; a = 12345.6789e5; b = a + 20; printf(“a=%fnb=%f“,a,b); a = 1234567848.000000 b = 1234567848.000000 输出: 实型数据 四、实型常量的类型 vC编译系统将一个实数做为double类型处理 main() double a; float b; a = 2.45678 * 4523.65; b = 2.45678 * 4523.65; printf(“a=%fnb=%f“,a,b); a = 11113.612847 b = 11113.613281 输出: 先计算出 2.45678*4523.65=1113.612847 然后将前7位数赋值给float型的b 实型数据 四、实型常量的类型 vC编译系统将一个实数做为double类型处理 v可以在实数后面加f或F,表示float型实数, 编译系统会按单精度实数(32位)处理 如:123.456f 456.789F 字符型数据 一、字符常量的表示 v用单引号括起的单个字符如:a B ? v用“”开头的转义字符 字符形式含 义ASCII码 n换行,将当前位置移到下一行开头10 t水平制表(跳到下一个tab位置)9 b退格,将当前位置移到前一列8 r回车,将当前位置移到本行开头(不换行 ) 13 f换页,将当前位置移到下页开头12 反斜杠字符“”92 单撇号字符39 “双撇号字符34 ddd1到3位8进制数所代表的字符 xhh1到2位16进制数所代表的字符 012 或 xa 表示ASCII码为10的“换行” 101 或 x41表示ASCII码为65的字母A 000 或 x00 表示ASCII码为0的“空操作”字符 字符型数据 二、字符变量在内存中的存储 v一个字符变量只能存放一个字符 v定义形式:char c1, c2; v赋值:c1 = a;c2 = n; v字符数据在内存中以ASCII码(二进制)的方式存储 占一个字节 0 1 1 0 0 0 0 1 c1 97 0 0 0 0 1 0 1 0 c2 10 字符型数据 一、字符变量在内存中的存储 v字符数据可以和整型数据通用 a, b 97, 98 输出: main() char ch1, ch2; ch1 = 97; ch2 = 98; printf(“%c, %cn “, ch1, ch2); printf(“%d, %dn “, ch1, ch2); 字符型数据 一、字符变量在内存中的存储 v字符数据可以和整型数据通用 a, 97 a, 97 输出: main() char ch; int i; ch = 97; i = a; printf(“%c, %dn “, ch, ch); printf(“%c, %dn “, i, i); 字符型数据 一、字符变量在内存中的存储 v字符数据可以和整型数据通用 D, 68 a, 97 输出: main() /*大小写字母转换*/ char c1, c2; c1 = A; c2 = c1+32; c1 = c1 + 3; printf(“%c, %dn “, c1, c1); printf(“%c, %dn “, c2, c2); 问题:已知换行的ASCII码值为10,则下列正确表示换 行符的方法是:(ch是字符型变量) (A)ch=n; (B)ch=10; (C)ch=12; (D)ch=x10; (E)ch=xa; (F)ch=10; 字符型数据 字符型数据 二、字符常量的表示 main() printf(“ ab ct derftgn“); printf(“htibbj k”); 显示器 123456789 10 11 a b c d ef g h ij k 显示器显示结果的特点: 向回返的特殊符号(r b等),并没有清除原有的内容 向前进的特殊符号(t空格)或字符修改了原有的内容 字符型数据 三、字符串常量 v字符串常量是一对双撇号括起来的字符序列 如:“Hello Word!“ “a“ “123.4546e3“ v注意: “a” 和 a 的区别 char c; c=a; c=“a“; O 字符型数据 四、字符串常量的存储 vC语言将字符0作为字符串的结束标志 china 0字符串“china“ 970字符串“a“0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 97字符a0 1 1 0 0 0 0 1 0是系统自动加上的,写字符串的时候不必加0 c=“a“;c=“a0“;O C 语言的运算符 vC 语言的运算符 运算符是描述对数据进行特定运算的符号 算术运算符 + - * / % + - 关系运算符 = = != 逻辑 运算符 ! 变量数据类型 变量名; 变量名变量初值; float x = 3.125 ; int i = -5 ; char c = A ; float x ; int i ; char c ; x = 3.125 ; i = -5 ; c = A ; 若同时给几个变量赋值:int a = 5, b = 5, c = 5 ; 赋值运算符和赋值表达式 v类型转换: 将实型值赋值给整型变量时,舍弃小数部分 将整型赋值给实型变量时,数值不变,以浮点形式存储 到变量中 将double型值赋值给float型变量时,截取前面7位有效 数字 将一个数值(整型或实型)赋值给一个字符型变量时, 将数值的低8位赋值给字符变量即可 int a; a = 2.845 ;/* a被赋值2 */ float f; double d; f = 23 ; /* f被赋值23.00000 */ d = 23 ;/* d被赋值23.00000000000000 */ 7位 16位 float f; double d; d = 123.456789e5 ; f = d ; printf(“f=%fnd=%fn“, f, d); f = 12345679.000000 d = 12345678.900000 输出: int i; char c; i = 289 ; c = i ; printf(“i=%dnc=%cn“, i, c); 0010000100000001i 00100001c i = 289 c = ! 输出: 33 赋值运算符和赋值表达式 v类型转换: 将字符型数据赋值给整型变量时,将字符数据(8位) 赋值给整型变量的低8位即可 若字符最高位为0,则整型变量高8位补0 若字符最高位为1,则整型变量高8位补1 int i; char c; c = 65 ; i = c ; printf(“i=%dnc=%cn“, i, c); 01000001c 0100000100000000i i = 65 c = A 输出: int i; char c; c = 246 ; i = c ; printf(“i=%dnc=%cn“, i, c); 11110110c 1111011011111111i i = -10 c = 输出: 赋值运算符和赋值表达式 v复合赋值运算符: 在“=”之前加上其他运算符,就构成了复合赋值运算符 有:+=, -=, *=, /=, %= 含义:变量标识符 op= 表达式 变量标识符 = 变量标识符 op 表达式 a += 3 x *= y+8 x %= 3 a = a + 3 x = x * (y+8) x = x % 3 赋值运算符和赋值表达式 v赋值表达式的嵌套: int a, b, c; a=b=c=5; a=5+(c=6); a=(b=4)+(c=6); int a=b=c=5; O c = 5, b = c = 5, a = b = 5 c = 6, a = 5+c = 5+6 = 11 b = 4, c = 6, a = b+c = 10 赋值运算符和赋值表达式 v赋值表达式的嵌套: int a=12; a += a -= a*a ; a += a -= 144 a += (a = a 144) a += (a = -132) a = a + a (a = -132) a = (-132) + (-132) a = -264 逗号运算符和逗号表达式 v逗号运算符:用来将两个表达式连接起来 v形式:表达式1, 表达式2, 表达式3, , 表达式n v优先级:(最低) v结合方向:从左至右 v表达式的值:表达式n的值 v用途:通常用于循环结构的for语句中 逗号运算符和逗号表达式 a = 3*4, 5*2 ; a = (a=3, 5*2) ; a=1; b=2; c=3; printf(“%d,%d,%d“, a, b, c); printf(“%d,%d,%d“, (a, b, c), b, c); a = 12,表达式的值:10 a = 10 输出:1, 2, 3 输出:3, 2, 3 算术运算符和算术表达式 v基本的算术运算符: +:加法(或正值)运算符如:3+2,+3.5 - :减法(或负值)运算符如:3-2,-3.5 * :乘法运算符如:3*2,3.5*2 / :除法运算符如:3/2,3.5/2 要说明的是:两个整数相除的结果仍为整数:5/3=1 若结果为负值,多数机器采用向零取整的办法:-5/3=-1 % :模运算符(两个运算量都是整数) 如:3%2 算术运算符和算术表达式 v算术表达式 用算术运算符和括号,将运算对象(操作数)连接起来 符合C语法规则的式子 例如:a*b/c+1.5-3.28+f 算术运算符和算术表达式 v基本的算术运算符:+,-,*,/,% 结合方向:从左至右(左结合性) 优先级别:- (负值) * / % + - (减法) v说明: 整数的算术运算结果仍为整数 若算术运算中有一个实数,则运算结果为double型 %只能进行整数的取模运算,余数与被除数符号相同 “”为负值运算符时(单目运算),为右结合性 2 3 4 5 / 3 - 3 * 2 + - 2.5 = - 7.500000 5 / 2 = -5 / 2.0 = 5 % 2 = -5 % 2 = 5 % -2 = -5 % -2 = 5 % 1 = 5 % 1.0 = 2 - 2.500000 1 - 1 1 - 1 0 O 自增、自减运算符 v作用:使变量值增1或减1 +i -i:先执行i=i+1(或i=i-1),再使用i的值 i+ i-:先使用i的值,再执行i=i+1(

温馨提示

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

评论

0/150

提交评论