C程序设计第2章数据类型及表达式.ppt_第1页
C程序设计第2章数据类型及表达式.ppt_第2页
C程序设计第2章数据类型及表达式.ppt_第3页
C程序设计第2章数据类型及表达式.ppt_第4页
C程序设计第2章数据类型及表达式.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、常见错误及改正,1、单词拼写错误 voidviod main-mian iostream-iosteam cout-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,肯定是中文符号错,常见错误及改

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

3、码如main后面加了;就会出现) 8. return a value; void return type assumed main前少了void 9. local variable x used without having been initialized 本地变量没有初始化就使用了,常见错误及改正,10. 编译与构建时文件名称不同 error LNK2005: _main already defined in aa.obj error LNK2005: double _cdecl max(double,double) (?maxYANNNZ) already defined in aa.o

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

5、据类型 2.3 常量与变量 2.4 运算符与表达式,2-1 词法符号P13,2-1-1C+语言的字符集,2-1-2标识符,2-1-1c+的字符集(P13),1.字符集:即程序中允许出现的符号(ASCII码字符集) 每种程序设计语言都使用一些特定的字符来构造基本词法单位,这些字符构成的集合就叫做字符集。,26个小写字母(az)、26个大写字母(AZ) 10个数字(09) 其他符号:+ - * / = |? %,( ):;.!“_# cinabc; /输入三边长 s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); cout“area=“areaendl; ,2.

6、2 基本数据类型,构造类型,基本类型,类(class),基本型 (int) 短整型 (short) 长整型 (long),单精度型(float) 双精度型 (double),P15 图2-1,指针类型 *,1、基本数据类型 (P15表2-2),不同数据类型的存储位数不同,数的范围不同 进行数据处理时,根据数的特点决定数据类型,类型修饰符,C+语言中还有四种类型修饰符: signed(有符号) unsigned(无符号) long(长型) short (短型),无符号:00000000 11111111 可表示0到255共256个数 有符号: 11111111 01111111 可表示-128到

7、+127共256个数,0代表正,1代表负, 111111 1,允许用修饰符组合构成的常用数据类型有: char (signed char) ,unsigned char: 1个字节 short(signed short),unsigned short:2个字节 int (signed int ) ,unsigned int : 4个字节 long (signed long) ,unsigned long: 4个字节 float: 4个字节(大约6位有效数字) double: 8个字节(大约12位有效数字) long double: 10个字节(大约15位有效数字),2.3.1 常量,整型常量

8、实型常量 字符常量 字符串常量 符号常量,常量:是指在程序运行过程中,其值不变的量。常量都具有一定的数据类型,由其表示方法决定。在程序中不必对常量进行任何说明就可以使用。主要有以下几种:,2.3 常量与变量,#include void main() double r,s,a; coutr; s=2*r*3.14; a=r*r*3.14; couts=sendl; coutarea=aendl; ,数据是以常量或变量的形式来描述的,1、整型常量,有3种表示方式: 十进制整数 八进制整数(以0开头的整数) 十六进制整数(以0X或0 x开头的整数) 如: 123,-34,0 0123(=1*82+2

9、*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.8f、 34.6l 在C+中,一个实型常数未说明则表示是double型。,2、浮点型常量,3. 字符型常量,一般字符常量:键盘上有该符号 例:b 转义字符常量:不能从键盘上直接输入 以 开始的字符序列,表

10、示控制代码,单引号括起来的单个字符,值为其ACSII码值, 单引号是定界符,不是常量本身的内容 如:a A 2,注:0与0不同,如 (P15表2-3) n表示回车换行 表示单引号 表示双引号,字符常数的存储方式: ASCII码值,占一个字节 如 A 对应的ASCII码值为: 65=0101=0X41=01000001B,8位,A: 65 a: 97 0: 48,字符串常量:双引号括起来的一串字符 例 3a9d#=s 2天津ABC,4. 字符串常量,存储:依次存放各自的ASCII码,尾部自 动加字符串结束标志0,即:,长度:为该串中含字符的个数,不含结束标志,即串长度。上例串长度为:7,注: 在

11、字符串里,可以使用转义字符 的书写方式,以下字符串含。,ASk3 (错!),ASk3,例如:输出字符串 ASk3,例:字符串“HELLO”的内存表示,字符串结束标志,ASk3,coutASk3;,3)能进行的运算不同 a+r+5 合法 字符常量可以与整型数进行加/减运算 a+r+5 非法,字符常量与字符串常量的区别,1) 表现形式不同 字符常量用 定界符不同 字符串常量用 ,2) 内存中所占空间不同 a :字符常量, 存储其ASCII码值, 占据一个字节 a :字符串常量,占据两个字节, 即:a 与0 的ASCII码值,4) 存放两者的变量不同 字符常量用 字符变量 字符串常量用 字符数组,5

12、. 符号常量,C+中常量可以是常数,也可以是代表固定不变的值的名字符号常量。比如程序中经常用到某个常数,此时可以定义一个名字来表示此常数,以便改进程序的可读性。 例如:计算圆面积或圆周长要用到3. 1415926 (不能直接用),可定义为符号常量。,定义符号常量一般形式: const 数据类型 符号常量=表达式; 例如:const double PI=3.1415926; const double PI= ; error,一般用大写字母,#include void main() double r,s,a; coutr; s=2*r*3.14; a=r*r*3.14; couts=sendl;

13、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; right const double A1=5+sin(x); error,布尔常量

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

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

16、值 变量的地址: 存储空间惟一的地址,变量类型:决定为该变量分配多大的存储空间 决定该变量可参与何种运算 变量名:存储空间的名字,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)定义后

17、用输入语句从键盘输入变量的值,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) /

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

19、 赋值运算符 其他运算符 运算符的优先级和结合性,单目运算符(-(负) 双目运算符(+(加)、-(减)、*(乘)、/(除)、%(模,求余) 优先级为: 负号级别最高,其次为* / %,再就是+ -。 要求: 操作数为数值型数据 其中%要求为整型 /与%的第二操作数不为0 特别注意“/”,当分子分母都是整数是做整除!,算术运算符,取余算术运算符 %,两个整数相除后的余数,其符号和被除数的符号相同。,例: 8%5 运算结果: 9%12 运算结果: -15%12 运算结果: 12%(-15 ) 运算结果: 2%2 运算结果:,/ 可对不同数据类型进行操作 % 只对整数进行操作,区别,3 9 -3 1

20、2 0,2、增1和减1运算符 增量操作表示加1,减量操作表示减1。 如:int a=4; a+; /等效于a=a+1; +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种关系运算符: 、=、 = =(等于)、!=(不等于) 关系运算符都是双目运算符。 优先级: 、=四种比= =

21、、!=两种要高 要求: 两个操作数为同一类型 其结果值为1(代表逻辑真)或0(代表逻辑假)。,逻辑运算符,三种逻辑运算符: 则等效于: k=5;j=k;I=j;,注意赋值运算符不是比较运算符= = ,赋值运算符左边只能是变量名,不可以是常量或其他表达式 x+y=z/error 3=a+7/error int x=1; 与int x; x=1;在概念上的区别。,在C+中,将算术运算符、位运算符同赋值运算符结合可形成复合赋值运算符。 一共有十种: +=、-=、*=、/=、%=、=、 x=ab? a : b; /实现把a和b中较小的值赋给x 条件运算符是C+中唯一的一个三目运算符。,2.逗号运算符(

22、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变量的类型。,运算符的优先级和结合性,1、优先级 共15种优先级。分别为: 元素/成员-单目-双目-三目-赋值-逗号 常

23、用的双目运算符的优先级又分为: 算术-移位-关系-逻辑位-逻辑,2、结合性 大多数为从左至右,只有三类是从右至左。 分别为: 单目、三目和赋值,二、表达式,表达式的种类 表达式的值和类型 表达式中的类型转换,表达式的种类,表达式是由运算符和操作数组成的式子。 常见的有如下6种: 算术表达式。如:a+5.2/3.0 逻辑表达式。如:!a /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)

24、,cosx,cos(x),exp(x),算术表达式举例,#include,#include ,常用的数学函数 #include ,2、关系表达式 如: char x(m),y(n);int n; n=x3)+(y-x=1); / n:3,3、逻辑表达式 如: int a(3),b(0); bool c=true; !c /a:3 表达式的值:false a|b+ /b:0 表达式的值:true 注意:C+规定:在一个逻辑表达式中,当计算出一个子表达式的值后便可确定整个逻辑表达式的值时,后面的子表达式就不再计算。,!c /a:4 表达式的值:0 c|b+ /b:1 表达式的值:1,如:4、条件表

25、达式 int a(3),b(4),c; c=ab?+a:+b; /c:5 c=a-b?a+b:a-3?b:a; /c:8 从右向左结合,如:5、赋值表达式 int x(1),y(3),z(5); /从右向左结合 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+系统要先转换为同一类型,然后再进行运算。 即先转换,

26、再运算,运算结果的类型同操作数的类型。 两种类型转换的方法: 自动类型转换、 强制类型转换,表达式中的类型转换,1、隐含转换 一般双目运算中的两个操作数的类型是要一致,不一致则自动将低类型的数据向高类型转换,然后再运算并得到高类型的表达式值。 所谓的类型高低关系如下: short,char-int-long-double,float-double 如:3+4.0,A + 32 + 7.23 * 6 - 5 / 3,int,int,double,double,运算结果的类型为:,2 强制类型转换,(类型名)操作数 或 类型名(操作数),这也是一个表达式,该表达式的值是把操作数的数据类型强行转换为

27、前面指定的数据类型后的值。 操作数:可以是常量、变量、函数、表达式 若为表达式,则要用括号将表达式括起来,一般形式:,例如: (long)2 (int)4.8 (double)5/3 (double)(5/3),1.000000,1.666667,2L,4,使用强制类型转换运算符来实现,举例: #include void main() double x=5.6; int i; i=int (x); cout“i=“i“nx=“x“n”; ,运行结果:,i=5 x=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 转换,类型转换(例),1. char与 short 、 int转换,char与 short 、 int可以相互赋值,char c1,c2; int i,j=48; c1=A; c2=c1+32; / c2:a /sizeof(c2):1 i=c2; /i:97 /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论