C语言程序设计-第2章.ppt_第1页
C语言程序设计-第2章.ppt_第2页
C语言程序设计-第2章.ppt_第3页
C语言程序设计-第2章.ppt_第4页
C语言程序设计-第2章.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

网络信息中心教研室,第 2 章 数据类型、运算符与表达式,大学计算机基础,网络信息中心教研室,2,主要内容,2.2 标识符,2.3 常 量,2.4 变 量,2.5 数据间的混合运算,2.6 变量赋初值,2.1 C语言的数据类型,2.7 运算符和表达式,大学计算机基础,网络信息中心教研室,3,1.5 C语言的运行与调试,大学计算机基础,网络信息中心教研室,4,一个程序应包含两个方面,即数据结构和算法: (1) 为了方便对程序中的数据进行存储和运算,每个数据都要有指定的数据类型和组织形式,叫做数据结构。数据类型是按被定义变量的性质、表示形式、占据存储空间及构造特点进行划分,不同类型数据的数据表示形式、取值范围、占用内存空间的大小及可参与的运算种类也不同; (2) 算法是指对操作的描述,一般会给出解决问题的操作步骤。,2.1 C语言的数据类型,大学计算机基础,网络信息中心教研室,5,2.1.1 基本数据类型简介,基本数据类型 C语言中,数据类型可分为:基本类型、构造类型、指针类型和空类型4大类,如下图2-1所示。,大学计算机基础,网络信息中心教研室,6,标识符 除了常量的直接使用方式以外,其它方式均要求这些数据有一个名字与之匹配,这个名字就是标识符。 C语言中,变量名、符号常量、函数名、数组名、类型名、文件名等字符序列称为标识符。 可用于标识符的字符集 C语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符不允许为数字.,2.2 标识符,大学计算机基础,网络信息中心教研室,7,2.2 标识符,大学计算机基础,网络信息中心教研室,8,2.2.1 C语言的字符集,C语言的字符集分以下几类。 英文大写或小写字母:AZ,az; 数字:1、2、3、9 特殊符号:+、-、*、/、%、=、_、!、(、)、#、$、 转义字符:n、t、v、b、r、f、0、”、ddd、xhh等。,大学计算机基础,网络信息中心教研室,9,2.2.2 标识符的分类,标识符可分如下几类: 关键字亦称保留字,关键字在C语言中有特定的含义,用户在使用自定义的常量名、变量名、函数名、类型名、文件名时,要绝对避免使用关键字,C语言中的保留字32个,保留字用小写字母表示,大写的可以由用户自由使用,尽量不用,以免与系统保留字混淆.,关键字,1,大学计算机基础,网络信息中心教研室,10,2.2 标识符,描述数据类型定义的有:typedef、void; 描述存储类型的有:auto、extern、register、static、volatile; 描述数据类型的有:char、int、float、double、long、short、signed、struct、union、unsigned、const、enum; 描述语句:break、case、continue、default、if、else、switch、for、do、while、return、sizeof、goto。,大学计算机基础,网络信息中心教研室,11,2.2 标识符,预定义标识符包括C语言中提供的一些库函数的名字(如printf,scanf,getchar,putchar等)和编译预处理命令(define include等),建议用户在自定义常、变量时,也要避免与这些标识符冲突。 用户在程序设计过程中,会经常用到常量、变量、自定义函数、文件名、类型名等 ,这些要用户定义。,预定义标识符,2,用户定义标识符,3,大学计算机基础,网络信息中心教研室,12,2.2 标识符,下面给出一些合法的标识符: sum,average,_total,temp,a_1,char1,Max,min 下面这些是不合法的标识符: 1a,$total,a,a.next 在使用标识符的时候尽量采取“见名识义、常用从简”的原则,保证变量具有可读性,又不要让变量名过长。,大学计算机基础,网络信息中心教研室,13,常量 程序执行过程中,其值不能被改变的量称为常量,C语言中出现的常量有如下类型:整型常量、实型常量、字符常量、字符串常量等。,2.3 常量,大学计算机基础,网络信息中心教研室,14,2.3 常量,大学计算机基础,网络信息中心教研室,15,2.3.1 整型常量,2.3.1 整型常量 整型常量在C语言中又分: 十进制整数 八进制整数 十六进制整数 十进制整数以人们通常习惯的十进制整数形式给出. 八进制整数必须以0开头,其数码取值范围为07. 以下是合法的八进制数: 012(对应十进制整数10),-012(对应十进制数-10),0177777(对应十进制数65535),0177777(对应十进制数-65535)。,十进制整数,1,八进制整数,2,大学计算机基础,网络信息中心教研室,16,2.3 常量,以下是不合法的八进制整数: 255(无前缀0),03A2(包含非法数码) 【例2-1】输出八进制数。 #include/*在visual C+6.0 下调试通过*/ main() int x,y; x=012; y=-0177777; printf(“x=%d,y=%dn“,x,y); ,大学计算机基础,网络信息中心教研室,17,2.3 常量,十六进制整数的前缀为0x或0X,其数码取值范围为09,AF,af。 以下是合法的十六进制整数: 0X12(十进制数18),-0x12(十进制数-18),0XA1,0Xffff(十进制数为65535) 以下各数不是合法的十六进制整数: 6B(无前缀0x),0x5H(含有非法数码H) 在整型数据的后边加上后缀“L”或“l”(小写字母l)来表示的该数据是一个长整型的数据。例如:,589L十进制 012L八进制 0X17L十六进制,十六进制整数,3,大学计算机基础,网络信息中心教研室,18,2.3.2 实型常量,实型常量也称为浮点型。 有两种形式: 十进制小数形式和指数形式。 十进制小数形式:由数码09和小数点组成。如下均为合法的实数: 0.12,1.23,-2.5145,125.0 指数形式:,由十进制数,加上阶码标志“e”或“E”及阶码(只能为整数,可以带符号)组成。,如:指数值1.2E6等于 1.2106 5.21E-2等于 5.2110-2 0.91E8等于 0.91108 -1.8E-9等于 -1.810-9,大学计算机基础,网络信息中心教研室,19,2.3.3 字符常量,字符常量是用西文半角单引号括起来的一个字符。 在C语言中,字符常量有以下特点: (1) 字符常量只能用单引号“”括起来,不能用双引号或括号。 (2) 字符常量只能是单个字符,不能是字符串。 (3) 字符可以是字符集中任意字符,但数字被定义为字符型之后就不能参与数值运算。,大学计算机基础,网络信息中心教研室,20,2.3.3 字符常量,除了以上形式的字符常量外,C语言还允许使用一种特殊形式的字符常量,即转义字符,它以一个反斜线“”开头,后跟一个或几个字符的字符序列 。,大学计算机基础,网络信息中心教研室,21,2.3.3 字符常量,【例2-2】输出转义字符。 【程序分析与解答】 #include /*visual C+ 6.0 */ main() printf(“abctderftgn“); printf(“1234567812345678n“);/*参照物*/ printf (“htibbjk“); printf(“1234567812345678n“);/*参照物*/ ,输出结果为: fgde 1234567812345678 hjk 1234567812345678 Press any key to continue,大学计算机基础,网络信息中心教研室,22,2.3.4 字符串常量,字符串常量是由一对双引号括起的字符序列。例如,“211 Project”,“Chinese”,“college”等都是合法的字符串常量。 字符串常量和字符常量的数据结构不同,其主要区别如下: (1) 字符常量由单引号括起来,字符串常量由双引号 括起来; (2) 字符常量只能是单个字符,字符串常量含一个或多个字符。,大学计算机基础,网络信息中心教研室,23,2.3.4 字符串常量,C在内存中占一个字节,表示为: “C”在内存中占两个字节,表示为: 可以把一个字符常量赋予一个字符变量,但是不能把一个字符串常量赋予一个字符量。 字符串常量占的内存字节数等于字符串半角字符数加1,因为在增加的一个字节中存放字符“0”(ASCII码值为0),这是字符串结束的标志。,大学计算机基础,网络信息中心教研室,24,2.3.5 符号常量与预处理,在C语言中,可以用一个标识符来表示一个常量,称为符号常量。 符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量 其中,#include也是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令,其功能是把该标识符定义为常量。一经定义,以后程序中所有的标识符都代表该常量,如果要修改这个常量,可以实现整个程序中“一改全改”。 经常将符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。,大学计算机基础,网络信息中心教研室,25,2.4 变量,大学计算机基础,网络信息中心教研室,26,变量是指在程序执行过程中可以被改变和赋值的量。程序中每一个变量有一个符合C语言标识符规范的名称,在内存中占据一定的存储单元。变量的使用方法是先声明(定义变量),后使用。 变量名与变量值是有区别的,变量的“名”是指变量所代表的存储单元的标志,而“值”是指存储单元的内容.例:,2.4 变量,A _变量 变量值,3,大学计算机基础,网络信息中心教研室,27,2.4.1 整型变量,如: short int x; /*变量的声明,定义整型变量*/ x=10; /*变量赋值*/ 0000000000001010 变量x在内存中的地址是0x0013ff70 数据在内存中的二进制存储示意图 (1) 基本型:类型说明符为int,在内存中占4个字节。 (2) 短整型:类型说明符为short int或short,占2个字节。 (3) 长整型:类型说明符为long int或long,4个字节。 (4) 无符号型:类型说明符为unsigned,。 无符号型又可与上述三种类型匹配而构成,不能表示负数:,整型数据在内存中的存储形式,1,整型变量的分类,2,大学计算机基础,网络信息中心教研室,28,2.4.1 整型变量,【例2-3】测试当前C编译环境下数据类型占用的字节数。 【程序分析与解答】 #include main() printf(“int占%d字节。n”,sizeof(int); printf(“long int占%d字节。n”,sizeof(long int); printf(“short int占%d字节。n”,sizeof(short int); printf(“unsigned int占%d字节。n”,sizeof(unsigned int); printf(“unsigned long int占%d字节。n”,sizeof(unsigned long int); printf(“unsigned short int占%d字节。n”,sizeof(unsigned short int); ,输出结果为: int占4字节。 long int占4字节。 short int占2字节。 unsigned int占4字节。 unsigned long int占4字节。 unsigned short int占2字节。,大学计算机基础,网络信息中心教研室,29,2.4.1 整型变量,变量定义的一般形式为: 类型说明符 变量名标识符1,变量名标识符2,; 例如: int x,y,z; /*x,y,z为整型变量*/ long int n,m; /*n,m为长整型变量,long int 可简写为long */ unsigned int a,b; /*a,b为无符号整型变量,unsigned int 可简写为unsigned*/,注意: (1)允许在一次定义相同 类型的多个变量 (2)最后一个变量名之 后必须以分号结尾。,整型变量的定义,3,大学计算机基础,网络信息中心教研室,30,2.4.2 实型变量,实型数据一般占用4个字节(32位)的内存空间,按指数形式存储。例如,实数12.345在内存中的存储形式如图2-4所示: 图2-4 实型数据的表示,实型数据在内存中的存放形式,1,大学计算机基础,网络信息中心教研室,31,2.4.2 实型变量,实型变量分为单精度(float型),长单精度型(long float),双精度(double型)和长双精度(long double型)4类,其中float型占用4个字节,其它数据类型均占用8个字节。 由于实型变量由有限的存储单元组成,因此能提供的数字是有限的,而在有效位以外的数字将被舍去。这样可能会产生一些误差,例如,a+20的显然就应该比a大。请分析下面的程序。,实型变量数据的分类,2,实型数据的舍入误差,3,大学计算机基础,网络信息中心教研室,32,2.4.2 实型变量,【例2-4】实型数据的舍入误差。 【程序分析与解答】 #include main() float a,b; a=123456.789e5; /*12345678900*/ b=a+20; printf(“%fn“,b); ,输出结果为: 12345678868.000000,大学计算机基础,网络信息中心教研室,33,2.4.3 字符变量,字符变量用来存储字符常量,其说明符是char. 字符变量的赋值有如下方式: (1) 若ch_a是一个字符变量,ch=ch_a; (2) 将字符常量a赋值给ch,ch=a; (3) 将某个字符的ASCII码赋给ch,ch=65,则ch的内 容为A,但由于整型变量在存储上均超过1个字节,如果将一个整型变量赋值给一个字符变量时,只会将其最低8个位赋值给ch。 而ch=“A“则是错误的.,如下字符变量的输出 形式: printf(“%c“,ch); (2) printf(“%d“,ch); (3) putchar(ch);,大学计算机基础,网络信息中心教研室,34,2.5 数据间的混合运算,大学计算机基础,网络信息中心教研室,35,不同数据类型转换规则 整型、单精度型、双精度型数据可以混合运算。字符型数据可以与整型通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型, 然后进行运算。转换的规则按图所示,2.5.1 各数据类型转换规则,double float long unsigned int char, short,大学计算机基础,网络信息中心教研室,36,2.5.2 自动类型转换与强制转换,变量的数据类型的转换方法有两种,一种是自动转换,一种是强制转换。 自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按照数据长度增加的方向进行,以保证运算精度不降低。 所有的浮点运算都是以双精度进行的。 char型和short型运算时,必须先转换成int型。 赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。,自动类型转换,1,大学计算机基础,网络信息中心教研室,37,2.5 数据间的混合运算,其一般形式为: (类型说明符)(表达式) 例如: (float) a /*把a转换为实型*/ (int)(x+y) /*把x+y的结果转换为整型*/ 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。,强制转换,2,大学计算机基础,网络信息中心教研室,38,2.5.2 自动类型转换与强制转换,【例2-5】数据类型的强制转换。 【程序分析与解答】 #include main() float f=5.75; printf(“(int)f=%d,f=%fn“,(int)f,f); ,输出结果为: (int)f=5,f=5.750000,大学计算机基础,网络信息中心教研室,39,变量预先设置初值可以有如下几种情况: (1)对各变量分别赋初值 int a=3; float pi=3.14159; char cha; (2)定义变量时对部分变量赋值 int a,b,c=5; (3)对几个变量赋相同的初值 如:若对几个变量赋予初值3,应写成 int a=3,b=3,c3;,2.6 变量赋初值,大学计算机基础,网络信息中心教研室,40,2.6 变量赋初值,强制类型转换运算符 () 自增、自减运算符 如: +i,-i (在变量i使用之前,先使i的值加(减)1) i+,i- (在变量i使用之后,使i的值加(减)1)使用自增、自减运算符需要注意的若干问题: +或-运算符,只能用于变量,而不能用于常量或表达式。 +和-的结合方向是“自右至左”。,大学计算机基础,网络信息中心教研室,41,2.7 运算符和表达式,大学计算机基础,网络信息中心教研室,42,C的运算符有以下几类: (1) 算术运算符:+ - * / % (2) 关系运算符: = | 逗号表达式,2.7.1 C语言运算符与表达式的类型,大学计算机基础,网络信息中心教研室,43,2.7.2 表达式的求值规则,这些运算符在C语言中规定了优先级和结合性,在求值时先按运算符的优先级别高低次序执行,如果某个运算对象左右两侧的运算符的优先级别相同,则按规定的“结合方向”处理,其中算术运算符的结合方向为“自左至右”,而对于赋值运算符则采用“自右至左”的结合方向。 有关运算符的优先级别和结合性参看附录。,大学计算机基础,网络信息中心教研室,44,2.7.3 算术运算符和算术表达式,(1) + (加法运算符,或正值运算符。如3+5、+3) (2) - (减法运算符,或负值运算符。如5-2、-3) (3) * (乘法运算符。如3*5) (4) / (除法运算符。如5/3,5.0/3) (5) % (模运算符,又称求余运算符,%两侧均 应为整型数据,如7%4的值为3)。,基本的算术运算符,1,大学计算机基础,网络信息中心教研室,45,2.7.3 算术运算符和算术表达式,(8) 指针运算符: * & (9) 求字节数运算符: sizeof (10) 强制类型转换运算符: (类型) (11) 分量运算符:. - (12) 下标运算符: (13) 其他:如函数调用运算符(),大学计算机基础,网络信息中心教研室,46,2.7.3 算术运算符和算术表达式,+i,-i (在变量i使用之前,先使i的值加(减)1) i+,i- (在变量i使用之后,使i的值加(减)1) 使用自增、自减运算符需要注意的若干问题: (1) +或-运算符,只能用于变量,而不能用于常量或表达式。 (2) +和-的结合方向是“自右至左”。,算术表达式和运算符的优先级与结合性,2,强制类型转换运算符(),3,自增、自减运算符,4,大学计算机基础,网络信息中心教研室,47,2.7.4 赋值运算符和赋值表达式,赋值符号“=”就是赋值运算符 使用“=”连接的式子称为赋值表达式,其一般形式为: 变量=常量、变量或表达式 赋值运算符具有右结合性。 如: a=b=c=3,赋值运算符和赋值表达式,1,大学计算机基础,网络信息中心教研室,48,2.7.4 赋值运算符和赋值表达式,(1) 将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。 (2) 将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。 (3) 将一个double型数据赋给float变量时,截取其前面7位有效数字, (4) 将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位。 (5) 字符型数据赋给整型变量时,将字符数据(8位)放到整型变量低8位中。,类型转换,2,大学计算机基础,网络信息中心教研室,49,2.7 运算符和表达式,在赋值符“=”之前加上其他运算符可以构成复合的运算符。如,+=,- =,*=,/=,%=,=,&=,=,|=。 如: a+=2 /* 等价于 a=a+2 */ x*=y+8 /* 等价于 x=x*(y+8) */ 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。 它的一般形式为: 变量 赋值运算符 表达式,复合的赋值运算符,3,赋值表达式,4,大学计算机基础,网络信息中心教研室,50,2.7.5 逗号运算符和逗号表达式,逗号运算符是一种特殊的运算,用以连接两个表达式,又称为“顺序求值运算符”。 逗号表达式的一般形式为: 表达式1,表达式2,表达式n 例如 x=2*5,x*3, 此时整个逗号表达式的值为30。 注:赋值运算符的优先级别高于逗号运算符,大学计算机基础,网络信息中心教研室,51,2.7.6 关系运算符和关系表达式,1.关系运算符 在语言中有以下关系运算符: (1) 大于 (4) = 大于或等于 (5) = 等于 (6) != 不等于 2.关系表达式 关系表达式的一般形式为: 表达式1 关系运算符 表达式2,大学计算机基础,网络信息中心教研室,52,2.7.7 逻辑运算符和逻辑表达式,逻辑运算符及其优先级 语言中提供了三种逻辑运算符: (1) & 与运算 (2) | 或运算 (3) ! 非运算,大学计算机基

温馨提示

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

最新文档

评论

0/150

提交评论