《基本数据类型及表达式.ppt》由会员分享,可在线阅读,更多相关《基本数据类型及表达式.ppt(45页珍藏版)》请在三一办公上搜索。
1、,授课:朱怀忠,Copyright HEBUT.All rights reserved,C+Programming,2012 河北工业大学计算机基础课程系列,前言,上次课程内容回顾,了解了计算机语言的发展历史及 C+语言的特色通过几个实例了解了 VC6 下 VC 编程的一般步骤了解了C+程序的一般框架及书写规则关键词:机器语言、汇编语言、高级语言、汇编、编译、链接、项目、工作区、头文件、包含、函数、注释。OOP、Debug、Project、Workspace、.cpp、.h、#include、main、/、/*/、。,前言,本次课程内容,C+中语法符号的书写和使用规则C+中常用的数据类型及特点
2、C+中常量和变量的定义和使用C+中运算符及表达式的书写和使用,课外知识,#include 常见的的两种写法,#include 这种用法继承自C的标准,使用的是旧的C+库,不建议使用,但因为早期的VC6对标准库支持的并不好,所以大部分C+基础的教材仍然在保留这种写法。#include using namespace std;使用的是新的C+标准库(STL),改进和扩充了很多的功能,同时引入了命名空间(namespace)来避免命名冲突的问题,是比较标准的用法。,C+中的词法符号,字符集(Charset),每种程序设计语言都使用一些特定的字符来构造基本词法单位,这些字符构成的集合就叫做字符集。C+
3、语句中除“字符串内容”及注释之外只允许使用下列符号来构造C代码。26个小写字母(az)、26个大写字母(AZ)10个数字(09)其他符号:+-*/=|?%,():;.!“_#&(空格),C+中的词法符号,有关字符集的说明,除字符串内容和注释之外字符集的字符必须是半角(ASCII码字符集),不论何种语言,字符串中的字符不受字符集限制(可为任何字符,如汉字),字符串使用时用”括起来。同一个符号在不同位置出现时有不同的含义例:3*2(代表乘法)*p(指针定义或者取指针内容)符号单独使用与组合使用时含义不同例:=(赋值)=(逻辑等)&(按位与)&(逻辑与),C+中的词法符号,标识(zhi)符(Iden
4、tifier),一个名字,作为标志与识别,由一串符号构成。常用来标识常量、变量、数据类型、函数等。命名规则:以字母或下划线开头,后跟字母、数字、下划线组成的字符串。例:合法:x、total、sub_1、a11、_A11、TIME、this_is_a_long_string非法:3a、sum 1、s$、变量a,C+中的词法符号,有关标识符的说明,标识符区分大小写Time、time、TIME 是三个不同的标识符标识符不能分行书写标识符长度任意,但不同编译器可识别的长度不同,命名时尽量做到简洁而“见名识意”,比如用 sum 代表和,用 area 代表面积尽量不要用拼音,除非万不得已,比如用 jias
5、hu 代表 加数,因为拼音会降低读、理解程序的速度。习惯上,变量都用小写,常量使用大写其他信息可参考关键字:变量命名规则、匈牙利法 等,C+中的词法符号,关键字(Keyword),又叫保留字(Reserved word),是系统预先定义好的,具有特定作用的,被系统占用的标识符。参见 P14 表 2-1,C+中的数据类型,为什么要区分数据类型?,不同数据的表示形式、及操作方法是不一样的数值可以做算术运算,而字符串则可以做连接、取子串等不同数据的取值范围不一样,因而占用的内存大小也就不一样根据实际需要定义合适的类型可以减少内存占用,C+中的数据类型,数据类型分解图,构造类型,基本类型,空类型(vo
6、id),字符型(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),基本数据类型在不同平台不同编译器下所占用的字节数是不同的,所
7、表示的数据范围自然也不一样,在 VC6+Win32 平台下的字节数及取值范围如下表int有符号之分(unsigned),同时有长短之分(short/long)char 类型存储的是ascii码float和double 处理的是实数,精度(有效位数)不同,常量与变量,常量(Constant),常量指在程序运行过程中其值始终不变的量,这种量既可以直接以其值的形式直接书写在程序中,也可以给其定义一个名字以方便的引用,称为符号常量。常量是数据,自然而然也就有类型,常见的几种基本类型常量有:整型常量实型常量字符常量字符串常量,常量与变量,整形常量和实型常量,整数,除了使用默认的十进制,整数还可以在程序中
8、书写成八进制和十六进制形式前缀表示:前导0代表八进制、0 x或(0X)代表十六进制后缀表示:末尾L或者小写l代表为长整型数据。例:100、017、0 x2F、-123L、0 xa1L实数,又称为浮点数,可以以小数形式和指数形式书写例:2.55、-3.14、234.535、1.(同1.0)、.5(同0.5)指数形式即科学表示法,类似 a10n 形式,C+中使用 E 或者 e 来表示10,n 必须为整数。-8.23e6、1.5E-3、.1e-6实数默认被当做双精度(double)处理,如果要指明为单精度,即float类型,则需加后缀F或者f,例:12.3F、1.2e4f,常量与变量,字符常量,一般
9、可见字符:使用单引号括起来,例:A、a、$、1、0等转义字符:指ascii表中无法直接在屏幕显示和键盘输入的字符,C+中使用 x 的形式来表示.,常量与变量,字符常量,字符常量存储的是字符的ascii值,因而只占一个字节,其值在 0255之间(可参阅ascii表得出),由于是整数,所以字符常量可以参加各种数学运算。例:cout 100+r endl;会得到结果 113注意 0 和 0 以及 0 是不同的,0是数值,内存中也是 0,0 是字符,内存中存储的是其ascii码 0 x30,而 0 是转义字符,代表空字符,通常作为字符串的结尾标记。,常量与变量,字符串常量,由双引号括起来的若干字符称为
10、字符串常量,字符串在内存中是依据每个字符的ascii码依次存放的,末尾以 0 作为字符串结束标记。例:”test”、”中文”、”中english“、”(空字符串)、”12$#”字符串长度不包括末尾自动添加的0,比如“test”长度为 4字符串中可以使用转义字符例:“1st linen2nd line”、”Its me”、”Its me”、”me”注意:a和”a”的区别,常量与变量,符号常量,当程序中需要多次引用同一个值时,可以给其定义一个名字以方便引用、理解和修改,称为符号常量。定义语句:const datetype constname=value;value可以为直接的值或者常数表达式例:c
11、onst double PI=3.14;例:const double WM_MSG=WM_USER+1;(WM_USER也需为常量)常量定义时必须给其指定值下例代码是错误的: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=s
12、endl;coutarea=aendl;,1,使用符号常量,增强可读性;2,修改时,只需要修改一处即可。,常量和变量,内存编址与变量,变量用来存储经常改变的数据实质是给内存单元定义的名称,内存,内存地址,存储的数据,short int x,char y,char5 str,常量与变量,变量的定义,所有变量,必须先定义后使用格式:datetype varlist;int x,y,z;/同时定义了3个整型变量char t;/定义字符型变量tdouble f,m;/定义了两个double型变量int x;int y;int z;/同一,但写起来繁琐,可读性差,常量与变量,变量的赋值,变量定义后值为随
13、机值,所以必须给其赋初值,否则会引起不可预知的结果。使用“=”赋值,等号右侧值赋予左侧变量x=3;c=a;y=0 x12f;可以在定义时同时赋予初值int x=3,y=5;char c=a;char cc=;=注意事项:不是常规意义上的等于,C+使用“=”代表等于方向性,右侧赋予左侧,左侧只能是变量 x+y=z 是错误的赋值过程会擦除原值 x=2;x=3;结果会是3常用 i=i+1;这种方式实现自增1,类似的 i=i-1;递减1,常量及变量,变量定义及使用注意事项,变量必须先定义,后使用对一个变量不能重复定义int a,b,c;double x,y,c;/error,不能重复定义变量c变量声明
14、的顺序无关紧要int x,y,z;与 int y,x,z;等价一条声明语句可声明若干个同类型的变量,不同类型变量的声明必须使用多个语句。int x,double y;/error,第一部分内容结束,运算符与表达式,表达式(Expression),表达式是由操作数、运算符以及圆括号组合而成的式子操作数可以是:常量、变量、函数或其他表达式运算符用于说明运算的含义,包含算数运算符、关系运算符、逻辑运算符等运算符有目数、优先级和结合性圆括号用于改变运算的次序,同时使表达式更容易理解,C+中括号只有圆(小)括号,可嵌套并使用多次。例:A+32+7.23*6/3-(4+y)/(2-x)x=+y;(x=5)
15、&(y-6=0),运算符与表达式,运算符的属性,目数:参与运算的操作数个数,C+中有单目、双目和三目三种,其中双目运算符数量最多。优先级指在复杂表达式中的多个运算符谁先运算,优先级高的先运算。结合性指同一优先级的多个运算符的运算次序,即先算左边的还是先算右边的。C+中所有运算符及其属性参见 P21 表 2-4一般规律:算术运算符 关系运算符 逻辑运算符 条件运算符 赋值运算符 逗号运算符单目运算符 多目运算符担心优先级不清楚导致运算出错的最好解决办法就是使用括号,运算符与表达式,算术运算,算数运算符:+-*/%优先级(*/%)(+-),结合性为左结合分母不能为0、乘号*不能省略整数相除结果为整
16、数,非四舍五入,取其整数部分,例3/5为0实数赋给整型变量结果为整数,同样非四舍五入,可利用此方法实现整除 int a;a=5/2;结果为2取余运算也称求模运算,结果为两数相除后的余数,符号和被除数的符号相同。要求%两侧操作数必须为整数,否则会引起编译错误。2%5为2、10%3 为 1、-10%3为-1字符型数据由于存储的是ascii值,所以可以直接参与算运算char c=a;x=100+c;x值为 197,运算符与表达式,常用数学函数,对于常用的数学操作,C+库里提供了很多函数可以直接调用#include,注意算术表达式里不能出现数学里的 上标、下标及分式,而应使用函数,运算符与表达式,算术
17、表达式举例,式子 c+表达式,(a+b)/(c-d),a*a*a,sinx,sin(x),sqrt(g),cosx,cos(x),exp(x),算术表达式举例,运算符与表达式,赋值运算符和赋值表达式,赋值运算符为等号=,优先级仅高于逗号,基本上是常见表达式里最后的运算,即把右侧的结果赋予左侧的变量。左侧只能是变量右侧运算完毕后,按照左侧变量类型转换结果,然后赋值int x;x=3.5;此时 x=3、int x;x=3.2/5;此时 x=0赋值运算符具备右结合性,即同一个表达式可以有多个赋值运算,赋值从右至左依次进行,一般很少用。double a,b;b=a=2.4+3.8;a和b均为 6.2,
18、运算符与表达式,复合赋值运算,算术运算符和赋值运算符结合:+=、-=、*=、/=、%=a+=1;等同于 a=a+1;a*=b;等同于 a=a*b;a%=b+2;等同于 a=a%(b+2),运算符与表达式,复合运算举例,写出下面程序运行结果#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;int a=2;则 a+=a-=a*=a 会是?,运行结果为:2 1 5 6 3,运算符与表达式,自增自减运算,运算符:+和
19、-,单目运算,要求前或者后必须是变量规则:i+先取值,后自加,等价于:i=i+1+i 先自加,后取值,等价于:i=i+1-i 先自减,后取值,等价于:i=i-1 i-先取值,后自减,等价于:i=i-1+-不仅影响操作数的值,通常这类表达式结果还要赋予其他变量例: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,结果:,运算符与表达式,逗号运算符,表达式1
20、,表达式2,表达式3,表达式从第一个开始(左),依次计算每个表达式的值,最后(右)一个表达式的值即为逗号表达式的值。例:a=1,b=a+2,c=b+3 的值为:6为了将逗号表达式的值赋给变量,必须加圆括号例:int a,b,c,d;d=(a=1,b=a+2,c=b+3);coutdendl;/结果:d=6,运算符与表达式,类型转换(Type Conversion),什么时候需要类型转换?双目运算符需要两侧操作数类型相同,如果不同,则需要进行转换表达式计算结果和赋值给的变量类型不同,此时也需要转换如何转换?自动类型转换强制类型转换转换原则:尽量不丢失数据尽量保证足够的精度,运算符与表达式,自动类
21、型转换,不同种数据类型的运算结果,自动转换为两种类型中取值范围更大、精度更高的那种long double double float long int short char例:cout 5/6.2;把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换:double x=100;从大到小,可能丢失信息(部分编译器会发出警告):float y=2.565;或:int x=2.5;,运算符与表达式,强制类型转换,可以通过在变量左侧加入类型定义标识符的形式强制进行转换(类型名)操作数 或 类型名(操作数)操作数:可以是常量、变量、函数、表达式。若为表达式,则要用括号将表达式括起来例:(lo
22、ng)2(int)4.8(double)5/3(double)(5/3),1.000000,1.666667,2L,4,运算符与表达式,强制类型转换,类型转换不会改变原有变量的类型举例:#include void main()double x=5.6,y=2.2;int i;i=int(x)%(int)y;cout“i=“i“nx=“x“n”“y=“y;double x=5.6,y=7.8,z;z=int(x+y);/z 为 13,结果i=1x=5.6y=2.2,第二部分内容结束,附加内容,基本输入输出,C+中使用 cout 代表输出设备,默认为屏幕,使用 cin 代表输入设备,默认为键盘 变
23、量1 变量2 变量3 例:cin x y z;cout 用法如下,用于输出常量、变量、表达式的值到屏幕cout 输出1 输出2 输出3 输出既可以是常量比如字符串,也可以是变量还可以是表达式endl 代表换行,也可以使用 n例:cout x y z endl;cout“x值为:”xendl;,附加内容,输入输出举例,/年龄计算#include void main()int birthdate,age;cout birthdate;age=2012-birthdate+1;cout“你的年龄为:”age“岁”endl;,课程总结,通过本次课程你应该了解了,C+中常用的数据类型各种类型常量、变量的标准书写形式各种算术运算符的运算特点赋值操作的注意事项基本输入输出 cin,cout用法,提示,本次课程作业及实验,作业:教材P29(2,3,6,7,8)实验:1.熟悉vc+环境2.实验教程实验二范例:例2.12.6及实验内容1,2,3,43.教材P72:1,2,3,thanks to all,THE END,