基本数据类型及表达式.ppt
授课:朱怀忠 Copyright HEBUT.All rights reservedC+Programming2012 河北工业大学计算机基础课程系列前言上次课程内容回顾n了解了计算机语言的发展历史及 C+语言的特色n通过几个实例了解了 VC6 下 VC 编程的一般步骤n了解了C+程序的一般框架及书写规则n关键词:机器语言、汇编语言、高级语言、汇编、编译、链接、项目、工作区、头文件、包含、函数、注释。OOP、Debug、Project、Workspace、.cpp、.h、#include、main、/、/*/、。前言本次课程内容nC+中语法符号的书写和使用规则nC+中常用的数据类型及特点nC+中常量和变量的定义和使用nC+中运算符及表达式的书写和使用课外知识#include 常见的的两种写法#include n这种用法继承自C的标准,使用的是旧的C+库,不建议使用,但因为早期的VC6对标准库支持的并不好,所以大部分C+基础的教材仍然在保留这种写法。#include using namespace std;n使用的是新的C+标准库(STL),改进和扩充了很多的功能,同时引入了命名空间(namespace)来避免命名冲突的问题,是比较标准的用法。C+中的词法符号字符集(Charset)n每种程序设计语言都使用一些特定的字符来构造基本词法单位,这些字符构成的集合就叫做字符集。nC+语句中除“字符串内容”及注释之外只允许使用下列符号来构造C代码。n26个小写字母(az)、26个大写字母(AZ)n10个数字(09)n其他符号:+-*/=|?%,():;.!“_#&(空格)C+中的词法符号有关字符集的说明n除字符串内容和注释之外字符集的字符必须是半角(ASCII码字符集),不论何种语言,字符串中的字符不受字符集限制(可为任何字符,如汉字),字符串使用时用”括起来。n同一个符号在不同位置出现时有不同的含义n例:3*2(代表乘法)*p(指针定义或者取指针内容)n符号单独使用与组合使用时含义不同n例:=(赋值)=(逻辑等)&(按位与)&(逻辑与)C+中的词法符号标识(zhi)符(Identifier)n一个名字,作为标志与识别,由一串符号构成。常用来标识常量、变量、数据类型、函数等。n命名规则:n以字母或下划线开头,后跟字母、数字、下划线组成的字符串。n例:合法:x、total、sub_1、a11、_A11、TIME、this_is_a_long_string非法:3a、sum 1、s$、变量aC+中的词法符号有关标识符的说明n标识符区分大小写nTime、time、TIME 是三个不同的标识符n标识符不能分行书写n标识符长度任意,但不同编译器可识别的长度不同,命名时尽量做到简洁而“见名识意”,比如用 sum 代表和,用 area 代表面积n尽量不要用拼音,除非万不得已,比如用 jiashu 代表 加数,因为拼音会降低读、理解程序的速度。n习惯上,变量都用小写,常量使用大写n其他信息可参考关键字:变量命名规则、匈牙利法 等C+中的词法符号关键字(Keyword)n又叫保留字(Reserved word),是系统预先定义好的,具有特定作用的,被系统占用的标识符。n参见 P14 表 2-1C+中的数据类型为什么要区分数据类型?n不同数据的表示形式、及操作方法是不一样的n数值可以做算术运算,而字符串则可以做连接、取子串等n不同数据的取值范围不一样,因而占用的内存大小也就不一样n根据实际需要定义合适的类型可以减少内存占用C+中的数据类型数据类型分解图构造类型基本类型空类型(void)字符型(char)实型整型 枚举型(enum)类(class)基本型(int)短整型(short)长整型(long)单精度型(float)双精度型 (double)长双精度型(long double)P15 图2-1指针类型*数组结构体(struct)共用体(union)无符号型(unsigned)无符号整型(unsigned int)无符号短整型(unsigned short)无符号长整型(unsigned long)数据类型C+中的数据类型基本数据类型(Primitive Data Type)n基本数据类型在不同平台不同编译器下所占用的字节数是不同的,所表示的数据范围自然也不一样,在 VC6+Win32 平台下的字节数及取值范围如下表nint有符号之分(unsigned),同时有长短之分(short/long)nchar 类型存储的是ascii码nfloat和double 处理的是实数,精度(有效位数)不同数据类型字节范围整型int4-2147483648 2147483647字符型char1-128 +127实型单精度float410-38 10+38(7)双精度double810-308 10+308(15)常量与变量常量(Constant)n常量指在程序运行过程中其值始终不变的量,这种量既可以直接以其值的形式直接书写在程序中,也可以给其定义一个名字以方便的引用,称为符号常量。n常量是数据,自然而然也就有类型,常见的几种基本类型常量有:n整型常量n实型常量n字符常量n字符串常量常量与变量整形常量和实型常量n整数,除了使用默认的十进制,整数还可以在程序中书写成八进制和十六进制形式n前缀表示:前导0代表八进制、0 x或(0X)代表十六进制n后缀表示:末尾L或者小写l代表为长整型数据。n例:100、017、0 x2F、-123L、0 xa1Ln实数,又称为浮点数,可以以小数形式和指数形式书写n例:2.55、-3.14、234.535、1.(同1.0)、.5(同0.5)n指数形式即科学表示法,类似 a10n 形式,C+中使用 E 或者 e 来表示10,n 必须为整数。n-8.23e6、1.5E-3、.1e-6n实数默认被当做双精度(double)处理,如果要指明为单精度,即float类型,则需加后缀F或者f,例:12.3F、1.2e4f常量与变量字符常量n一般可见字符:使用单引号括起来,例:A、a、$、1、0等n转义字符:指ascii表中无法直接在屏幕显示和键盘输入的字符,C+中使用 x 的形式来表示.常量与变量字符常量n字符常量存储的是字符的ascii值,因而只占一个字节,其值在 0255之间(可参阅ascii表得出),由于是整数,所以字符常量可以参加各种数学运算。n例:cout 100+r endl;会得到结果 113n注意 0 和 0 以及 0 是不同的,0是数值,内存中也是 0,0 是字符,内存中存储的是其ascii码 0 x30,而 0 是转义字符,代表空字符,通常作为字符串的结尾标记。常量与变量字符串常量n由双引号括起来的若干字符称为字符串常量,字符串在内存中是依据每个字符的ascii码依次存放的,末尾以 0 作为字符串结束标记。n例:”test”、”中文”、”中english“、”(空字符串)、”12$#”n字符串长度不包括末尾自动添加的0,比如“test”长度为 4n字符串中可以使用转义字符n例:“1st linen2nd line”、”Its me”、”Its me”、”me”n注意:a和”a”的区别常量与变量符号常量n当程序中需要多次引用同一个值时,可以给其定义一个名字以方便引用、理解和修改,称为符号常量。n定义语句:const datetype constname=value;nvalue可以为直接的值或者常数表达式例:const double PI=3.14;例:const double WM_MSG=WM_USER+1;(WM_USER也需为常量)n常量定义时必须给其指定值下例代码是错误的:const double PI;PI=3.14;常量与变量符号常量的应用#include void main()double r,s,a;coutr;s=2*r*3.14;a=r*r*3.14;couts=sendl;coutarea=aendl;#include const double PI=3.14;void main()double r,s,a;coutr;s=2*r*PI;a=r*r*PI;couts=sendl;coutarea=a 关系运算符 逻辑运算符 条件运算符 赋值运算符 逗号运算符n单目运算符 多目运算符n担心优先级不清楚导致运算出错的最好解决办法就是使用括号运算符与表达式算术运算n算数运算符:+-*/%n优先级(*/%)(+-),结合性为左结合n分母不能为0、乘号*不能省略n整数相除结果为整数,非四舍五入,取其整数部分,例3/5为0n实数赋给整型变量结果为整数,同样非四舍五入,可利用此方法实现整除 int a;a=5/2;结果为2n取余运算也称求模运算,结果为两数相除后的余数,符号和被除数的符号相同。要求%两侧操作数必须为整数,否则会引起编译错误。2%5为2、10%3 为 1、-10%3为-1n字符型数据由于存储的是ascii值,所以可以直接参与算运算char c=a;x=100+c;x值为 197运算符与表达式常用数学函数n对于常用的数学操作,C+库里提供了很多函数可以直接调用n#include 函数名含义范例结果sin(x)正弦函数sin(0)0cos(x)余弦函数cos(0)1exp(x)以e为底的指数函数exp(3)20.086fabs(x)求绝对值fabs(-2.6)2.6pow(x,y)xypow(2,3)8.0sqrt(x)平方根sqrt(16)4.0注意算术表达式里不能出现数学里的 上标、下标及分式,而应使用函数运算符与表达式算术表达式举例 式子 c+表达式(a+b)/(c-d)a*a*asinxsin(x)sqrt(g)cosxcos(x)exp(x)算术表达式举例运算符与表达式赋值运算符和赋值表达式n赋值运算符为等号=,优先级仅高于逗号,基本上是常见表达式里最后的运算,即把右侧的结果赋予左侧的变量。n左侧只能是变量n右侧运算完毕后,按照左侧变量类型转换结果,然后赋值int x;x=3.5;此时 x=3、int x;x=3.2/5;此时 x=0n赋值运算符具备右结合性,即同一个表达式可以有多个赋值运算,赋值从右至左依次进行,一般很少用。double a,b;b=a=2.4+3.8;a和b均为 6.2运算符与表达式复合赋值运算n算术运算符和赋值运算符结合:+=、-=、*=、/=、%=a+=1;等同于 a=a+1;a*=b;等同于 a=a*b;a%=b+2;等同于 a=a%(b+2)运算符与表达式复合运算举例n写出下面程序运行结果#include/*a.f.saf*/void main()int a,b,c,d,e=7;a=b=1;c=5;d=a=a+1;d*=a+b;/等价于d=d*(a+b)e%=c-b;/等价于e=e%(c-b)coutat btctdte;nint a=2;则 a+=a-=a*=a 会是?运行结果为:2 1 5 6 3运算符与表达式自增自减运算n运算符:+和-,单目运算,要求前或者后必须是变量n规则:ni+先取值,后自加,等价于:i=i+1 n+i 先自加,后取值,等价于:i=i+1 n-i 先自减,后取值,等价于:i=i-1 ni-先取值,后自减,等价于:i=i-1n+-不仅影响操作数的值,通常这类表达式结果还要赋予其他变量n例:j=i+;或者 j=+i;运算符与表达式i+与+i的区别举例程序段1:#include void main()int i=1,j;j=i+;couti“t”j;结果:2 2程序段2:#include void main()int i=1,j;j=+i;couti“t”j;2 1结果:运算符与表达式逗号运算符n表达式1,表达式2,表达式3,表达式n从第一个开始(左),依次计算每个表达式的值,最后(右)一个表达式的值即为逗号表达式的值。n例:a=1,b=a+2,c=b+3 的值为:6n为了将逗号表达式的值赋给变量,必须加圆括号例:int a,b,c,d;d=(a=1,b=a+2,c=b+3);coutd double float long int short charn例:cout 5/6.2;n把数据赋值给另外一种类型变量也会发生自动类型转换n从小到大,顺利转换:double x=100;n从大到小,可能丢失信息(部分编译器会发出警告):float y=2.565;或:int x=2.5;运算符与表达式强制类型转换n可以通过在变量左侧加入类型定义标识符的形式强制进行转换n(类型名)操作数 或 类型名(操作数)n操作数:可以是常量、变量、函数、表达式。若为表达式,则要用括号将表达式括起来n例:(long)2(int)4.8(double)5/3(double)(5/3)1.0000001.6666672L 4运算符与表达式强制类型转换n类型转换不会改变原有变量的类型n举例:#include void main()double x=5.6,y=2.2;int i;i=int(x)%(int)y;cout“i=“i“nx=“x“n”“y=“变量1 变量2 变量3 n例:cin x y z;ncout 用法如下,用于输出常量、变量、表达式的值到屏幕ncout 输出1 输出2 输出3 n输出既可以是常量比如字符串,也可以是变量还可以是表达式nendl 代表换行,也可以使用 nn例:cout x y z endl;cout “x值为:”xendl;附加内容输入输出举例/年龄计算#include void main()int birthdate,age;cout birthdate;age=2012-birthdate+1;cout“你的年龄为:”age“岁”endl;课程总结通过本次课程你应该了解了nC+中常用的数据类型n各种类型常量、变量的标准书写形式n各种算术运算符的运算特点n赋值操作的注意事项n基本输入输出 cin,cout用法提示本次课程作业及实验n作业:教材P29(2,3,6,7,8)n实验:n1.熟悉vc+环境n2.实验教程实验二范例:例2.12.6及实验内容1,2,3,4n3.教材P72:1,2,3thanks to allTHE END