《二章数据类型与表达式》由会员分享,可在线阅读,更多相关《二章数据类型与表达式(49页珍藏版)》请在金锄头文库上搜索。
1、1第二章第二章 数据类型与表达式数据类型与表达式2教学目标l(1) 掌握基本数据类型的含义及其定义方法;掌握基本数据类型的含义及其定义方法;l(2) 理解常量和变量的概念及类型说明方法;理解常量和变量的概念及类型说明方法;l(3) 掌掌握握算算术术、赋赋值值、关关系系、逻逻辑辑及及其其他他运运算算符符和和表达式的使用方法。表达式的使用方法。3基本内容 l2.1 数据类型数据类型l2.2 常量和变量常量和变量l2.3 运算符与表达式运算符与表达式42.1 数据类型l数据数据l程序的主要任务是对数据进行处理,而数据有多种类程序的主要任务是对数据进行处理,而数据有多种类型,如型,如数值数据数值数据、
2、文字数据文字数据、图像数据图像数据以及以及声音数据声音数据等。等。l不同类型的数据在存储器中存放的格式不同不同类型的数据在存储器中存放的格式不同 l程序中对各种数据进行处理之前都要对其类型程序中对各种数据进行处理之前都要对其类型 ( (也就也就是存储格式是存储格式) ) 预先加以说明,其目的是:预先加以说明,其目的是:l便于为这些数据分配相应的存储空间便于为这些数据分配相应的存储空间l说明了程序处理数据时应采用何种具体运算方法说明了程序处理数据时应采用何种具体运算方法5数据类型数据类型l计算机只能存放二进制数据。不同类型事物的计算机只能存放二进制数据。不同类型事物的数据如何区分和描述?由此产生
3、数据类型。数据如何区分和描述?由此产生数据类型。l不同类型的数据占据不同长度的存储单元。不同类型的数据占据不同长度的存储单元。l不同类型的数据对应不同的值域范围。不同类型的数据对应不同的值域范围。l不同类型的数据对应不同的操作(运算)及规则。不同类型的数据对应不同的操作(运算)及规则。l数据类型越丰富,求解能力越强大。数据类型越丰富,求解能力越强大。6整整 型型l短整型短整型占用两个字节存储空间占用两个字节存储空间 -215215-1(-3276832767)l整型、长整型整型、长整型占用四个字节存储空间占用四个字节存储空间 -231231-11587031242316158707实实 型型l
4、可采用浮点类型和双精度类型表示可采用浮点类型和双精度类型表示:l浮点类型浮点类型l使用使用4个字节存放数据,个字节存放数据,10-381038, 有效数字有效数字7位位l双精度类型数据双精度类型数据l使用使用8个字节存放数据,个字节存放数据,10-30810308,有效数字,有效数字15位位尾数部分尾数部分指数部分指数部分3124231615870浮点型存储格式浮点型存储格式8字符型、布尔型、无值型字符型、布尔型、无值型l字符型(字符型(char) 占用一个字节存储空间占用一个字节存储空间27 271 (128 127)l布尔型布尔型(bool) 即逻辑型,即逻辑型,占用占用一个字节一个字节存
5、储空间存储空间,0表示表示false,1表示表示true l无值型(无值型(void)值值域域为为一一空空集集,主主要要用用来来说说明明函函数数的的参参数数或或返返回回值值类类型型,表表示无参数或无返回值。示无参数或无返回值。7092.2 常量和变量l在实际数据处理过程中,有些数据经常变化,在实际数据处理过程中,有些数据经常变化,而有些数据不变化。而有些数据不变化。l变化的量称变化的量称变量变量,不变化的量称,不变化的量称常量常量。102.2.1 常量常量1.整型常量整型常量l2进制常量进制常量100100000000B,10B l8进制常量进制常量04400,0777,0100l10进制常量
6、进制常量2304l16进制常量进制常量0x900,0xABC,0xffff2.实型常量实型常量:有两种表示形式:有两种表示形式:l十进制形式:十进制形式:.l0.0, -2.68, 3.141593, 637.312, 32768.0, l指数形式:指数形式:.l1.267E20, 1.2E-5 3.字符型常量字符型常量 a, A, 1, , +, 4.字符串常量字符串常量 Visual C+, 12.34, This is a string.n, 5.布尔型常量:布尔型常量:true 和和 false11文字数据表示文字数据表示l文字数据有两种:文字数据有两种:l单个字符单个字符: 例如,例
7、如,A 、+ 、 0 、 l实际存储的是其编码实际存储的是其编码 可以用整数来表示可以用整数来表示ASCII码码l字符串字符串:例如,:例如,This is a string . l如何存储?如何存储?12ASCII码码l共有共有128个,使用整数个,使用整数0127表示。表示。l10个阿拉伯数字个阿拉伯数字l52个英文字母个英文字母l32控制字符(非显示字符)控制字符(非显示字符)l34个特殊字符个特殊字符lASCII码对应的字符码对应的字符A的值的值65、a的值的值97(差是(差是32)问号问号?的值的值63、*的值的值42回车键的值回车键的值13、ESC键的值键的值27l助记码助记码l转
8、义字符转义字符 ln(换行换行), r(回车回车), t(横向跳格横向跳格), (单引号单引号), 13字符串存储方式字符串存储方式字符串字符串“MONDAY”的存储方式的存储方式 14字符和字符串的区别字符和字符串的区别l字符字符l是用单引号括起来的单个字符,它在存储器中占是用单引号括起来的单个字符,它在存储器中占1个字节;个字节;l字符串字符串l是用双引号括起来的一串字符,它在存储器中占是用双引号括起来的一串字符,它在存储器中占n+1个字节,个字节,即字符串的结束符即字符串的结束符0也占也占1个字节的位置。个字节的位置。l例如:例如:lA和和“A”是有区别的;前者是字符常数,后者是字符串常
9、是有区别的;前者是字符常数,后者是字符串常数。数。152.2.2 变量变量l定义定义: 其值可以改变的量称为其值可以改变的量称为变量变量。l变量名实际上是一个变量名实际上是一个符号地址符号地址,在对程序编译连接时由系统给每一个变量,在对程序编译连接时由系统给每一个变量名分配一个内存地址。名分配一个内存地址。l在程序中从变量中取值,实际上是通过在程序中从变量中取值,实际上是通过变量名变量名找到相应的找到相应的内存地址内存地址,从其,从其存储单元中读取数据。存储单元中读取数据。l用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效用来标识变量名、符号常量名、函数名、数组名、类型名、文件
10、名的有效字符序列称为字符序列称为标识符标识符(identifier)。简单地说,。简单地说,标识符标识符就是一个名字。就是一个名字。变量命名规则变量命名规则变量使用规则变量使用规则变量初始化变量初始化变量引用变量引用类型修饰符类型修饰符16(1 1)变量定义)变量定义l变量的定义:变量的定义:用基本数据类型描述符来说明对象用基本数据类型描述符来说明对象 变量类型变量类型 变量名表变量名表;l例例:int i, j, k;/说明了说明了3个整型变量个整型变量short len;/说明了说明了1个短整型变量个短整型变量float average;/说明了说明了1个浮点类型的变量个浮点类型的变量do
11、uble baseSalary, bonus, totalSale, additionalBonus, Salary;/说明了说明了5个双精度类型的变量个双精度类型的变量bool sex;/说明了说明了1个布尔型变量个布尔型变量char c1, c2;/说明了说明了2个字符型变量个字符型变量 17(2) (2) 变量变量( (标识符标识符) )命名规则命名规则变量名只能由字母、数字或下划线组成;变量名只能由字母、数字或下划线组成;变量名的第一个字符必须是字母或下划线;变量名的第一个字符必须是字母或下划线;变量名长度不能超过编译器规定的长度变量名长度不能超过编译器规定的长度;不要用保留字定义变量
12、名。不要用保留字定义变量名。合法变量名:合法变量名: a、 b1、 _area、m_nCount不合法变量名不合法变量名: 1-name、 student one、 float18(3 3)变量使用规则)变量使用规则l先定义,后使用先定义,后使用 例如:例如:int a,b,c; a=1;b=2;c= a+b; 下列用法是错误的下列用法是错误的(有几处?有几处?): #include using namespace std;int main()int a;cinb;int c=a+b; coutcendl;return 0;19(4 4)变量初始化)变量初始化l变量初始化就是给变量赋初值,可采
13、用以下任变量初始化就是给变量赋初值,可采用以下任意一种方式:意一种方式:l先定义,再赋初值先定义,再赋初值 例如:例如: int sum,fac; sum=0;fac=1;l定义时赋值(定义时赋值(有两种形式) 例如:例如: int count = 0; 或或 int count (0);char c=A; 或或 char c(A);20( (5) 5) 类型修饰符类型修饰符l在基本数据类型前加类型修饰符,可以改在基本数据类型前加类型修饰符,可以改变数据表示的范围。常用的有:变数据表示的范围。常用的有:lunsigned 无符号无符号llong 长型长型lshort 短型短型 例如:例如: u
14、nsigned char 表示范围变为表示范围变为0255 unsigned short int 表示范围变为表示范围变为06553521例例2-4 2-4 整型数据的溢出整型数据的溢出#include int main() short a, b;a=32767; b=a+1; couta=aendlb=b int - float - doublel例例2-1 算术运算算术运算#include using namespace std;int main()int x=7, y=3;double d=7.0;coutx/y=x/yendl; /整数除法整数除法coutx%y=x%yendl;/整数
15、求余整数求余coutd“/”y“=”d/y = ,=,= 高于高于 = , !=l 赋值运算赋值运算 关系运算关系运算 = x*y ; l关系表达式:关系表达式: (a b) = (c = 结果为结果为 结果为结果为 a = b 结果为结果为 a! = b结果为结果为l结合性:从左到右。结合性:从左到右。31注意事项l在逻辑上必须正确,否则会出现不正确的结果。在逻辑上必须正确,否则会出现不正确的结果。例如:1X 10l若写成 1=x=10正确的写法是:正确的写法是: 1 = x & x = 10l在语法上是正确的,但在逻辑上是错误的。在语法上是正确的,但在逻辑上是错误的。l当当 x= 8 时,
16、时, 1 = x = 10结果为结果为1l当当x= - 5时,时, 1 = x & |l 赋值运算赋值运算 &、| 关系运算关系运算 算术运算算术运算 !33举例举例lx c或或x b至少之一成立至少之一成立 x = bli和和j均小于或等于均小于或等于100,或者,或者i和和j均大于均大于k ( i = 100 & j k & j k )l选所有未婚的选所有未婚的 35岁以上男副教授和岁以上男副教授和30岁以上女讲师岁以上女讲师 ! 婚否婚否 & ( (性别性别=男男& 职称职称=副教授副教授& 年龄年龄=35) | (性别(性别=女女& 职称职称=讲师讲师& 年龄年龄=30))342.3.
17、4 赋值运算符和赋值表达式l赋值运算符赋值运算符 =l赋值表达式赋值表达式V = el赋值表达式的值等于运算符右边的表达式的值l副作用是将表达式的值存入变量V。l复合赋值运算符复合赋值运算符 格式: V op = e 等价于: V = V op e 例如: a += 5, 等价于 a = a + 5l复合赋值运算符有复合赋值运算符有 +=、- =、*=、/=、%=等10个35举例举例li=j=m*n; 计算表达式计算表达式m*n的值,将其结果存入变量的值,将其结果存入变量j中,然后再将中,然后再将结果存入变量结果存入变量i中。中。ltemp=a; a=b; b=temp; 交换交换a和和b的值
18、,的值,temp是工作单元。是工作单元。lsum=sum+i;(;(等价于等价于 sum+=i;);) 计算计算sum与与i的和,结果送的和,结果送sum。lstri = ch+A- a; 将字符变量将字符变量ch转换为大写字母,结果存入数组转换为大写字母,结果存入数组stri中。中。36表达式中各运算符的运算顺序C/+中的几十种运算符有严格、确定的运算符优先中的几十种运算符有严格、确定的运算符优先关系和运算顺序规则。关系和运算顺序规则。 37优先级别优先级别运算符运算符运算形式运算形式结合方向结合方向名称或含义名称或含义1().-(e)aex.yp-x自左至右自左至右圆括号括号数数组下下标结
19、构体成构体成员用指用指针访问结构体成构体成员2-+ -!(t)*&sizeof-e+x或或x+!ee(t)e*p&xsizeof(t)自右至左自右至左负号和正号号和正号自增运算和自减运算自增运算和自减运算逻辑非非按位取反按位取反类型型转换由地址求内容由地址求内容求求变量的地址量的地址求某求某类型型变量的量的长度度3* / %e1*e2自左至右自左至右乘、除和求余乘、除和求余4+ -e1+e2自左至右自左至右加和减加和减5e1d2自左至右自左至右左移和右移左移和右移6 =e1= &= = |=自右至左自右至左赋值运算运算复合复合赋值运算运算15,e1,e2自左至右自左至右顺序求序求值运算运算38
20、扩展阅读l2.4 常量修饰符常量修饰符l2.5 强制类型转换运算符强制类型转换运算符To be continue392.4 常量修饰符l直接常量直接常量:其本身的书写格式就说明了该常数的类型:其本身的书写格式就说明了该常数的类型l符号常量符号常量l用用const定义的常量定义的常量const double pi=3.1415926;l用宏定义用宏定义#define定义的常量;类似变量,但不是变量。定义的常量;类似变量,但不是变量。 #define PI 3.1415926 #define MAXNUM 10000l可以出现在表达式中可以出现在表达式中 f1= r * r * PI;l但是不能作
21、左值但是不能作左值,下列用法是错误的:下列用法是错误的:PI = 1.0*3.14 ;402.5 强制类型转换运算符l强制类型转换强制类型转换C格式:格式:(类型语句)(类型语句)eC+格式:格式: 类型语句类型语句(e)l例例:int i=1,j=2;double d;d = i / j;/结果结果d为为0.0d = (double) i / j;/结果结果d为为0.5d = double ( i ) / j;/结果结果d为为0.541上机指导l2.6 语法错误语法错误l查看和修改编译错误查看和修改编译错误l查看和修改链接错误查看和修改链接错误42应用举例l例例2-5 温度转换:输入一个华氏
22、温度,计算并温度转换:输入一个华氏温度,计算并输出对应的摄氏温度值。输出对应的摄氏温度值。#include using namespace std;int main()double c, f;coutf;c=5.0/9.0 * (f-32);/温度转换公式温度转换公式cout对应于华氏温度对应于华氏温度f的摄氏温度为的摄氏温度为cendl;return 0;43应用举例l例例2-6 大小写转换:大小写转换:l输入一个字符,判断它是否为大写字母。如是,将其输入一个字符,判断它是否为大写字母。如是,将其转换为对应的小写字母输出;否则,不用转换直接输转换为对应的小写字母输出;否则,不用转换直接输出。
23、出。l算法算法:l从从ASCII码表知道,大小写对应字母之间的差值是码表知道,大小写对应字母之间的差值是32l如:如:A的值的值65、a的值的值97(差是(差是32)l小写字母的小写字母的ASCII码值码值 对应的大写字母的对应的大写字母的ASCII码值码值-A +a 44#include using namespace std;int main()char ch;coutch;if(ch=A & ch=Z) ch=ch-A+a;cout将大写转换为小写后,该字母为:将大写转换为小写后,该字母为:chendl;return 0;45应用举例l例例2-7 转义字符的使用转义字符的使用#inclu
24、de using namespace std;int main()coutHellon;/使用换行符使用换行符cout1t2t3t4t5n;/使用制表符和换行符使用制表符和换行符cout12345bb78n;/使用退格符和换行符使用退格符和换行符couthi!, he said.n;/使用双引号和换行符使用双引号和换行符return 0;46应用举例l例例2-8找零钱问题找零钱问题l假定有伍角、壹角、伍分、贰分和壹分共五种硬币,在给顾客找硬币时,一般都会尽可能的选用硬币个数最小的方法。l例如,当要给某顾客找七角二分钱时,会给他一个伍角,2个壹角和1个贰分的硬币。l请编写一个程序,输入的是要找给
25、顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少47#include using namespace std;int main()int change;/存放零存放零钱的的变量量coutchange;cout找找给顾客的五角硬客的五角硬币个数个数为:change/50endl;change=change%50;cout找找给顾客的壹角硬客的壹角硬币个数个数为:change/10endl;change=change%10;cout找找给顾客的伍分硬客的伍分硬币个数个数为:change/5endl;change=change%5;cout找找给顾客的客的贰分硬分硬币个数个数为:change/2endl;change=change%2;cout找找给顾客的壹分硬客的壹分硬币个数个数为:changeendl;return 0; 48学好程序设计语言的唯一途径是学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成你的编程能力与你在计算机上投入的时间成 结结 束束 语语49