您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计视频教程及习题解析 徐红波 第03章
C程序设计讲师:徐红波Email:x_h_b@tom.com第3章数据类型、运算符与表达式3.1C语言的数据类型算法处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、实数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。所谓数据结构指的是数据的组织形式。例如,数组就是一种数据结构。处理同一类问题,如果数据结构不同,算法也会不同。例如,对10个整数排序和对由10个整数构成的数组排序的算法是不同的。因此,在考虑算法时,必须注意数据结构。实际上,应当综合考虑算法和数据结构,选择最佳的数据结构和算法。C语言的数据结构是以数据类型形式出现的。C的数据类型如下:数据类型基本类型构造类型指针类型空类型字符型整型实型(浮点型)枚举类型单精度型双精度型数组类型结构体类型共用体类型C语言中数据有常量与变量之分,它们分别属于以上这些类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。在程序中对用到的所有数据都必须指定其数据类型。3.2常量与变量3.2.1常量和符号常量在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型,如12、0、-3为整型常量,4.6、-1.23为实型常量,’a’、’d’为字符常量。常量一般从其字面形式即可判别。这种常量称为字面常量或直接常量。也可以用一个标识符代表一个常量,该标识符称为符号常量,即标识符形式的常量。[例3.1]符号常量的使用#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}符号常量不同于变量,它的值在其作用域(本例中为主函数)内不能改变,也不能再被赋值。习惯上,符号常量名用大写,变量名用小写,以示区别。使用符号常量的好处是:(1)含义清楚(2)在需要改变一个常量时能做到“一改全改”。3.2.2变量其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名到相应的内存地址,从其存储单元中读取数据。3a变量名变量值存储单元用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符(identifier)。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。合法的标识符,也是合法的变量名:sum,average,_total,Class,day,month,Student_name,tan,lotus_1_2_3,BASIC,x_h_b不合法的标识符和变量名:M.D.John,¥123,#33,3D64,ab注意,大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM,Class和class是两个不同的变量名。一般,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。这样做的目的是:(1)凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。(2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。(3)指定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。3.3整型数据3.3.1整型常量的表示方法整型常量即整常数。C整常数可用以下三种形式表示:(1)十进制整数。如123,-456,0。(2)八进制整数。以数字0开头的数是八进制数。如0123表示八进制数123,-011表示八进制数-11。(3)十六进制整数。以0x开头的数是十六进制数。如0x123代表十六进制数123,-0x12等于十六进制数-12。3.3.2整型变量1、整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。inti;i=10;000000000000101010iinti;i=-10;10的原码0000000000001010取反1111111111110101再加11111111111110110-10的补码2、整型变量的分类整型变量的基本类型符为int。可以根据数值的范围将变量定义为基本整型、短整型或长整型。在int之前可以根据需要分别加上修饰符:short(短型)或long(长型)。因此有以下三种整型变量:(1)基本整型,以int表示。(2)短整型,以shortint表示,或以short表示。(3)长整型,以longint表示,或以long表示。为了充分利用变量的表数范围,可以将变量定义为“无符号”类型。对以上三种都可以加上修饰符unsigned,以指定是“无符号数”。如果加上修饰符signed,则指定是“有符号数”。如果既不指定为signed,也不指定为unsigned,则隐含为有符号。归纳起来,可以用以下6种整型变量。即:有符号基本整型[signed]int无符号基本整型unsigned[int]有符号短整型[signed]short[int]无符号短整型unsignedshort[int]有符号长整型[signed]long[int]无符号长整型unsignedlong[int]0111111111111111有符号整型变量a无符号整型变量b1111111111111111=32767=65535表3.1ANSI标准定义的整数类型类型比特数最小取值范围[signed]int16-32768~32767(-215~215-1)unsigned[int]160~65535(0~216-1)[signed]short[int]16-32768~32767(-215~215-1)unsignedshort[int]160~65535(0~216-1)long[int]32-2147483648~2147483647(-231~231-1)unsignedlong[int]320~4294967295(0~232-1)3、整型变量的定义[例3.2]整型变量的定义与使用main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}4、整型数据的溢出在TurboC中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?[例3.3]整型数据的溢出main(){inta,b;a=32767;b=a+1;printf(“%d,%d”,a,b);}01111111111111111000000000000000a:b:3.3.3整型常量的类型在将一个整型常量赋值给上述几种类型的整型变量时如何做到类型匹配?请注意以下几点:(1)一个整数,如果其值在-32768~32767范围内,认为它是int型,它可以赋值给int型和longint型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648~2147483647范围内,则认为它是长整型,可以将它赋值给一个longint型变量。(3)如果某一计算机系统的C版本确定shortint与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此,一个int型的常量也同时是一个shortint型常量,可以赋给int型或shortint型变量。(4)一个整常量后面加一个字母u或U,认为是unsignedint型,如1234u,在内存中按unsignedint规定的方式存放。(5)在一个整常量后面加一个字母l或L,则认为是longint型常量。3.4浮点型数据3.4.1浮点型常量的表示方法浮点数(floating-pointnumber)就是实数(realnumber)。浮点数有两种表示形式:(1)十进制小数形式。它由数字和小数点组成。0.123、123.、123.0、0.0都是十进制小数形式。(2)指数形式。如123e3或123E3都代表123×103。注意字母e或E之前必须有数字,且e后面的指数必须为整数,如e3、2.1e3.5、e3、e都不是合法的指数形式。3.4.2浮点型变量1、浮点型数据在内存中的存放形式+.3141591数符小数部分指数+.314159×1013.141592、浮点型变量的分类浮点型变量分为单精度(float)型、双精度(double)型和长双精度(longdouble)型3类。在TurboC中有关浮点型的数据见下表。类型比特数有效数字数值范围float326~7-3.4×10-38~3.4×1038double6415~16-1.7×10-308~1.7×10308longdouble12818~19-1.2×10-4932~1.2×104932对每一个实型变量都应在使用前加以定义。如:floatx,y;doublez;longdoublet;3、浮点型数据的舍入误差由于浮点型变量是由有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。[例3.4]实型数据的舍入误差main(){floata,b;a=123456.789e5;b=a+20;printf(“%f”,b);}3.4.3浮点型常量的类型C语言编译系统将浮点型常量作为双精度来处理。f=2.45678*4523.65如果是在数的后面加字母f和F(如1.65f、654.87F),这样编译系统就会按单精度处理。一个浮点型常量可以赋给一个float型、double型或longdouble变量。根据变量的类型截取浮点型常量中相应的有效位数字。假如a已指定为单精度浮点型变量:floata;a=111111.111;3.5字符型数据3.5.1字符常量C语言的字符常量是用单撇号括起来的一个字符。如’a’、’x’、’D‘、’?’、‘$’等都是字符常量。除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个字符“\”开头的字符序列。常用的以“\”开头的特殊字符见下表。转义字符及其作用字符形式含义ASCII代码\n换行,将当前位置移到下一行开头10\t水平制表(跳到下一个Tab位置)9\b退格,将当前位置移到前一列8\r回车,将当前位置移到本行开头13\f换页,将当前位置移到下页开头12\\代表一个反斜杠字符\92\'代表一个单引号字符39\”代表一个双引号字符34\a鸣铃7\ddd1到3位八进制数所代表的字符\xhh1到2位十六进制数所代表的字符[例3.5]转义字符的使用#includestdio.hvoidmain(){printf(“ㄩabㄩc\tㄩde\rf\tg\n”);printf(“h\ti\b\bjㄩk\n”);}3.5.2字符变量字符变量用来存放字符常量,它只能放一个字符,不要以为在一个字符变量中可以放一个字符串字符变量的定义形式如下:charc1,c2;c1=‘a’;c2=‘b’;在所有的编译系统中都规定以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节3.5.3字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如字符’a’的ASCII代码为十进制数97,’b’的ASCII代码为十进制数98,在内存中变量c1、c2的值如下图(a)所示。实际上是以二进制形式存放的,如图(b)所示。9798c1c20110000101100010c1c2(a)(b)在内存中字符数据以ASCII码存储,它的存储形式就与整数的存储形式类似。这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。以整数形式输出时,直接将ASCII码作为整数输出。也可以对字符数据进行算术运算,此时相当于对它们
本文标题:C语言程序设计视频教程及习题解析 徐红波 第03章
链接地址:https://www.777doc.com/doc-3841138 .html