C程序设计第2章数据类型及表达式.ppt

上传人:牧羊曲112 文档编号:6503634 上传时间:2023-11-07 格式:PPT 页数:78 大小:652KB
返回 下载 相关 举报
C程序设计第2章数据类型及表达式.ppt_第1页
第1页 / 共78页
C程序设计第2章数据类型及表达式.ppt_第2页
第2页 / 共78页
C程序设计第2章数据类型及表达式.ppt_第3页
第3页 / 共78页
C程序设计第2章数据类型及表达式.ppt_第4页
第4页 / 共78页
C程序设计第2章数据类型及表达式.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《C程序设计第2章数据类型及表达式.ppt》由会员分享,可在线阅读,更多相关《C程序设计第2章数据类型及表达式.ppt(78页珍藏版)》请在三一办公上搜索。

1、常见错误及改正,1、单词拼写错误voidviod main-mian iostream-iosteamcout-count endlend1,2、输出用错 cinx,y;coutxy;,3、main后少了(),函数体少了 或 不匹配,4、;用错,该有的没有,不该有的却有,5、中文标点用错,特别是引号,#include void main()double x,y;cout xy;double z=x+y;cout x+y=zendl;,不是“”!,应该是;,此处无;,error C2018:unknown character 0 xa3,肯定是中文符号错,常见错误及改正,unknown char

2、acter“0 xa3”不可知字符(中文符号)syntax error:missing;before type doublex:undeclared identifier:x:是没有声明的标识符unexpected tokens following preprocessor directive-expected a newline(若在#include行尾有;则有本条错误):,6、常见错误,常见错误及改正,7.missing function header(old-style formal list?)缺少函数头(在函数实现代码如main后面加了;就会出现)8.return a value;v

3、oid return type assumed main前少了void9.local variable x used without having been initialized本地变量没有初始化就使用了,常见错误及改正,10.编译与构建时文件名称不同error LNK2005:_main already defined in aa.objerror LNK2005:double _cdecl max(double,double)(?maxYANNNZ)already defined in aa.objDebug/aa.exe:fatal error LNK1169:one or more

4、multiply defined symbols found解决办法:关闭工作区选择否重新编译、构建,常见错误及改正,第2章 数据类型及表达式,要点:数据类型、常数、变量、运算符与表达式程序主要是对数据进行处理,首先要存储数据:用多大的空间存储数据、怎样存,进行什么运算 根据数的特点决定数据类型 根据处理方法决定选用常量或变量或数组 同时要起名字、知道存贮结构 根据数据类型决定采用的运算符与表达式 同时要知道运算优先顺序和方向,第二章 数据类型及表达式,2.1 词法符号2.2 常用基本数据类型2.3 常量与变量2.4 运算符与表达式,2-1 词法符号P13,2-1-1C+语言的字符集,2-1-

5、2标识符,2-1-1c+的字符集(P13),1.字符集:即程序中允许出现的符号(ASCII码字符集)每种程序设计语言都使用一些特定的字符来构造基本词法单位,这些字符构成的集合就叫做字符集。,26个小写字母(az)、26个大写字母(AZ)10个数字(09)其他符号:+-*/=|?%,():;.!“_#&(空格),同一个符号在不同位置出现时有不同的含义 例:3*2*p,符号单独使用与组合使用时含义不同 例:=与=&与&,不论何种语言,在写字符串时不受字符集限制,注意以下几点:,字符集的字符必须是半角(ASCII码字符集),命名规则:以字母或下划线开头,后跟字母、数字、下划线组成的串,长度:标识符长

6、度任意(C+编译器不同),例:name、total、sub_1、a11、_A11合法 2b、sum 1、s$1非法标识符,标识符:一个名字,由一串符号构成。作为标志与识别,常用来标识常量、变量、数据类型、函数等,2-1-2标识符(P13),标识符,注意:在标识符里区分大小写字母例:name Name NAME,一个标识符不能分行书写,习惯上取有意义的名字,如sum、aver等,尽量不要重名。习惯上变量名、函数名常用小写字母,2.关键字(keyword)P14,又叫保留字(Reserved word),是预先定义好的,被系统占用的标识符,具有特定的含义。,注:一般标识符不能取关键字,3.运算符,

7、空格逗号冒号花括号分号,/*/,4.分隔符,5.常量,6.注释,#include#include/*已知三边求三角形面积*/void main()/主函数double a,b,c,s,area;cinabc;/输入三边长s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);cout“area=“areaendl;,2.2 基本数据类型,构造类型,基本类型,类(class),基本型(int)短整型(short)长整型(long),单精度型(float)双精度型(double),P15 图2-1,指针类型*,1、基本数据类型(P15表2-2),不同数据类型的存储位数不

8、同,数的范围不同进行数据处理时,根据数的特点决定数据类型,类型修饰符,C+语言中还有四种类型修饰符:signed(有符号)unsigned(无符号)long(长型)short(短型),无符号:00000000 11111111 可表示0到255共256个数有符号:11111111 01111111 可表示-128到+127共256个数,0代表正,1代表负,111111 1,允许用修饰符组合构成的常用数据类型有:char(signed char),unsigned char:1个字节short(signed short),unsigned short:2个字节int(signed int),un

9、signed int:4个字节long(signed long),unsigned long:4个字节float:4个字节(大约6位有效数字)double:8个字节(大约12位有效数字)long double:10个字节(大约15位有效数字),2.3.1 常量,整型常量实型常量字符常量字符串常量符号常量,常量:是指在程序运行过程中,其值不变的量。常量都具有一定的数据类型,由其表示方法决定。在程序中不必对常量进行任何说明就可以使用。主要有以下几种:,2.3 常量与变量,#include void main()double r,s,a;coutr;s=2*r*3.14;a=r*r*3.14;cou

10、ts=sendl;coutarea=aendl;,数据是以常量或变量的形式来描述的,1、整型常量,有3种表示方式:十进制整数八进制整数(以0开头的整数)十六进制整数(以0X或0 x开头的整数)如:123,-34,0 0123(=1*82+2*81+3*80)/等于数83 0X123/等于数291 123L/长整型数123LU/无符号长整型数,有两种表示:定点数形式指数形式如:0.123,.23,0.0/定点数形式 123E5,23.4e-2/指数形式要注意E或e的前面要有数字,且E的后面的指数必须为整数。E2,2.1E3.5,e/不合法实型常数分为单精度、双精度和长双精度3类。如:34.5、3

11、.8f、34.6l在C+中,一个实型常数未说明则表示是double型。,2、浮点型常量,3.字符型常量,一般字符常量:键盘上有该符号 例:b转义字符常量:不能从键盘上直接输入以 开始的字符序列,表示控制代码,单引号括起来的单个字符,值为其ACSII码值,单引号是定界符,不是常量本身的内容如:a A 2,注:0与0不同,如(P15表2-3)n表示回车换行 表示单引号 表示双引号,字符常数的存储方式:ASCII码值,占一个字节如 A 对应的ASCII码值为:65=0101=0X41=01000001B,8位,A:65a:970:48,字符串常量:双引号括起来的一串字符 例 3a9d#=s 2天津A

12、BC,4.字符串常量,存储:依次存放各自的ASCII码,尾部自动加字符串结束标志0,即:,长度:为该串中含字符的个数,不含结束标志,即串长度。上例串长度为:7,注:在字符串里,可以使用转义字符的书写方式,以下字符串含。,ASk3(错!),ASk3,例如:输出字符串 ASk3,例:字符串“HELLO”的内存表示,字符串结束标志,ASk3,coutASk3;,3)能进行的运算不同 a+r+5 合法 字符常量可以与整型数进行加/减运算 a+r+5 非法,字符常量与字符串常量的区别,1)表现形式不同 字符常量用 定界符不同 字符串常量用,2)内存中所占空间不同 a:字符常量,存储其ASCII码值,占据

13、一个字节 a:字符串常量,占据两个字节,即:a 与0 的ASCII码值,4)存放两者的变量不同 字符常量用 字符变量 字符串常量用 字符数组,5.符号常量,C+中常量可以是常数,也可以是代表固定不变的值的名字符号常量。比如程序中经常用到某个常数,此时可以定义一个名字来表示此常数,以便改进程序的可读性。例如:计算圆面积或圆周长要用到3.1415926(不能直接用),可定义为符号常量。,定义符号常量一般形式:const 数据类型 符号常量=表达式;例如:const double PI=3.1415926;const double PI=;error,一般用大写字母,#include void ma

14、in()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=aendl;,3.1415926;,(1)符号常量定义时必须初始化。如:const double PI;PI=3.1415926;/error(2)定义中“表达式”只能是常量表达式,不能含有变量和函数。,注意:,例:const int COUNT=5+1;

15、right const double A1=5+sin(x);error,布尔常量的值只有true和false两种。,6.布尔常量,例:const bool=true;,2.3.2 变量,1)变量:指在程序运行过程中其值可以改变的量,2)变量要素:名字、类型和值(地址),3)C+程序中:变量的作用:用来存放数据 使用变量前必须首先定义变量名和变量的数据类型,为此变量在内存中分配一定的存储单元,并将在该单元中存放变量的值。变量的类型不同占内存单元数不同,见P13表2-2存储字节数。,变量的定义的一般格式/变量定义语句,数据类型名 变量名表;,基本类型关键字:char 字符型 int 整型long

16、 长整型float 浮点数double 双精度数,多个变量之间用都号“,”分隔,例:char c;int i,j,k;long l1,l2;float x,y,z;double t1,t2;,“先定义,后使用”,变量的作用:用来存放数据 定义变量:按类型在内存为其分配一定的存储单元(不同类型占字节数不同),并将该存储空间与变量名映射关系,存储变量变化的值,变量的命名,变量名:其命名同标识符1)不能是C+的关键字2)第一个字符必须是下划线或字母3)中间不能有空格4)不能与C+库函数名、类名和对象名相同5)区别大小写字母,一般变量名用小写字母表示,符号常数、自定义的类型名用大写字母表示,例:int

17、 i,j,k;,变量值:存储空间内的值变量的地址:存储空间惟一的地址,变量类型:决定为该变量分配多大的存储空间 决定该变量可参与何种运算变量名:存储空间的名字,i=3;j=5;,3,5,4 个字节,对变量的操作:存(赋值)和取(使用),i=3,j=5;k=i+j;取出i,j的值,求和后存入k,8,如:int a;a=300;注意有两个值的概念:一个是数据值(存放在内存空间中的数据)另一个是地址值(所占内存空间的起始地址),int i=3,j=5,k=i+j;,变量赋值与初始化,1)初始化:定义同时赋值,2)定义后用赋值运算符“=”给变量赋值,int i,j,k;i=3;j=5;k=i+j;,3

18、)定义后用输入语句从键盘输入变量的值,int i,j,k;cinij;k=i+j;,注意:不能重复定义一个变量例:int a,b,c;double x,y,c;没有存放字符串的变量 char a;a=d3$*j;(错!),2.4 运算符与表达式,二、表达式,一、运算符,重要,三、类型转换,操作数:运算符:圆括号:,优先级:相邻两个运算符之间的运 算顺序结合性:优先级相同时起作用,左、右结合性,常量、变量、函数或其他表达式,改变运算符的运算次序,组成,值,书写,对数学式子要写成表达式,没有上、下标、分式,只有圆括号,乘号不能省略,例如:A+32+7.23*6/3-(4+3)/3,说明运算的含义,

19、表达式,左结合:一个运算符对其操作数从左到右进行规定的运算,称此运算符是左结合的。右结合:与左结合相反,即:从右到左。,式子 运算符 c+表达式 结合性 593*/5*9/3 左结合a=b=3=a=b=3 右结合,结合性举例,表达式的书写原则,乘号不能省略。例如,x乘以y,应书写为:x*y,而不能写成xy,这样,编译器会认为xy是一个变量名。括号必须成对出现,而且只能使用圆括号,表达式中可以出现多个圆括号,但是必须配对出现。表达式中没有上标或下标,也没有分式。例如变量名x2不能写成x2。,一、运算符,算术运算符关系运算符逻辑运算符位操作运算符赋值运算符其他运算符运算符的优先级和结合性,单目运算

20、符(-(负)双目运算符(+(加)、-(减)、*(乘)、/(除)、%(模,求余)优先级为:负号级别最高,其次为*/%,再就是+-。要求:操作数为数值型数据其中%要求为整型/与%的第二操作数不为0特别注意“/”,当分子分母都是整数是做整除!,算术运算符,取余算术运算符%,两个整数相除后的余数,其符号和被除数的符号相同。,例:8%5 运算结果:9%12 运算结果:-15%12 运算结果:12%(-15)运算结果:2%2 运算结果:,/可对不同数据类型进行操作%只对整数进行操作,区别,39-312 0,2、增1和减1运算符增量操作表示加1,减量操作表示减1。如:int a=4;a+;/等效于a=a+1

21、;+a;/等效于a=a+1;a-;/等效于a=a-1;-a;/等效于a=a-1;增量操作符有前增量(a)与后增量(a+)之分。,如:int a=3;int b=+a;int c=a+;则:a:5,b:4,c:4。相应的,有-a和a-。增量和减量操作符都是单目操作符。,4,3,4,4,4,5,近水楼台先得月,3,3,关系运算符,C+提供了6种关系运算符:、=、=(等于)、!=(不等于)关系运算符都是双目运算符。优先级:、=四种比=、!=两种要高要求:两个操作数为同一类型其结果值为1(代表逻辑真)或0(代表逻辑假)。,逻辑运算符,三种逻辑运算符:&(逻辑与)、|(逻辑或)、!(逻辑非)。其中逻辑非

22、为单目运算符,逻辑与和逻辑或为双目运算符。优先级:!的优先级最高,而&又比|要高。,逻辑运算符运算规则,移位运算符-使用示例,移位运算是指将一个操作数中的各位都向左(用)移动若干位。,位运算符,考虑到数据在计算机内的存储表示,假如x和y均占用一个字节,其二进制为:x=00001101,y=00101011 x结果应为11110010,十进制结果为-14。【注】14的二进制为00001110,-14的补码是14的原码求反加1,即11110001+1=11110010,【例】x=13,y=43,计算各运算结果。,X&y运算如下:十进制结果为9,赋值运算符,如:I=j=k=5;则等效于:k=5;j=

23、k;I=j;,注意赋值运算符不是比较运算符=,赋值运算符左边只能是变量名,不可以是常量或其他表达式x+y=z/error3=a+7/errorint x=1;与int x;x=1;在概念上的区别。,在C+中,将算术运算符、位运算符同赋值运算符结合可形成复合赋值运算符。一共有十种:+=、-=、*=、/=、%=、=、&=、=、|=。,如:a+=b 等效于 a=a+b,注意:运算时右边的表达式是被作为一个整体参与运算的。如:a*=3+b 等效于 a=a*(3+b)而不是等效于 a=a*3+b,其他运算符,1.条件运算符语法为:(条件表达式)?(条件为真时的表达式):(条件为假时的表达式)如:int

24、a=3,b=6,x;x=ab?a:b;/实现把a和b中较小的值赋给x条件运算符是C+中唯一的一个三目运算符。,2.逗号运算符(p27),例:int a,b,c,d;则:d=(a=1,b=a+2,c=b+3)值:a、b、c、d的值分别为1、3、6、6,功能:从第一个开始(左),依次计算每个表达式的值,最后(右)一个表达式的值即为逗号表达式的值。,3、强制类型转换运算符用来将指定的表达式的值强制为所指定的类型。格式为:()或:()如:int a;double b=3.8921;a=int(b)+(int)b;则:a值为6注意:是对所求表达式的值指定类型,并不是改变b变量的类型。,运算符的优先级和结

25、合性,1、优先级共15种优先级。分别为:元素/成员-单目-双目-三目-赋值-逗号常用的双目运算符的优先级又分为:算术-移位-关系-逻辑位-逻辑,2、结合性大多数为从左至右,只有三类是从右至左。分别为:单目、三目和赋值,二、表达式,表达式的种类表达式的值和类型表达式中的类型转换,表达式的种类,表达式是由运算符和操作数组成的式子。常见的有如下6种:算术表达式。如:a+5.2/3.0逻辑表达式。如:!a&8|7关系表达式。如:m=n赋值表达式。如:a=7条件表达式。如:a4?+a:-a逗号表达式。如:a+5,a=7,a+=4,表达式的值和类型,任何一个表达式经过计算都应有一个确定的值和类型。计算一个

26、表达式的值时要注意两点:先确定运算符的功能。再确定计算顺序。要注意优先级和结合性的影响。一个表达式的类型由运算符种类和操作数类型来决定。如:1、算术表达式 int a=7*2+-3%5-4/3;/a:10 float b=510+-5.6f/0.03f/b:323.333 int a,m(3),n(4);a=m+-(-n);/a:0 m:4 n:3,式子 c+表达式,(a+b)/(c-d),a*a*a,sinx,sin(x),sqrt(g),cosx,cos(x),exp(x),算术表达式举例,#include,#include,常用的数学函数#include,2、关系表达式如:char x(

27、m),y(n);int n;n=x3)+(y-x=1);/n:3,3、逻辑表达式如:int a(3),b(0);bool c=true;!c/a:3 表达式的值:falsea|b+/b:0 表达式的值:true 注意:C+规定:在一个逻辑表达式中,当计算出一个子表达式的值后便可确定整个逻辑表达式的值时,后面的子表达式就不再计算。,!c/a:4 表达式的值:0c|b+/b:1 表达式的值:1,如:4、条件表达式int a(3),b(4),c;c=ab?+a:+b;/c:5c=a-b?a+b:a-3?b:a;/c:8 从右向左结合,如:5、赋值表达式int x(1),y(3),z(5);/从右向左

28、结合 z=(x*=2)+(y+=4)+2;/?(2,7,11),如:6、逗号表达式 int a,b,c;a=1,b=2,c=a+b+3;/c:6 c=(a+,a+=b,a+b);/c:6,类型转换,问题提出:什么时候、为什么需要类型转换?进行双目运算时,要求两个操作数的类型必须相同:当运算符两边的操作数的数据类型不一致时,VC+系统要先转换为同一类型,然后再进行运算。即先转换,再运算,运算结果的类型同操作数的类型。两种类型转换的方法:自动类型转换、强制类型转换,表达式中的类型转换,1、隐含转换一般双目运算中的两个操作数的类型是要一致,不一致则自动将低类型的数据向高类型转换,然后再运算并得到高类

29、型的表达式值。所谓的类型高低关系如下:short,char-int-long-double,float-double如:3+4.0,A+32+7.23*6-5/3,int,int,double,double,运算结果的类型为:,2 强制类型转换,(类型名)操作数或 类型名(操作数),这也是一个表达式,该表达式的值是把操作数的数据类型强行转换为前面指定的数据类型后的值。操作数:可以是常量、变量、函数、表达式 若为表达式,则要用括号将表达式括起来,一般形式:,例如:(long)2(int)4.8(double)5/3(double)(5/3),1.000000,1.666667,2L,4,使用强制

30、类型转换运算符来实现,举例:#include void main()double x=5.6;int i;i=int(x);cout“i=“i“nx=“x“n”;,运行结果:,i=5x=5.6,说明x变量的类型没变,只对x变量一时转换,注意一:是一种运算,表达式的值类型转换,而操作数的类型不变。(若为变量,不能改变变量的的数据类型。),注意二:,当操作数是表达式,用以下形式转换时,表达式应用括号括起来。(数据类型)操作数 例:(int)x+y(int)(x+y),例:double x=5.6,y=7.8,z;z=int(x+y);结果:x+y13.4 x+y为double型 z=13 转换,类

31、型转换(例),1.char与 short、int转换,char与 short、int可以相互赋值,char c1,c2;int i,j=48;c1=A;c2=c1+32;/c2:a/sizeof(c2):1i=c2;/i:97/sizeof(i):4c1=j;/c1:0,防止溢出错误!,char c1;int j=129;c1=j;/c1:?cout(int)c1endl;/-127char 类型数的范围是 128127产生整数溢出,但C+系统不报警。,j的补码,c1的补码,char c1;c1=129;编译出错:warning,2.short与 int转换,short、int可以相互赋值,s

32、hort si;/sizeof(si):2int j=123;/sizeof(j):4si=12;/sizeof(12):4si=j;,产生整数溢出,但C+系统不报警short si;int j=32768;si=j;/si:-32768,short si=32768;产生整数溢出,编译:WARNING,3.char、short与long常量赋值,char、short可以用long常量赋值,char c;short j;c=12L;/sizeof(12L):4j=123L;,编译出错:warningchar c;short j;long m;c=m;/waringj=m;/waring,4.b

33、ool与 int转换,bool bi;/sizeof(bi):1int i=1;i=true;/sizeof(true):1 i:1bi=0;/bi:falsei=bi;/i:0coutbiendl;/输出结果为0,编译出错:warningbool bi;int j=1;bi=j;,第二讲作业,一、课后作业复习教材第二章二、上机作业 实验教程实验二中的“三、实验内容”试验报告:“三、实验内容”中的“4.编程题(1)和(3)”小测试(1节课)三、预习:第三章13三节,第二讲作业,一、课后作业复习教材第二章书写作业:教材P29(7)思考教材P29(8)二、上机作业 1.实验教程P28实验一2.熟悉vc+环境,实验教程P16常用操作3.教材P12(13)4.实验教程实验二:例2.12.65.教材P29:7、8三、预习:第三章13三节,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号