C语言程序设计实用教程陈方第2章_第1页
C语言程序设计实用教程陈方第2章_第2页
C语言程序设计实用教程陈方第2章_第3页
C语言程序设计实用教程陈方第2章_第4页
C语言程序设计实用教程陈方第2章_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

2.1数据类型

C语言的数据类型可以划分为基本类型、构造类型、指针类型及空类型四种。本章将介绍基本类型中的整型、字符型和实型这三种数据类型,其他数据类型将在后续章节中陆续介绍。

2.2常量与变量1、常量的概念:在程序运行过程中,其值不能被改变的量称为常量。2、变量的概念:在程序运行过程中,其值可以被改变的量称为变量,常用小写字母、单词或汉语拼音来表示。它们可以在规定数值允许的范围里任意赋值,即其值可变。C语言的关键字不能用作变量名。3、变量的两个要素(1)变量名。每个变量都必须有一个名字

——

变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。4、变量的定义与初始化

在C语言中,要求对所有用到的变量,必须先定义、后使用;也可以在定义变量的同时进行赋初值的操作,称为变量初始化。

整型数据不带小数的数据称为整型数据。C语言提供了多种整数类型,用以适应不同的情况的需要。常用的整数类型有四种基本类型:

整型—用修饰符

int,占2字节,取值范围32768~32767,即215~(2151);

长整型—用修饰符

longint或long,占4字节,取值范围2147483648~2147483647,即

231~(2311);

无符号整型—用修饰符

unsignedint或unsigned,占2字节,取值范围0~65535,即0~(2161);

无符号长整型—用修饰符

unsignedlongint或unsignedlong,占4字节,取值范围0~4294967295,即0~(2321)。

有符号的整型数在内存中用二进制表示,最高位为符号位,0表示为正,1表示为负。一个整型数对应有原码、反码和补码3种形式,正数的三种码相同,负数的三种码不同。整型数在内存中自动用补码保存。在C语言中,整型常数可用以下三种形式表示:(1)十进制整数。如0,123,789等。(2)八进制整数。以数字0开头,表示与十进制数的区别。如0457,表示八进制数457,即(457)8,其值转化成十进制为4×82+5×81+7×80=303。对八进制数,每位仅能出现0~7共8个数。(3)十六进制数。以0x作为开头,表示与八进制数的区别,对十六进制数,每位可出现0~9,A,B,C,D,E,F(字母大、小写都可以)共16个数字。其中A表示10,B表示11,…,F表示15。如:0x49D,表示十六进制数49D,即(49D)16,其值转化成十进制为4×162+9×161+13×160=1181。对于长整型常量同样可以用十进制、八进制和十六进制3种形式表示。其表示形式是在整型常量之后加上字母“L”(大小写均可,建议用大写,因小写容易与数字1混淆)。例如:123L,1245789L,0xf3aeL等都是长整型常量。

整型变量的赋值

当整型变量在程序开头进行了定义后,对其赋值必须严格按照其允许值的范围进行。如定义inta,又给a赋值a=32769,则编译程序时会提示出错,因其值超出了该变量可以表示的范围,显然32769属于longint型的范围。

实型数据实型数据又分为三种

单精度—用修饰符float,占4字节,取值范围3.4×1038~3.4×1038;

双精度—用修饰符double,占8字节,取值范围1.7×10308~1.7×10308;

长双精度—用修饰符longdouble,占16字节,取值范围1.2×104932~1.2×104932

实型常量即实数,在C语言中又称浮点数,其值有两种表达形式:(1)十进制小数形式。由数字和小数点组成(注意:必须有小数点),如3.14、.98、0.0、176.0等都是十进制小数形式。(2)科学记数法:<尾数>E(e)<整型指数>。如123e3或123E3代表123×103。注意:e或E前必须有数字,其后必须为整数。如e3、3e2.5、E4都是错的。对于上述两种书写形式,系统默认为是双精度实型常量,可表示16位有效数字。如果要表示单精度实型(可表示7位有效数字)和长双精度实型常量,只要在上述书写形式后分别加上后缀f(F)或l(L)即可。

字符型数据

字符型数据用修饰符char表示,占1字节。字符数据在内存中存储的是字符的ASCII码

一个无符号整数,其形式与整数的存储形式一样,所以C语言允许字符型数据与整型数据之间通用。一个字符型数据,既可以字符形式输出,也可以整数形式输出。[例2-1]

字符变量的字符形式输出和整数形式输出。/*程序功能:用字符型和整数型输出字符变量*/main(){charch1,ch2;ch1='a';ch2='b';printf("ch1=%c,ch2=%c\n",ch1,ch2);/*其中c表示以字符输出*/printf("ch1=%d,ch2=%d\n",ch1,ch2);/*其中d表示以整数输出*/}程序运行结果:ch1=a,ch2=bch1=97,ch2=98

允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。[例2-2]

字符数据的算术运算。/*程序功能:字符数据的算术运算*/main(){charch1,ch2;ch1=‘a’;ch2='B';printf("ch1=%c,ch2=%c\n",ch132,ch2+32);/*字母的大小写转换*/printf("ch1+200=%d\n",ch1+200);printf("ch1+200=%c\n",ch1+200);/*297256=41,对应的ASCII字符为)*/printf("ch1+256=%d\n",ch1+256);printf("ch1+256=%c\n",ch1+256);}程序运行结果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353

ch1+256=aC语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符。例如:\n 表示换行;\t 光标横向跳动一段字符(如8个,相当于按Tab键);\v 竖向跳格;\b 退格;\r 回车;\f 换页;\\ 代表“\”符号;\’ 代表单引号;\ddd 表示ddd为一个用1到3位八进制表示的ASCII码所代表的字符;\xhh 表示hh为一个用1到2位十六进制代表的字符。如\101代表字符A;\0或\000表示空字符,它代表的ASCII码为0。字符串常量——用一对双引号括起来的若干字符序列,称为字符串常量。C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志,这样在输出或取该字符串时,便以此字符为终结,不会向后再取其他字节的内容。‘\0’字符实际上是一个ASCII码为0的空字符,不能显示,也不引起计算机发生任何具体动作,该空字符有时又称为NULL字符。由此可知,字符‘a’与字符串“a”除了表现形式上有单引号和双引号的区别外,在内存上占用的字节也不同,前者只占1个字节,后者占2个字节(a占1个字节、\0占1个字节)。

2.3用typedef定义类型在定义数据类型时,除了可以直接使用C提供的标准类型名(如int、char、float、double、long等)外,还可以用typedef声明新的类型名来代替已有的类型名。C语言提供用typedef来定义新的类型名,以代替已有的类型名,例如:typedefintINTEGER;指定用INTEGER代表int类型,这样以下两行等价:inti,j;INTEGERi,j;如果在一个程序中,一个整型变量用来计数,可用:typedefintCOUNT;COUNTi,j;

即将变量i、j定义为COUNT类型,而COUNT等价于int,因此i、j是整型。在程序中将i、j定为COUNT类型,可以使人更一目了然地知道它们是用于计数的。2.4赋值语句在程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。例如:inta=10; /*指定a为整型变量,初值为10*/floatf=3.1415; /*指定f为实型变量,初值为3.1415*/charc='a'; /*指定c为字符变量,初值为’a’*/也可以给被定义的变量的一部分赋初值。例如:inta,b,c=30;表示指定a、b、c为整型变量,只对c初始化,c的值为30。如果对几个变量赋予初值10,则写成:inta=10,b=10,c=10;表示a、b、c的初值都是10。注意:不能写成“inta=b=c=10;”。

2.5运算符和表达式2.5.1运算符在C语言中,运算符按功能分主要有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、指针运算符、条件运算符、逗号运算符、强制转换运算符等和其他特殊的运算符。按其所在表达式中参与运算的操作数目来分,则分为:单目运算符、双目运算符和三目运算符。单目操作是指对一个操作数(或称运算量)进行操作。例如:a是对a进行单目负操作。双目操作是指对两个操作数进行操作,例如:a+b是对a和b进行加法操作。1.算术运算符

用于各类数值运算。包括加(+)、减()、乘(*)、除(/)、求余(或称模运算,%)、自加(++)、自减(

)共7种。2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)6种。3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)3种。4.位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种。5.赋值运算符

用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共11种。6.条件运算符

这是一个三目运算符,用于条件求值(?:)。7.逗号运算符

用于把若干表达式组合成一个表达式(,)。8.指针运算符

用于取内容(*)和取地址(&)2种运算。9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

10.特殊运算符

有括号(

),下标[],成员(→,.)等几种。

2.5.2表达式1.表达式的概念

用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子,称为表达式。单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式,其他表达式称之为复杂表达式。按照运算符在表达式中的作用,表达式可分为:算术表达式

例如:

a+bc自增、自减表达式

例如:

i++

i关系表达式

例如:(a+b)>(ab)逻辑表达式

例如:

!aa&&b位运算表达式

例如:

a&ba<<3赋值表达式

例如:

a=3a*=2逗号表达式

例如:(a+b,ab)按运算符与运算对象的关系,则可以分成:单目表达式

例如:++aa!a双目运算符

例如:

a+ba&&b三目运算符

例如:

max=(a>b)?a:b2.运算符的优先级与结合性(1)C语言规定了运算符的优先级和结合性。正如四则运算有先乘除后加减的运算优先级规定一样,C语言中运算符的优先级也有规定。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性;反之,称为右结合性。除单目运算符、赋值运算符和条件运算符是右结合性外,其他运算符都是左结合性。(2)表达式求值①

按运算符的优先级高低次序执行。如先乘除后加减。②

如果在一个操作数两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。例如,算术运算符的结合方向是“自左至右”,即:在执行“a–b+c”时,先执行“ab”,然后再执行加c的运算。2.5.3算术运算对数据进行算术运算的运算符称为算术运算符。C语言中基本算术运算符有如下几种:1.双目运算符(1)+进行加法运算的加法运算符,如a+b、3+5等。(2)

进行减法运算的减法运算符,如ab、46等。(3)*乘法运算符,如a*b、3*6等。(4)/除法运算符,如:a/b、5/3等。它与一般算术运算符规则有所不同,整数相除,其商仅取整数部分,如5/3=1;若两实数相除,则商也为实数,如5.0/10.0=0.5。(5)%求余数运算符,即该符号两边数相除后,取余数,如5%3=2。取余运算时,两端必须是整数(即int或char型数据)。2.自加(++)、自减(

)运算

++或

称为自加或自减运算符,它们为单目运算符。自加自减运算符常用于循环语句中循环变量的计数。在赋值语句中,该运算符放在一整型变量前或后,操作方式不同,结果也不同。设i为一个整型变量,++i或

i表示在使用i之前,先使i的值加1或减1。而i++或i

表示先使用i,再使i的值加1或减1。例如“i=3;j=++i;”,此时j=4,i=4。又如“i=3;j=i++;”,此时j=3,i=4。自加自减运算符对变量单独作用时,放在变量前与变量后效果相同,例如:inty,i=10;i++;y=i;与inty,i=10;++i;y=i;结果y均为11,i也都为11。自加与自减运算符的运算对象只能是变量,不能是常量或表达式,如++6,(x+a)++都是错误的。3.正负号运算符

当+号或号放在一操作数前时,它们就成为单目的正负号运算符,其操作是取原来量的原值或负值。如a(相当于a=0a),a+(+b)相当于a=a+b。4.算术运算优先级别

在一个算术表达式中,其优先级别排序如下:(1)()优先级最高,执行时从左到右;(2)++,

,执行时从右到左,它们为同级;(3)*,/,%,执行时从左到右,它们为同级;(4)+,,执行时从左到右,它们为同级;(5)=优先级最低。2.5.4赋值运算

赋值运算符“=”表示将其右边的数据赋值给左边的变量;如a=5即将5赋值给变量a。当要赋的数据类型不同于赋值号左边的变量类型时,将自动转换,变成与其左边变量一致的类型,然后再赋值。

2.5.5关系运算C语言有6个关系运算符,即>、>=、<、<=、==、!=。用这些运算符所构成的表达式,称为关系表达式。当这种关系成立时,关系表达式的值为1;当这种关系不成立时,其值为0。[例2-3]

关系表达式的值。[解]main(){printf("%d%d%d\n",3<4,4<3,3<3);}程序运行结果:1002.5.6逻辑运算逻辑运算表示两个运算量之间的逻辑关系。逻辑运算的表达式称做逻辑表达式。各种逻辑运算所得到的值如下表所示。ab!a!ba&&ba||b非0非00011非0001010非01001001100运算优先级:这三个运算符中,!优先级最高,&&次之,||最低。!是单目运算符,&&和||是双目运算符。它们与其他运算符的优先级次序如下(左边最高,右边最低):!→算术运算符→关系运算符→&&→||→赋值运算符。

2.5.7其他运算1.逗号运算(,)及其表达式

C语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。其表达式:表达式1,表达式2,……,表达式n。该表达式叫逗号表达式,其运算过程是:自左至右,依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。例如:逗号表达式“a=3*5,a*4”的值等于60:先求解a=3*5,得a=15;再求a*4=60,所以逗号表达式的值等于60。又例如:逗号表达式“(a=3*5,a*4),a+5”的值等于20:先求解a=3*5,得a=15;再求a*4=60;最后求解a+5=20,所以逗号表达式的值等于20。注意:并不是任何地方出现的逗号都是逗号运算符。很多情况下,逗号仅用作分隔符。

2.字节数运算

运算符sizeof是单目运算符。把它放在操作数的前面,就是求该操作数的字节数。sizeof的操作数可以是变量、类型名,也可以是数组、结构之类的类型名。若把sizeof放到变量名前,就是求该变量的字节数;若把sizeof放在带括号的类型名前,则产生该类型的长度(以字节为单位)。

3.强制类型转换运算符

可以利用强制类型转换运算符将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式)例如:(int)(x+y)(将x+y转换成int类型)(float)(5%3)(将5%3的值转换成float类型)注意:表达式应该用括号括起来。如果写成:(int)x+y将只将x转换成int型,然后与y相加。2.5.8混合运算整型(int)、单精度实型(float)、双精度实型(double)可以相互混合运算。由于字符型(char)数据,其值为代表该字符ASCII码,因而它也可和上述类型数据进行混合运算。不同类型数据进行运算时,要先转换成同一类型,然后进行运算。在C程序中,有些类型转换是自动进行的,有些转换是被强制进行的,前者称为隐式转换,后者称为显示转换(强制类型转换)。2.6数据输出

2.6.1格式输出函数格式输出函数printf

温馨提示

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

评论

0/150

提交评论