1 / 52

第 二 章 数据类型、运算符 与表达式

计算机程序设计. 第 二 章 数据类型、运算符 与表达式. 计算机学院 613 教研室 唐晋韬. 本章内容. 2.1 C++ 的字符集和关键字 2.2 基本数据类型 2.3 变量与常量 2.4 类型转换 2.5 运算符与表达式. 学习目标. 理解字符集、标识符、关键字 掌握基本数据类型的定义 掌握不同数据类型之间的转换机制 掌握常量、变量的声明方法 熟练运用各种运算符与表达式 实践目标:构造一个简单的计算器. 如果说编程和写作类似. 就让我们从识字组词开始吧. 2.1 C++ 的字符集和关键字.

Download Presentation

第 二 章 数据类型、运算符 与表达式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机程序设计 第二章 数据类型、运算符 与表达式 计算机学院613教研室 唐晋韬

  2. 本章内容 • 2.1 C++的字符集和关键字 • 2.2 基本数据类型 • 2.3 变量与常量 • 2.4 类型转换 • 2.5 运算符与表达式

  3. 学习目标 • 理解字符集、标识符、关键字 • 掌握基本数据类型的定义 • 掌握不同数据类型之间的转换机制 • 掌握常量、变量的声明方法 • 熟练运用各种运算符与表达式 • 实践目标:构造一个简单的计算器

  4. 如果说编程和写作类似 就让我们从识字组词开始吧

  5. 2.1 C++的字符集和关键字 • C++中的“字符集” • 从形式上看,程序是一个字符序列 • C++规定了构成源程序的基本源字符集 • 在源程序中能出现的字符是有限的 • 但要排除:注释、字符串两种环境 • 在上述两种环境中,可以出现任意字符

  6. 2.1 C++的字符集和关键字 • C++基本源字符集 • 大小写的英文字母:A-Z,a-z • 数字字符:0-9 • 其他字符:_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ “ ‘ • 编辑字符:空格、换行等等 除了` @ $ 之外的其余键盘符

  7. 2.1 C++的字符集和关键字 • 标识符(Identifier) • 高级语言中,数据对象的名字 • 常量名、变量名 • 函数名、语句标号 • C++标识符是满足如下条件的一串字符 • 由字母(a~z,A~Z)或下划线(_)开头; • 其它部分可以由字母、下划线或数字组成; • 只有前32个字符有效; • 用户定义标识符不能与系统预定义标识符相同

  8. 2.1 C++的字符集和关键字 • 下面那些是合法标识符? • 5key - bomb? • K32ll5_22dfd_d_fdfffffffff2223ferfe • key_board - __________ • smart - _decision • static • 需注意: • C 语言是区分大小写的,比如 Smart 和 smart 被认为是两个不同的标识符 • 标识符有效长度只有32位 哪些具有良好编程风格?

  9. 2.1 C++的字符集和关键字 • 关键字(Keyword) • 又称保留字,C++预先规定的具有固定含义的一些单词 ,程序员不能将关键字挪作它用,见表2-1 • 代表了计算机的动作、预定义的数据类型、程序段的标识等等 • 在VC6 环境中,关键字会自动以蓝色高亮显示 • #include中include 不是关键字 • 还有#define、#ifdef等预处理指令 • 最好不将其用作自定义标识符

  10. 2.1 C++的字符集和关键字 • 运算符(Operator) • 实现各种运算功能,详见2.5节及附录A • 分隔符(Separator) • 空格、回车/换行、逗号等 • 其它符号 • 大花括号“{”和“}”通常用于标识函数体或者一个语句块 • “//”、“/*”和“*/”是程序注释所需的定界符

  11. C++例子 关键字 标识符 运算符 分隔符

  12. 2.2 基本数据类型 • C++程序中的每个数据对象(如2、x1、x1+2)都有确定的数据类型,为什么? • 如果是8位小整数,则是65和66 • 如果是字符,则是’A’和’B’ • 如果是16位整数,则是16706 • 如果是?? • 不同数据类型规定了自己所占的位数、取值范围,以及所允许的操作

  13. 2.2 基本数据类型 • 数据类型 • 同一类型的数据,其成分都有相同的特性,可以进行相同的操作 • 数据类型的定义决定了该类型所有可能取得值以及在这些值上可容许的操作

  14. 2.2 基本数据类型 • 整型 • 根据最高位的作用,分为有符号(signed)和无符号(unsigned)两大类 • 根据存储长度,可以分为短整型(short)、整型(int)、长整型(long)三类 • 因此,总共有6种组合:signed short int(简写为 short ), signed int(简写为 int ), signed long int(简写为 long ),unsigned short int (简写为 unsignedshort), unsigned int(简写为 unsigned ), unsigned long int(简写为 unsigned long) 短整型<=整型<=长整型

  15. 2.2 基本数据类型 • 浮点型 • float (浮点型):32bit • double (双精度型):64bit • long double (长双精度型):64bit • 所有的浮点类型都是有符号的

  16. 2.2 基本数据类型 • 字符型 • char • signed char • unsigned char • 实质是占一个字节的整型数(小整数) • 关键字:wchat_t = unsigned short int

  17. 2.2 基本数据类型 • 布尔型 • 布尔逻辑数据 • 值为true和false • 可以当作整数用(true一般为1,false为0) • 把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false • 可以进行逻辑运算

  18. 2.3 变量与常量 • 在程序运行中,一直不变的数据为常量,,自身的值会动态改变的数据为变量 变量 常量 操作符

  19. 2.3 变量与常量 • 整型常量 • 十进制:缺省情况为十进制整型常量,如2010, 100 • 八进制:八进制整型常量以 0 开头,如0135,020,注意 0 后出现的数字只能介于0~7之间 • 十六进制:十六进制常量以 0x 开头,如 0x85B2,注意,其中的 A~ F 分别表示 10~15

  20. 2.3 变量与常量 • 浮点常量 • 小数表示:0.23, 2.34,2.34f • 指数表示:12e3, 23e-4 基数部分 12 E -2 指数部分

  21. 2.3 变量与常量 • 字符常量 • 普通字符: ‘a’,‘1’, ’’ • 那如何表示单引号’? • 反斜杠表示转义:'\’','\”’ • 八进制、十六进制转义:\033, \X09 • 常见转义字符见表2.5

  22. 2.3 变量与常量 • 字符串常量 • 一个字符序列也经常会成为处理对象,称为字符串 • 在字符串中可以包含转义字符 • "abcdefg", "china\n“ • 字符串常量与字符常量的区别 • 长度不一样 • 定界符不一样 • 存储方式不一样 “a” \0 a a ‘a’

  23. 2.3 变量与常量 • 课堂练习 • 模仿Hello World 程序,输出如下字符串 Hey Jude “D:\\Music\孙燕姿\Hey_Jude.mp3” Hey Jude, don't be afraid You were made to go out and get her The minute You let her under your skin Then you‘ll begin to make it better

  24. 2.3 变量与常量 • 符号常量 • 常量可以用一个标识符来命名 • #define PI 3.1415926 • 直接出现在程序中的常量称为文字常量

  25. 2.3 变量与常量 • 变量 • 在 C++ 程序中,除了常量之外,大多数数据对象是动态比变化的。随着程序的运行,它们会改变自身的值。这些量称为变量 • 每个变量在内存中均占有一定的存储单元来存储;所需存储单元的数目由其数据类型决定 • 变量的声明 • 示例 • <类型描述符><变量名标识符>; • int a; • float b, c;

  26. 2.3 变量与常量 • 内存存储单元与变量类型 • 内存存储单元以字节为单位编号 • 存储不同类型的变量,所需存储单元的数目不同,比如:整型变量占四个字节,字符型变量一个字节

  27. 2.3 变量与常量 变量名 a b 5 6 • 变量的属性 • 地址:变量所占(起始)存储单元的编号 • 值:变量当前存放的内容 • 如果把内存单元比作房间 • 地址就是房间号 • 值就是房间里的物品 • 地址和值的关系 • 对于一个变量来说,程序一旦运行,它的地址是不会发生改变的 • 而它的值却会随着程序的运行发生变化 1000 1004 变量地址

  28. 2.3 变量与常量 • 变量一定要“先声明、后使用” • 试编译下面的程序 • 变量在使用前一般要初始化(赋初值) #include <iostream.h> int main(){ int a; cout << a << endl; return 0; } #include <iostream.h> int main(){ cout << a << endl; return 0; }

  29. 2.3 变量与常量 inta=3, b=2; int main() { … return 0; } int max(int x, int y) {… } 全局变量a 和 b • 变量的作用域 • 变量在程序中可以使用的有效范围 • 一切变量的作用域都始于变量的声明之处 • 在某一层次声明的变量的作用域就终止于该变量所在层次的末尾 这里可以访问 a 和 b 这里也可以访问 a 和 b

  30. 2.3 变量与常量 • 局部变量 • 局部变量就是在一对花括号内部声明的变量,其作用域为其所在花括号的内部 int main() { inta=3, b=2; …… return 0; } intmax(int x, int y) { } 局部变量 a 和 b,其作用范围在 main() 函数中 在函数max()中,局部变量a 和b不可见

  31. 变量作用域 参数 x 和 y 也是局部变量,只有在 max() 函数中可见 int main() { inta=3, b=2; …… return 0; } intmax (int x, int y) { int c,d; …… } 局部变量 c 和 d, 其作用范围在 max() 函数中

  32. 课堂练习 int main() { inta=3, b=2; …… { int c, d; if (c<a) …… } …… return 0; } 指出变量a 和 b 的 作用域 指出变量c 和 d 的 作用域

  33. “就近作用”原则 局部变量的声明“屏蔽”了全局变量 inta=3, b=2; intmain() { cout <<a<<endl; return 0; } 这里会输出什么? { int a=1; cout <<a<<endl; cout<<::a<<endl; } { int a=1; cout <<a<<endl; } 这里又会输出什么?

  34. 2.3 变量与常量 • 例子:1斤樱桃30元,输入要买的斤数,得到总价 #define PRICE 30 #include <stdio.h> int main() { intnum, total; printf("please input the num:"); scanf("%d",&num); total=num* PRICE; printf("total=%d\n",total); return 0; } 如果1斤29.99元,求3.6斤的价格呢? 数据类型的选择很重要

  35. 2.3 变量与常量 • 为什么要使用符号常量? • 如果程序中某个字面常量多次出现…… • 当这个字面常量需要改变时,得修改每一个出现,定义一个符号常量就好多了⋯ circle = 2* 3.14* r; crea= 3.14* r * r; #define PI 3.14 Circ = 2* PI* r; Area = PI* r * r; 只要改这里

  36. 2.4 类型转换 • 显式类型转换 • (int)3.14 将3.14转换成整数3 • (double)3 将3转换成双精度浮点数3.0 • 隐式类型转换:提升规则 • 表达式中运算符的操作数类型与要求不符时,进行隐式类型转换 • 隐式类型转换规则:将不同类型的数据转换成精度最高、占用内存最多的那个数据的类型 2 + 3.4  2.0 + 3.4

  37. 提升规则 高 低

  38. 2.5 运算符和表达式 • 算术运算符 • 关系运算符 • 逻辑运算符 • 位运算符 • 赋值运算符

  39. 2.5 运算符和表达式 • 2.5.1 算术运算符 • 一元 • + 正号 • - 负号 • ++ 前自增、后自增 • int a, b = 3; • a = ++b; • a = b++; • -- 前自减、后自减 ++b; a = b; a = b; b ++;

  40. 自增、自减操作符 • C++ 中的自增、自减操作符 • 示例,(设 a 当前值为 5 ) • (++a)+12, 结果为 18, 运算后 a 为 6 • (a++)+12, 结果为 17, 运算后 a 为 6

  41. 2.5 运算符和表达式 • 2.5.1 算术运算符 • 二元 • + 加法 • - 减法 • * 乘法:C++不能省略*号 • / 除法:如果分子、分母均为整数,则执行整除运算;否则执行浮点除法 • 5/3 = ? 3/5 = ? • % 求余:求余运算的结果的符号与被除数相同

  42. 课堂练习 • 指出下面表达式的错误(设 a 和 b 都是整型变量) • 2a+6 • ab+3 • 设整型变量 a、b 的值分别为 3 和 2,计算下列表达式的值 • a/b • (double) (a/b) • (double) a /b • (++a)+(b++)+(a++), a, b 的值

  43. 2.5 运算符和表达式 • 2.5.2 关系运算符 • 用于对数据进行比较 • 运算的结果是布尔值(真或假) • <、>、<=、>=、==、!= • a > b a!=3

  44. 2.5 运算符和表达式 • 2.5.3 逻辑运算 • !、||、 && • !(a>b) (a>=0)&&(a<=100) • a=99, b=23,表达式的值是什么?

  45. 2.5 运算符和表达式 • 2.5.4 位运算 • 位逻辑运算,包括:按位与(&)、按位或 (|) 、按位取反(~)以及位异或(^) • 移位操作,包括:向左移位(<<)、向右移位(>>)

  46. 2.5.4 位运算 • 位逻辑运算(以按位与为例) • 移位运算(以右移为例) a b a&b a a>>2

  47. 2.5.4 位运算 • 注意区别逻辑运算及位运算 • 设整数 a、b 的值分别为 3 和 5 分别输出什么? • 答案: • 前者输出值为 1 • 后者输出值为 7 cout << ( a || b ) << endl; cout << ( a | b ) << endl;

  48. 2.5 运算符和表达式 • 2.5.6 赋值运算符 • 赋值运算实现了变量的赋值,即将一个特定的值赋给已声明的变量 • 基本赋值运算符:= • a=b, a==b • *=、 /=、 %=、 +=、 -­= • >>=、 <<=、 &=、 ^= 、 |= • a *=b  a = a*b

  49. 2.5 运算符和表达式 • 2.5.7 条件运算符 • ? : • a = (x>y)?x:y ; • 先计算 <表达式1> 的值,如果其值为真(非0),那么整个表达式的值为 <表达式2> 的值;否则,整个表达式的值为 <表达式3> 的值 <表达式1> ? <表达式2> : <表达式3> x1y True False 计算2 计算3

  50. 课堂练习 • 设整型变量 a 的值为 6,计算下列表达式的值 • 设 a、b 的值分别为 2 和 3,计算下列表达式的值 a += 3; a%=2; a<<=2; a<b ? a++ : b+5;

More Related