第二章 数据类型(3)
- 格式:doc
- 大小:39.00 KB
- 文档页数:10
第二章基本数据类型2.1数据概述一、程序设计概述一个程序应包括对数据的描述和对数据处理的描述。
1.对数据的描述,即数据结构。
数据结构是计算机学科的核心课程之一,有许多专门著作论述,本课程就不再赘述。
在C语言中,系统提供的数据结构,是以数据类型的形式出现的。
2.对数据处理的描述,即计算机算法。
算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。
为此,著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:数据结构+ 算法= 程序实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示二C语言的数据类型C语言提供的数据结构,是以数据类型形式出现的。
具体分类如下:1.基本类型分为整型、实型(又称浮点型)、字符型和枚举型四种。
2.构造类型分为数组类型、结构类型和共用类型三种。
3.指针类型。
在第9章中介绍。
4.空类型C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。
本章将介绍基本类型中的整型、实型和字符型三种数据。
三常量和变量1 常量常量的概念:在程序运行过程中,其值不能被改变的量称为常量。
常量的分类(1)整型常量(2)实型常量(3)字符常量。
(4)符号常量。
常量的类型,可通过书写形式来判别。
2 变量变量的概念:在程序运行过程中,其值可以被改变的量称为变量。
变量的两个要素(1)变量名。
每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。
(2)变量值。
在程序运行过程中,变量值存储在内存中。
在程序中,通过变量名来引用变量的值。
变量要先定义后使用变量定义的格式:类型说明符变量名;多个变量之间可以用逗号隔开先定义:1)确定变量的数据类型2)分配存储空间3)决定能做的运算变量的赋值变量名=值、表达式、函数调用3.标识符命名规则(1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。
(2)有效长度:随系统而异,但至少前8个字符有效。
如果超长,则超长部分被舍弃。
第二章 数据类型、运算符、表达式一、数据类型C 语言中的数据类型比别的语言丰富。
基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符变量、枚举常量、枚举变量。
1、常量与符号常量常量:在程序执行过程中,其值不发生改变的量称为常量。
常量区分为不同的类型,如68、0、-12为整型常量,3.14,9.8为实型常量,‘a ’,‘b ’,‘c ’则为字符常量。
常量即为常数,一般从其字面即可判别。
符号常量:有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。
如:#define PI 3.142、变量变量:程序执行过程中其值可以改变的量。
定义方法定义形式:数据类型 变量名1,变量名2,……变量名n ;整型(int )数据类型 基本类型 整型 单精度型(float )字符型(char )长整型(long )短整型(short )实型 双精度型(double )枚举类型(enum )共用体类型(union )构造类型结构体类型(struct )数组类型空类型(void )指针类型(*)如:char ch1, ch2; /* ch1,ch2为变量*/float x, y; /* x ,y 为实型变量*/int a, b, c; /* a,b,c 为整型变量*/在书写变量说明时,应注意以下几点:(1) 允许在一个类型说明符后,说明多个相同类型的变量。
各变量名之间用逗号间隔。
类型说明符与变量名之间至少用一个空格间隔。
(2) 最后一个变量名之后必须以“;”号结尾。
(3) 变量说明必须放在变量使用之前。
一般放在函数体的开头部分。
另外,也可在说明变量为整型的同时,给出变量的初值。
其格式为:类型说明符 变量名标识符1=初值1,变量名标识符2=初值2,...;3、数据在内存中的表示整型数据:以二进制的形式表示(1) int 类型正数: 如 123 (+123)用 16 位二进制(二个字节)表示原码 反码(原码同) 补码(原码同)最大正整数 215-1=214+213+212+211+210+29+2827+26+25+24+23+22+21+20=32767负数:如 –123原码补码(补码加 1)1取反加1 最大负整数-215=32768 因为 -215 < -(215-1) 所以用 -215 而不用 -(215-1)(2) unsigned (int) 类型称为无符号整数,它不是指不带“+ 或 -”号的整数,而是指内存表示这类数时没有符号位,16最大数215+214+213+2122+21+20=65535最小数 0 (3) long (int) 类型用 32 位二进制(四个字节)表示,其他同 int 型(4) short 类型有的计算机(小型、中型、大型机)int 即是 long ,而short 用16 位二进制(二个字节)表示。
C语言初学者入门讲座第二讲数据类型(3)基本运算符和表达式运算符的种类、优先级和结合性C语言中运算符和表达式数量之多,在高级语言中是少见的。
正是丰富的运算符和表达式使C语言功能十分完善。
这也是C语言的主要特点之一。
C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性。
在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。
这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。
运算符的种类C语言的运算符可分为以下几类:1.算术运算符用于各类数值运算。
包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+ +)、自减(--)共七种。
2.关系运算符用于比较运算。
包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符用于逻辑运算。
包括与(&&)、或(||)、非(!)三种。
4.位操作运算符参与运算的量,按二进制位进行运算。
包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符这是一个三目运算符,用于条件求值(?:)。
7.逗号运算符用于把若干表达式组合成一个表达式(,)。
8.指针运算符用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符有括号(),下标[],成员(→,.)等几种。
优先级和结合性C语言中,运算符的运算优先级共分为15级。
1级最高,15级最低。
在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
例如算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。
这种自左至右的结合方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。
最典型的右结合性运算符是赋值运算符。
如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。
C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
算术运算符和算术表达式基本的算术运算符1.加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。
如a+b,4+ 8等。
具有右结合性。
2.减法运算符“-”减法运算符为双目运算符。
但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。
3.乘法运算符“*”双目运算,具有左结合性。
4.除法运算符“/”双目运算具有左结合性。
参与运算量均为整型时,结果也为整型,舍去小数。
如果运算量中有一个是实型,则结果为双精度实型。
void main(){printf("\n\n%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);}双目运算具有左结合性。
参与运算量均为整型时,结果也为整型,舍去小数。
如果运算量中有一个是实型,则结果为双精度实型。
printf("\n\n%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);本例中,20/7,-20/7的结果均为整型,小数全部舍去。
而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。
5.求余运算符(模运算符)“%”双目运算,具有左结合性。
要求参与运算的量均为整型。
求余运算的结果等于两数相除后的余数。
void main(){printf("%d\n",100%3);}双目运算,具有左结合性。
求余运算符% 要求参与运算的量均为整型。
本例输出100除以3所得的余数1。
自增1,自减1运算符自增1运算符记为“++”,其功能是使变量的值自增1。
自减1运算符记为“--”,其功能是使变量值自减1。
自增1,自减1运算符均为单目运算,都具有右结合性。
可有以下几种形式: ++i i自增1后再参与其它运算。
--i i自减1后再参与其它运算。
i++ i参与运算后,i的值再自增1。
i-- i参与运算后,i的值再自减1。
在理解和使用上容易出错的是i++和i--。
特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。
void main(){int i=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);} i<--8i<--i+1i<--i-1i<--i+1i<--i-1i<--i+1i<--i-1 int i=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);i的初值为8第2行i加1后输出故为9;第3行减1后输出故为8;第4行输出i为8之后再加1(为9);第5行输出i为9之后再减1(为8) ;第6行输出-8之后再加1(为9);第7行输出-9之后再减1(为8)void main(){int i=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d",p,q,i,j);}i<--5,j<--5,p<--0,q<--0i+i+i--->p,i+1-->i,i+1-->i,i+1-->ij+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。
然后i再自增1三次相当于加3故i的最后值为8。
而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。
算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。
一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。
表达式求值按运算符的优先级和结合性规定的顺序进行。
单个的常量、变量、函数可以看作是表达式的特例。
算术表达式是由算术运算符和括号连接起来的式子,以下是算术表达式的例子:a+b (a*2)/c (x+r)*8-(a+b)/7 ++i sin(x)+sin(y) (++i)-(j++)+(k--)赋值运算符和赋值表达式简单赋值运算符和表达式,简单赋值运算符记为“=”。
由“= ”连接的式子称为赋值表达式。
其一般形式为:变量=表达式例如:x=a+bw=sin(a)+sin(b)y=i+++--j 赋值表达式的功能是计算表达式的值再赋予左边的变量。
赋值运算符具有右结合性。
因此:a=b=c=5可理解为a=(b=(c=5))在其它高级语言中,赋值构成了一个语句,称为赋值语句。
而在C中,把“=”定义为运算符,从而组成赋值表达式。
凡是表达式可以出现的地方均可出现赋值表达式。
例如,式子x=(a=5)+(b=8)是合法的。
它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x ,故x应等于13。
在C语言中也可以组成赋值语句,按照C语言规定,任何表达式在其未尾加上分号就构成为语句。
因此如x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。
具体规定如下:1.实型赋予整型,舍去小数部分。
前面的例2.9已经说明了这种情况。
2.整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
3.字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII 码值放到整型量的低八位中,高八位为0。
4.整型赋予字符型,只把低八位赋予字符量。
void main(){int a,b=322;float x,y=8.88;char c1='k',c2;a=y;x=b;a=c1;c2=b;printf("%d,%f,%d,%c",a,x,a,c2);}int a,b=322;float x,y=8.88;char c1='k',c2;printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b);本例表明了上述赋值运算中类型转换的规则。
a为整型,赋予实型量y值8 88后只取整数8。
x为实型,赋予整型量b值322,后增加了小数部分。
字符型量c1赋予a变为整型,整型量b赋予c2 后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。
复合赋值符及表达式在赋值符“=”之前加上其它二目运算符可构成复合赋值符。
如+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。
构成复合赋值表达式的一般形式为:变量双目运算符=表达式它等效于变量=变量运算符表达式例如:a+=5 等价于a=a+5x*=y+7 等价于x=x*(y+7)r%=p 等价于r=r%p复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。
逗号运算符和逗号表达式在逗号运算符C语言中逗号“,”也是一种运算符,称为逗号运算符。