数据类型、运算符和表达式2_第1页
数据类型、运算符和表达式2_第2页
数据类型、运算符和表达式2_第3页
数据类型、运算符和表达式2_第4页
数据类型、运算符和表达式2_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计语言程序设计第第2章章 数据类型、运算符和表达式数据类型、运算符和表达式2.1 数据类型 2.2 常量与变量 2.3 运算符和表达式 2.4 类型转换2.5 枚举类型C语言程序设计语言程序设计2.1 数据类型2.1.1 C语言的数据类型 一个程序应包括两个方面的内容: 1数据的描述。 2操作步骤,即动作的描述。C语言程序设计语言程序设计2.1 数据类型数据类型包含两个方面的含义:取值范围和操作。2.1.2 数值型数据的表示与存储形式 数值型数据可分为: 整型:有符号整型(singed int) 无符号整型(Unsigned int) 实型:单精度(float) 双精度(doubl

2、e) C语言程序设计语言程序设计2.1 数据类型1.整型(int):有符号的。即singed int0110010110101011 符号位数值位它在计算机内占4个字节,32位。最高位为符号位,其余31位为数值位。取值范围-2147483648+2147483647之间。 即-231231-1。 -2147483648 -2 -1 0 +1 +2 . . +21474836470110010110101011对应的格式是:dC语言程序设计语言程序设计2.1 数据类型2.无符号的整型(unsigned int)0110010110101011 数值位它在计算机内占4个字节,32位。全部是数值位。

3、 取值范围0232-1。 0 1 2 . . +232-10110010110101011对应的格式是:uC语言程序设计语言程序设计2.1 数据类型2.单精度(float)数的浮点表示形式:阶码和尾数数的浮点表示形式:阶码和尾数 阶码阶码:采用补码表示的定点纯整数,占一个字节,阶符占一位。:采用补码表示的定点纯整数,占一个字节,阶符占一位。 尾数尾数:采用补码表示的定点纯小数,占三个字节,数符占一位。:采用补码表示的定点纯小数,占三个字节,数符占一位。110.001=1.100112+10=11001.1 2-10=0.110011 2+11 N=数符数符尾数尾数2阶符阶符阶码阶码 尾数的位数

4、决定数的精度。尾数的位数决定数的精度。 阶码的位数决定数的范围。阶码的位数决定数的范围。表示的范围:表示的范围:-10381038 阶符 阶码 数符 尾数 00000011011001100000000000000000 -1038 .-10-6 0.0 10-6 . . +1038机器零对应的格式是:fC语言程序设计语言程序设计2.1 数据类型3.双精度(double) 与与float类型类似,只不过占类型类似,只不过占8个字节,精度更高,表个字节,精度更高,表示的范围更大示的范围更大. 表示的范围:表示的范围:-1030810308对应的格式是:lf每个类型占用的字节数,可用运算符:siz

5、eof(类型名)求出来.#include stdio.hvoid main()printf(%d %d %d %dn,sizeof(int),sizeof(long), sizeof(float),sizeof(double);运行结果为:4 4 4 8C语言程序设计语言程序设计2.1 数据类型例:体验实数的误差存在#include stdio.hvoid main()float d=3.500001,s;int i;s=0;for (i=1;i=100000;i+)s=s+d;printf(%fn,s);运行结果为:350000.031250若把程序中的float换为double,则程序的运

6、行结果是: 350000.100000C语言程序设计语言程序设计2.1 数据类型2.1.3 字符型数据的表示与存储形式 在计算机中对字符型数据的存储是将该字符相应的ASCII代码放到存储单元中。即一个字符占一个字节的存储单元,存储单元存放的是该字符相应的ASCII码值(以二进制形式存放),例如字符A的ASCII代码为65,在内存中存储形式如下: 0 1 0 0 0 0 0 1 由于在内存中字符数据以ASCII码存储,它的存储形式与整数的存储形式相类似,所以C语言中字符型数据和整型数据之间可以通用。 也就是说:整型包含字符型。因为整数的范围比字符的范围大。C语言程序设计语言程序设计2.1 数据类

7、型2.1.4 基本字符集、关键字和标识符 1基本字符集字符是C的基本元素,C语言允许使用的基本字符集有:26个大写字母26个小写字母10个阿拉伯数字其他字符 !“ # % & ( ) * + , - . / : ? _ | 空格字符以及制表符和换行符等控制字符C语言程序设计语言程序设计2.1 数据类型2.1.4 基本字符集、关键字和标识符 关键字是关键字是C C中具有固定意义的字符串。中具有固定意义的字符串。关键字不可用于变关键字不可用于变量名、函数名等。量名、函数名等。C C中的关键字共中的关键字共3232个,必须用小写字母表示:个,必须用小写字母表示: auto break case ch

8、ar const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 2关键字C语言程序设计语言程序设计2.1 数据类型2.1.4 基本字符集、关键字和标识符 标识符用于命名变量、类型、函数和其他各种用户定义的标识符用于命名变量、类型、函数和其他各种用户定义的对象。对象。 是由字母、下划线和数字三种字符组成;

9、是由字母、下划线和数字三种字符组成; 第一个字符必须为字母或下划线;第一个字符必须为字母或下划线; 标准标准C对标识符的长度没有限制,但不同编译系统识别的对标识符的长度没有限制,但不同编译系统识别的有效字符不同;有效字符不同; C区分大小写;区分大小写; 不允许关键字作为标识符。不允许关键字作为标识符。 3标识符C语言程序设计语言程序设计2.2 常量与变量2.2.1 常量定义:其值在程序运行期间不能改变的量。1. 整型常量 (1)十进制整型常量:以数字19开头,其他位以数字09构成十进制整型常量。如12,-38等。 (2)八进制整型常量:以数字0开头,其他位以数字07构成八进制整型常如012,

10、-037等。 在C语言中,整型常量有十进制、八进制、十六进制三种进制表示方法,并且各种数制均可有正(+)负(-)之分,正数的“+”可省略。 (3)十六进制整型常量:以0X或0 x开头(数字0和大写或小写字母x),其他位以数字09或字母af或AF构成十六进制整型常量。如0 x12,-0Xa9等。 C语言程序设计语言程序设计2.2 常量与变量2.2.1 常量1. 整型常量 23 23456 32767 33333 6666666 C语言程序设计语言程序设计2.2 常量与变量2.2.1 常量2. 实型常量实型常量(1)小数表示法 :它是由数的符号、数字和小数点组成的实型常量(注意:必须有小数点)。如

11、-2.5、3.0、4.、.34等都是合法的实型小数形式。 (2)科学计数法 :科学计数法也称指数法。它是由数的符号、尾数(整数或小数)、阶码标示(E或e)、阶符和整数阶码组成的实型常量。尾数不可缺省,阶码必须为整数。如-2.5E-3、3e5、34E-3等都是合法的指数形式。如-2.5E-3表示-2.510-3。 实型常量又称浮型常量。实型常量由整数部分和小数部分组成,有两种表示形式:小数表示法和科学计数法。它只能用十进制表示。 实型常量分为单精度、双精度。实型常量如果没有任何说明,则表示为双精度常量,实型常量后加上F或f则表示单精度常量。 C语言程序设计语言程序设计2.2 常量与变量2.2.1

12、 常量3. 字符常量 字符型常量是由一对单引号括起来的一个字符。它分为一般字符常量和转义字符。一个字符常量在计算机的存储中占据一个字节。 (1)一般字符常量 :一般字符常量是用单引号括起来的一个普通字符,其值为该字符的ASCII代码值。ASCII编码表见附录1。如a、A等都是一般字符常量,但是a和A是不同的字符常量,a的值为97,而A的值为65。 (2)转义字符 :C语言允许用一种特殊形式的字符常量,它是以反斜杠()开头的特定字符序列,表示ASCII字符集中控制字符、某些用于功能定义的字符和其他字符。如n表示回车换行符,表示字符“”。C语言程序设计语言程序设计C语言程序设计语言程序设计(1)

13、位型中的位型中的ooo表示个八进制数字,可以不用前缀;表示个八进制数字,可以不用前缀;hh表示个十六进制数字,表示个十六进制数字,x 是前缀不能省。例如:是前缀不能省。例如:水平制表符可用下列任一种形式表示:水平制表符可用下列任一种形式表示:t011 11 x09 x9字符字符A可用下列任一种形式表示:可用下列任一种形式表示:A 101 x41 (2)单引号和反斜线字符虽然是打印字符,但编译程序规定必须用)单引号和反斜线字符虽然是打印字符,但编译程序规定必须用转义序列表示。例如:转义序列表示。例如:单引号字符可用下列任一种形式表示:单引号字符可用下列任一种形式表示: 047 47 x27反斜线

14、字符可用下列任一种形式表示:反斜线字符可用下列任一种形式表示: 0134 134 x5c(3)双引号字符常数可以用图形符号或转义序列任一种形式表示。)双引号字符常数可以用图形符号或转义序列任一种形式表示。例如:例如:“” 042 x22(4)字符)字符0是值为的字符(空字符),不是空白字符。是值为的字符(空字符),不是空白字符。0除除表示值外,它强调对象的类型是字符型。也就是说,表示值为的字符表示值外,它强调对象的类型是字符型。也就是说,表示值为的字符用用0比用好。比用好。 C语言程序设计语言程序设计2.2 常量与变量2.2.1 常量4.字符串常量 字符串常量也称字符串,由一对双引号括起来(字

15、符串常量也称字符串,由一对双引号括起来(“”“”)的字符序列。)的字符序列。字符序列中的字符个数称字符串长度,没有字符的字符串称为空串。字字符序列中的字符个数称字符串长度,没有字符的字符串称为空串。字符串常量中的字符是连续存储的,并在最后自动加上字符符串常量中的字符是连续存储的,并在最后自动加上字符00作为字作为字符串结束标志。如字符串符串结束标志。如字符串“a”a”在计算机内存中占两个连续单元,存储内在计算机内存中占两个连续单元,存储内容为字符容为字符aa和和00。字符串常量和字符常量的区别是十分显著的,。字符串常量和字符常量的区别是十分显著的,主要表现为:主要表现为:(1 1)表示形式不同

16、。字符常量以单引号表示,字符串常量以双引号表示。)表示形式不同。字符常量以单引号表示,字符串常量以双引号表示。 (2 2)存储所占内存空间不同。字符常量在内存中只用)存储所占内存空间不同。字符常量在内存中只用1 1个字节存放该字个字节存放该字符的符的ASCIIASCII码值。字符串常量在内存中,除了存储串中有效字符的码值。字符串常量在内存中,除了存储串中有效字符的ASCIIASCII码值外,系统还自动在串后加上码值外,系统还自动在串后加上1 1个字节,存放字符串结束标志个字节,存放字符串结束标志00。 C语言程序设计语言程序设计(3 3)允许的操作不同。字符常量允许在)允许的操作不同。字符常量

17、允许在一定范围内与整数进行加法或减法运算,一定范围内与整数进行加法或减法运算,如如a-32a-32合法。字符串常量不允许上述运算,合法。字符串常量不允许上述运算,如如“a”-32a”-32非法的。非法的。 (4 4)存放的变量不同。字符常量可存放)存放的变量不同。字符常量可存放在字符变量或整型变量中,而字符串常量需要在字符变量或整型变量中,而字符串常量需要存放在字符数组中。存放在字符数组中。如果有一个字符串,“CHINA”实际上在内存中是C H I N A 0C语言程序设计语言程序设计2.2.2符号常量符号常量为使程序易于阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义为使程序易于

18、阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义的名字,这个名字称为符号常量。符号常量是一个标识符,有三种方法定义一个符号常量:的名字,这个名字称为符号常量。符号常量是一个标识符,有三种方法定义一个符号常量:一种是利用编译预处理的宏替换功能一种是利用编译预处理的宏替换功能#define;另一种是用;另一种是用const类型限定符说明并初始化一类型限定符说明并初始化一个标识符;第三种方法是通过定义枚举类型来定义符号常量(以后讲)。个标识符;第三种方法是通过定义枚举类型来定义符号常量(以后讲)。用用#define定义符号常量定义符号常量形式:形式:#define 标识符标识符 常量表达

19、式常量表达式常量表达式是值为常量的表达式,一般为已定义的符号常量或文字常量,常量表达式是值为常量的表达式,一般为已定义的符号常量或文字常量,也可以由运算符连接常量形成的表达式;标识符是符号常量的名字,它代表常量也可以由运算符连接常量形成的表达式;标识符是符号常量的名字,它代表常量表达式所表示的文字。例如:表达式所表示的文字。例如:#define SIZE 100#define PI 3.1415926#define BLANK #define TWO_PI 2.0*PI注:符号常量的名字(标识符)一般用大写字母。注:符号常量的名字(标识符)一般用大写字母。#define 行不是行不是C语句,而

20、是编译程序的预处理控制语句,而是编译程序的预处理控制,因此其后面不加因此其后面不加“;” 2.2 常量与变量C语言程序设计语言程序设计2.2.2符号常量符号常量用用const定义符号常量。定义符号常量。形式:形式:const 类型区分符类型区分符 标识符标识符=常量表达式;常量表达式;符号符号“=”左边的标识符被定义为常量,标识符代表常量表达左边的标识符被定义为常量,标识符代表常量表达式的值。式的值。例如:例如:const int MAX=1000;const double PI=3.14159;const char BLANK=;const signed TRUE=1,FALSE=0; 说明

21、:用说明:用#define和和const定义的符号常量在实现上有本质定义的符号常量在实现上有本质不同。不同。#define在编译预处理时用常量表达式去替换程序中所有出在编译预处理时用常量表达式去替换程序中所有出现的常量标识符,标识符没有对应的存储单元;由现的常量标识符,标识符没有对应的存储单元;由const说明的标说明的标识符是一个不可更改的左值,编译时要给它分配存储单元。识符是一个不可更改的左值,编译时要给它分配存储单元。 C语言程序设计语言程序设计应用举例:计算圆柱体的体积应用举例:计算圆柱体的体积V=r2h#include stdio.hvoid main ( ) double v,r,

22、h; printf (input r,h:); scanf (%lf,%lf,&r,&h); v=3.14159 *r*r*h; printf (v=%lfn,v);如果使用符号常量:如果使用符号常量:#include stdio.h#define PI 3.14159 void main ( ) double v,r,h; printf (input r,h:); scanf (%lf,%lf,&r,&h); v=PI *r*r*h; printf (v=%lfn,v);C语言程序设计语言程序设计2.2 常量与变量1. 变量的属性三要素:变量名,变量的地址 ,变量的值。2. 在选择变量名和其

23、它标识符时,应注意做到“见名知意”,以增加程序的可读性。3. 在语言中,要求对所有用到的变量“先定义,后使用”,否则,在编译时会指出有关出错信息。 2.2.2 变量含义:其值在程序运行期间可以改变的量。C语言程序设计语言程序设计2.2 常量与变量2.2.2 变量定义变量的方法: int i; int k,j; long a; float b; double d; char c1; 而:int 3a; 是错误的,因为变量的起名要符合标识符的命名规则。int i;i=3;的实质是:的实质是: 1. 给变量给变量i在内存中开辟一块空间(两个字节)出来,这块空在内存中开辟一块空间(两个字节)出来,这块

24、空间用间用i做标识。此时的做标识。此时的i没有值,也就是说,这些空间是空的。没有值,也就是说,这些空间是空的。 2. 把整数把整数3转换为带符号的转换为带符号的16位二进制放到此空间中。位二进制放到此空间中。i变量名0123456变量的地址地址内存7891011123的二进制变量的值C语言程序设计语言程序设计给变量赋初值有两种方式:给变量赋初值有两种方式:一是通过赋值语句置初一是通过赋值语句置初值(如值(如i=0;););另一个方式是在变量说明时给出初值另一个方式是在变量说明时给出初值称为初始化,格式为:称为初始化,格式为:类型区分符类型区分符 变量名变量名=表达式表达式,;如:如: int

25、age=15,index=1,i=0,j=0; int i=j=0; 非法。非法。 int i,j=0; j被初始化为被初始化为0;i的初值不确定。的初值不确定。 char c=y; double esp=1.0e-5;C语言程序设计语言程序设计2.3 运算符和表达式分类名称运算符算术运算符+、-、*、/、%、+、-关系运算符、=、=、!=逻辑运算符&、|、!位运算符、|、&赋值运算符=及其扩展赋值运算符条件运算符? :逗号运算符,指针运算符*、&求字节数运算符sizeof强制类型转换运算符(类型)分量运算符. 、-下标运算符 其他函数运算符( ) C语言提供了13类,共计34种运算符。据运算

26、符的运算对象的个数,C语言的运算符分为单目运算符、双目运算符和三目运算符,如单目+,双目 = 7=51 0 C语言程序设计语言程序设计结果类型一定为结果类型一定为int,如果操作数关系成立则结果为非如果操作数关系成立则结果为非0(一般(一般为为1),否则为),否则为0。注意注意C语言中没有表示逻辑真值和逻辑假值的数据。任何非语言中没有表示逻辑真值和逻辑假值的数据。任何非0值值(一般为非(一般为非0整数)都表示逻辑真,整数整数)都表示逻辑真,整数0表示逻辑假。表示逻辑假。如:如:a!=b 表达式值为非表达式值为非0,50+70=100.0 表达式值为表达式值为0.如果用浮点数比较来测试某个条件如

27、果用浮点数比较来测试某个条件,则可能永远得不到所希望,则可能永远得不到所希望的结果。如设的结果。如设x,y为浮点变量,则表达式:为浮点变量,则表达式:x/y*y= =x 值可能不成立。值可能不成立。若需要判别两实数是否大约相等,可用下式表示:若需要判别两实数是否大约相等,可用下式表示:fabs(y-x)e-5 数学中数学中axb与与C中中a=x=b含义不同含义不同。若若a=0,b=0.5,x=0.3。则执行。则执行 “a=x=b”时先求时先求a=x得得1(真)(真)再执行再执行1=b得得0(假)。(假)。为判别为判别x是否在区间是否在区间a,b内应为:内应为: a=x & x278在数学中不允

28、许,在在数学中不允许,在C中是允许的。中是允许的。按自左向右的原则:按自左向右的原则:52为为1 17为为0 08为为0整个表达式为的值整个表达式为的值0ijj-1 结果永远为结果永远为1 关系表达式的值为关系表达式的值为,也可看作整型表达式也可看作整型表达式。如:。如:int i=1,j=7,a;a=i+(j%4!=0);最后最后a的值为的值为 字符比较按字符比较按ASC码进行码进行ba为为aA为为a=x+1=a ) &(c=z ) 或或 c=a其结果:如果变量其结果:如果变量c的值是小写字母,则上式为真(非的值是小写字母,则上式为真(非0)否则为否则为0。d9 若若d为非数字时,表达式为非

29、为非数字时,表达式为非0 。否则为。否则为0!i等价于等价于 i= =0 但但!i 比比i= =0效率高,若效率高,若c为字符型,检查为字符型,检查c 是否为空白字符时是否为空白字符时 用用!c 比比 c= =0好好如果判断数字字符如果判断数字字符: D=0& d1&k=i+j 其结果整个表达式的值为(假),其结果整个表达式的值为(假),k的值为。的值为。 0 & ()对于逻辑或(对于逻辑或(|)运算,当左操作数为非(真)时整个)运算,当左操作数为非(真)时整个表达式的值已确定为真,则右操作数根本就不计算。表达式的值已确定为真,则右操作数根本就不计算。 如:如:int i=1,j=1,k=1;

30、 i=1|k=i+j 其结果整个表达式的值为其结果整个表达式的值为1(真),(真),k的值为。的值为。 1 | ()C语言程序设计语言程序设计2.3.4 自增、自减运算自增、自减运算自增和自减运算符包括:自增和自减运算符包括:+(增(增1) -(减减1) “+”和和“-”是单目运算符,操作数必须是可更改是单目运算符,操作数必须是可更改的的左值表达式左值表达式。左值表达式是一个表示存储单元的表达式,一般为左值表达式是一个表示存储单元的表达式,一般为不带不带const说明的变量名。带说明的变量名。带const说明的标识符是不可说明的标识符是不可更改的左值表达式。更改的左值表达式。可更改的左值表达式

31、包括:基本类型的变量名、下可更改的左值表达式包括:基本类型的变量名、下标表达式、指针变量名和间接访问表达式(指针变标表达式、指针变量名和间接访问表达式(指针变量)、结构成员选择表达式和结构变量名。用()括起量)、结构成员选择表达式和结构变量名。用()括起来的左值表达式也是左值表达式。来的左值表达式也是左值表达式。C语言程序设计语言程序设计2.3.4 自增、自减运算自增、自减运算“+ +”将操作数加将操作数加1,“ -”将操作数减将操作数减1,结果类型与操,结果类型与操作数类型相同。整型或浮点型操作数按整型数值作数类型相同。整型或浮点型操作数按整型数值1增加或减少,增加或减少,指针类型操作数以后

32、讲。指针类型操作数以后讲。“+ +”或或 “-”可以出现在操作数前面(前缀式)或后可以出现在操作数前面(前缀式)或后面(后缀式)面(后缀式) 如如 +n - -n n+ n- -。前缀式先将操作数增(减)前缀式先将操作数增(减),然后取操作数的新值作,然后取操作数的新值作为表达式的结果。为表达式的结果。例如若例如若n=1 则则+n结果为结果为2,n的新值为的新值为2。后缀式将操作数增(减)后缀式将操作数增(减)1之前之前的值作为表达式的结果。的值作为表达式的结果。操作数的增(减)操作数的增(减)1运算是在引用表达式的值之后完成的称为运算是在引用表达式的值之后完成的称为后缀后缀+(或(或)的计算延迟。一直延迟到出现下面情况时,)的计算延迟。一直延迟到出现下面情况时,操作数才增(减)。操作数才增(减)。C语言程序设计语言程序设计一直延迟到出现下面情况时,操作数才增(减一

温馨提示

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

评论

0/150

提交评论