《C语言的数据类型 (2).ppt》由会员分享,可在线阅读,更多相关《C语言的数据类型 (2).ppt(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章C语言的数据类型、运算符及其表达式语言的数据类型、运算符及其表达式第一节第一节C的数据类型及常量数据的数据类型及常量数据第二节第二节变量及其类型变量及其类型第三节第三节运算符和表达式运算符和表达式1/71C语言程序设计语言程序设计 龙昭华主编课件制作:刘达明课件制作:刘达明023-66834110第一节第一节C的数据类型及常量数据的数据类型及常量数据(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)2/71由于“程序=算法+数据结构”,算法处理的对象是数据,而数据是以某种特定的形式存在的(如整数、实数、字符等)。不同的数据之间往往还存在某些联系(
2、如若干整数组成一个整数数组)。所谓数据结构数据结构指的是数据的组织形式,如数组就是一种数据结构。不同的计算机语言所允许定义和使用的数据结构是不同的,处理同一类问题如果数据结构不同,算法也会不同。因此考虑算法时,必须注意数据结构。一、一、C C的数据类型分类的数据类型分类空空类类型型(void)指针类型指针类型(*)数据类型数据类型基本类型基本类型整型整型(int)字符型字符型(char)枚枚 举举 类类 型型(新新 增增 加加 的的)(enum)实型实型(浮点型浮点型)双精度型双精度型(double)单单 精精 度度 型型(float)构造类型构造类型数组类型数组类型结结 构构 体体 类类 型
3、型(struct)共用体类型共用体类型(union)实际上,应当综合考虑算法和数据结构,选择最佳的数据结构和算法。C语言的数据结构数据结构是以数数据类型据类型形式出现的。C的数据类型分类如右边所示:课件制作:刘达明课件制作:刘达明023-66834110二、二、常量及其类型常量及其类型第一节第一节C的数据类型及常量数据的数据类型及常量数据3/71在程序运行过程中,其值不能被改变的量称为常量。常量。1 1、直接常量、直接常量常量一般从其字面形式即可判断,这种常量称为字面常量或直接常量。常量分为以下不同类型:、整型常量、整型常量 即整常数,它在C中有三种表示方法:十进制整数十进制整数:如:58、1
4、23、-456、0、-9等。它们是以非数字0开头,并由数字09组成,可以带正负号。八进制整数八进制整数:如:011、089、-0112、00、-09等。它们是以数字0开头,并由数字07组成,可以带正负号。十六进制整数十六进制整数:如:0 x123、0X119、0 x8f、-0 x1E、0 x0等。它们是以数字0和字母x联合组成的0 x或0X开头,并由数字09和字母AF(或af)组成,可以带正负号。注意:在整型常数后添加字母“L”或“l”,是长整型数,添加“u”则是无符号基本整型数。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:
5、刘达明023-66834110、实型常量实型常量第一节第一节C的数据类型及常量数据的数据类型及常量数据4/71 实型常量又称浮点数,它即数学里的实数,在C中有两种表示方法:十进制小数形式十进制小数形式:它由数字09和小数点组成(注意必须有小数点.),可以带正负号。如:.123、56.、89.0、-456.32、0.0、-.9、0.78、-0.99等。指数形式指数形式:也称科学表示法。如:123e3或123E3都代表123*10123*103 3。注意:字母e或E之前必须有数字,且字母e或E之后的指数必须是整数。一个实数可以有多种指数表示形式,如:123.456可以表示为123.456e0、12
6、.3456e1、1.23456e2、.123456e3、0.0123456e4等。我们把在字母e或E之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字的表示称为“规范化的指数形式”。如1.23456e2、-6.8e8、8.9e-2等。一个实数在用指数形式输出时,是按规范化的指数形式输出的。如:5689.65按指数形式输出的话,结果为5.68965e+003。注意注意:浮点常数只有一种进制(十进制);所有浮点常数都被默认为double型;实数常量后面跟一个f或F表示该常量为float型,或跟一个l或L表示该常量为long double型。如:8.9、8.9F、8.9L表示不同的数据类
7、型。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110、字符型常量、字符型常量第一节第一节C的数据类型及常量数据的数据类型及常量数据5/71 C的字符型常量是用单引号单引号括起来的一个字符。(注意是单引号)如:A、a、D、*、$、0等。注意:A和a是两个不同的字符常量。除了以上形式的字符常量外,C语言还有一种特殊的字符常量转义字符。它以“”开头,使用时用一对单引号将其括起来。如n表示回车换行字符,即键盘上的“Enter”键。字符形式字符形式功能含义功能含义十六进制值十六进制值ASICII代码代码等效按
8、键等效按键n换行换行,将当前位置移到下一行开头,将当前位置移到下一行开头0 x0A10Ctrl+Jt横向跳格横向跳格(跳到下一个跳到下一个tab位置位置)0 x099Ctrl+Iv竖向跳格竖向跳格0 x0B11Ctrl+Kb退格,将当前位置移到前一列退格,将当前位置移到前一列0 x088Ctrl+Hr回车,将当前位置移到本行开头回车,将当前位置移到本行开头0 x0D13Ctrl+Mf走纸换页,将当前位置移到下页开头走纸换页,将当前位置移到下页开头0 x0C12Ctrl+L反斜杠反斜杠0 x5C92单引号字符单引号字符0 x2739?问号字符问号字符0 x3F63?”双引号字符双引号字符0 x2
9、234“a报警响铃报警响铃0 x077Ctrl+G0空空0 x000Ctrl+ddd13位八进制数所代表的字符位八进制数所代表的字符xhh12位十六进制数所代表的字符位十六进制数所代表的字符如:如:printf(“a=11n”);printf(“c=33”);输出结果为:输出结果为:a=11b=33如果不带如果不带n字符,字符,则输出:则输出:a=11c=338进制:进制:101表表A。16进制:进制:x41表表A。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110、字符串常量、字符串常量第一节第一节
10、C的数据类型及常量数据的数据类型及常量数据6/71 字符串常量字符串常量是一对双引号“”括起来的字符序列。如:“how do you do!”、“a”、“123”。C规定:在每一个字符串的结尾加一个“字符串结束标志”(为字符0),以便系统据此判断字符串是否结束。0是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是“空操作符”,即它不引起任何控制动作,也不是一个可显示字符。特别注意特别注意:用一对单引号括起来的是字符,它只占一个字节。而一对双引号“”括起来的是字符串,它占至少两个字节,在字符串结尾处有空字符0。在C语言中,没有专门的字符串变量,如果想将一个字符串存
11、放在变量中,必须使用字符型数组。a0字字 符符 串串”a”存储时占存储时占2个字节个字节a字字 符符a存储时占存储时占1个字节个字节c0字字符符串串”china”存储时占存储时占6个字节个字节hina(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-668341102 2、符号常量、符号常量第一节第一节C的数据类型及常量数据的数据类型及常量数据7/71 符号常量是指用一个标识符代表的常量,即标识符形式的常量。定义符号常量的方法是用#define#define命令把一个常量名和常量联系起来,符号常量的使用给调试程序带来
12、很大的方便。符号常量的值在其作用域内不能改变,也不能重新赋值。如:#define N 5表示N代表常量5。习惯上,符号常量名用大写,变量名用小写,以示区别。使用符号常量有如下好处:第一,含义清楚。第二,在需要改变一个常量时能做到“一改全改”。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110例例2.1:第一节第一节C的数据类型及常量数据的数据类型及常量数据8/71(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)#include#define PRICE 30ma
13、in()int num,total;num=10;total=num*PRICE;printf(“total=%dn”,total);程序运行结果为:total=300#define命令出现在程序中函数的外面,其有效范围为定义命令之后有效范围为定义命令之后到文源文件结束到文源文件结束。通常,#define命令写在文件开头,函数之前作为文件一部分,其作用域为整个文件。如例2.1。当然也可以用#undef命令终止#define的作用域。如例2.2。例例 2.2 2.2:#include#define TEMP 100main()#undef TEMPf1()TEMP的作用域课件制作:刘达明课件制作
14、:刘达明023-66834110第第2章章C语言的数据类型、运算符及其表达式语言的数据类型、运算符及其表达式-习题习题19/71C语言程序设计语言程序设计 龙昭华主编习习题题(一一)*复习本章已讲内容,预习本章剩余内容。复习本章已讲内容,预习本章剩余内容。课件制作:刘达明课件制作:刘达明023-66834110第二节第二节变量及其类型变量及其类型10/71一、一、变量及其分类变量及其分类 1 1、变量的概念、变量的概念 变量变量是指在程序运行过程中,其值可以改变的量。变量具有三要素:变量变量名名、变量值变量值、变量地址变量地址(即变量存储单元的首地址)。即一个变量应该有一个名字,在内存中占据一
15、定的存储单元,在该存储单元中存放变量的值。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)变量名实际上是一个符号地址,在对程序编译时,由系统给每个变量名分配一个内存地址。在程序中从变量中读值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。变量要先定义后使用变量要先定义后使用。变量名变量名是标识符标识符(用来标识变量、符号常量、函数名、数组名、类型名、文件名等的有效字符序列)的一种,它是由字母、数字、下划线三种字符组成的,且第3a变量名变量名变量值变量值存储单元存储单元一个字符必须为字母或下划线,其长度不要超过8个字符(MSC)或32个字符
16、(TurboC)。为了通用,建议不要超过8个字符。对于一般用来表示整数变量和临时变量的单字符变量名,由于易与数字1和0混淆,而不使用字母l和o,单字符变量一般使用i、j、k、m、n。课件制作:刘达明课件制作:刘达明023-66834110变量值:变量值:第二节第二节变量及其类型变量及其类型11/71 变量是用来存放数据的,由于数据有不同的类型,因此要定义相应类型的变量来存放它。对某变量规定数据类型,实际上是对该变量内存中存放的二进制数值按照相应数据类型的规定进行相应的值解释而已。变量地址变量地址:在C程序编译时,会根据变量的数据类型为每个变量划出一定数目的存储单元存放变量的值,变量所占据的存储
17、单元的起始地址起始地址就是变量的地址。变量的地址表示为:&变量名D199920002001 例如:char a=D;则&a就是字符变量a的地址,如右图所示:字符变量a的地址为2000,字符变量a的值就存放在2000单元中。例如:int n=108;则&n就是整型变量n的地址,如右图所示:整型变量n的地址3002,但整型变量n的值就存储在存储单元3002和3003两个字节中。1083001300230033004例如:int a,b;scanf(“%d,%d”,&a,&b);(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明0
18、23-668341102 2、变量的分类、变量的分类第二节第二节变量及其类型变量及其类型12/71根据所声明的位置不同根据所声明的位置不同,变量可分为局部变量局部变量、形式参数形式参数和全局变量全局变量。变量可以在程序中三个地方声明:函数内部、函数的参数定义中或所有的函数外部。根据变量存储类型根据变量存储类型,变量可分为自动变量自动变量(用auto声明)、静态变量静态变量(用static声明)、外部变量外部变量(用extern声明)和寄存器变量寄存器变量(用register声明)。声明变量时,如果不指定存储类型,则其缺省的存储类型为自动变量。因此,定义自动变量时不必使用auto声明。我们使用的
19、大多数变量都属于自动变量存储类型。根据数据类型根据数据类型,变量可分为整型变量整型变量(用int、long等声明)、实型变量实型变量(用float、double等声明)、字符型变量字符型变量(用char声明)、数组变量、指针型变量、结数组变量、指针型变量、结构体变量构体变量(用struct声明)、共用体变量共用体变量(用union声明)、枚举类型变量枚举类型变量(用enum声明)。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-668341103 3、变量的声明和赋值、变量的声明和赋值第二节第二节变量及其类型变量及
20、其类型13/71变量的声明方法变量的声明方法:类型名;如:inti,j,k;chara,b,c;(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)变量赋初值的方法变量赋初值的方法:如:inti=3,j;chara=A,c;j=10;c=9;注意:注意:在C语言中,要求对所有用到的变量做强制定义,也就是说“先定义,后使用”,这样做有如下好处:凡是未被事先定义的,不做变量名,保证程序中变量名不至于前后书写不一致。每一变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。指定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。如:整
21、型变量a和b可以进行求余运算:a%b,得到 a/b 的余数。但如果将a和b指定为实型变量的话,则不允许进行“求余”运算。课件制作:刘达明课件制作:刘达明023-66834110二、二、基本数据类型变量基本数据类型变量第二节第二节变量及其类型变量及其类型14/71 1 1、整型变量、整型变量 整型变量在内存中的存放形式整型变量在内存中的存放形式 数据在内存中是以二进制二进制形式存放的。整型变量整型变量是用来存放整型数据整型数据的变量,而整型数据在计算机内存中以补码形式存放补码形式存放的。(一个正数的补码和其原码相同。而负数的补码是将该值的绝对值的二进制形式,按位取反再加1。)SfS1S2S3Sn
22、符号位符号位整数的数值部分整数的数值部分当符号位sf为0时,表示该数为正数;当sf为1时,表示该数为负数。例如:inti=10,j=-10;的存储方式见图a和图b。图a表示存放示意图,图b是数据在内存中的实际存放情况。整型数为16位二进制数。10ai0bi000000000001010-10aj1bj111111111110110(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110有符号整型数据和无符号整型数据的存储:有符号整型数据和无符号整型数据的存储:第二节第二节变量及其类型变量及其类型15/71
23、有符号整数的范围-3276832767-3276832767,无符号整数的范围065535065535。无符号整数使用unsigned修饰。在声明变量时,如果不指定unsigned或指定signed,则表示有符号型数据,符号位有效。如果指定unsigned,则表示无符号型数据,符号位为该数本身。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)032767有符号整型有符号整型变量变量a:111111111111111符号位符号位165535无符号整型无符号整型变量变量c:111111111111111代表数据代表数据的第一位的第一位1-1有符号整型有符号整
24、型变量变量b:111111111111111如:如:int a,b;int a,b;a=32767;a=32767;b=-1;b=-1;unsigned int c;unsigned int c;c=65535;课件制作:刘达明课件制作:刘达明023-66834110、整型变量的分类、整型变量的分类第二节第二节变量及其类型变量及其类型16/71 有符号整型变量有符号整型变量 基本型:一般占2个字节(16位),int 短整型:一般占2个字节(16位),short int 长整型:一般占4个字节(32位),long int 有符号整型变量使用signed修饰,但缺省的数据类型即表示有符号整型数据,
25、因此可以省略修饰符signed。无符号整型变量无符号整型变量 无符号基本型:一般占2个字节(16位),unsigned int 无符号短整型:一般占2个字节(16位),unsigned short int 无符号长整型:一般占4个字节(32位),unsigned long int(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110、整型变量长度、整型变量长度第二节第二节变量及其类型变量及其类型17/71 C标准没有具体规定整型变量各类型数据所占内存字节数,只要求long型数据长度不短于int型,shor
26、t型不长于int型。具体如何实现,由各计算机系统及C系统自行决定。各种计算机的数据字长各种计算机的数据字长IBMPCVAX750IBM370HPHoneywellshortint1616161636int1632323236longint3232323236 在C系统中,通常把long定义为32位,把short定义为16位,而int可以是16位或32位,主要取决于机器字长,一般以一个机器字word存放一个int数据。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110各种整型数据在各种整型数据在C C系
27、统中的长度及取值范围系统中的长度及取值范围第二节第二节变量及其类型变量及其类型18/71 ANSI标准建议各种整型数据所占位数和数值范围如右表所示(TurboC与该表定义一致):注意注意:在微机上用long型可以得到大范围的整数,但同时会降低运算速度,因此除非不得已,不要随便使用long型数据。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)类型类型名称名称比特比特数数最小取值范围最小取值范围signedshortint有符号短有符号短整型整型16-3276832767即即-215(215-1)signedint有符号基有符号基本整型本整型16-3276
28、832767即即-215(215-1)signedlongint有符号长有符号长整型整型32-2147483648-2147483647即即-231(231-1)unsignedshortint无符号短无符号短整型整型16065535即即0(216-1)unsignedint无符号基无符号基本整型本整型16065535即即0(216-1)unsignedlongint无符号长无符号长整型整型3204294967295即即0(232-1)课件制作:刘达明课件制作:刘达明023-66834110、整型变量的定义与赋值、整型变量的定义与赋值第二节第二节变量及其类型变量及其类型19/71每个变量使用前
29、必须定义,一般放在函数的开头的声明部分定义变量。如:定义:inta,b;shorti,j;longx,y;/*定义有符号整型变量*/unsignedintc,d;unsignedshorte,f;unsignedlongs,t;赋值:a=21910;b=-20;i=-30201;j=90;x=801023;y=-203984;c=400u;d=9010;e=1002;f=2030;s=80L;t=-987L;注意注意:一个在-3276832767范围内的整数,则认为是int型,可赋给int型和long型。一个超过了-3276832767范围内的整数,而在-2147483648-21474836
30、47范围内,则认为它是long型,可以赋给long型。一个整常量后面加一个字母u,则认为是unsignedint型,如:123u。如果写成-12345u,则先将-12345转换成其补码53191,然后再按无符号数存储。如:unsignedinta=-12345u;printf(“%d,%un”,a,a);结果为:-12345,53191。一个整常数量后面加一个字母L或l,则认为是long型。这往往用于函数调用,如果函数的形参为long,则要求实参也为long型,此时用123则不行,而要用123L代入。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制
31、作:刘达明课件制作:刘达明023-66834110、整型数据的溢出、整型数据的溢出第二节第二节变量及其类型变量及其类型20/71一个int型变量的最大允许值为:32767。如果再加1,则结果会变成-32768。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)032767a:1111111111111111-32768b:000000000000000例例2.3:main()inta=32767,b;longc;b=a+1;c=(long)a+1L;printf(“a=%d,b=%d,c=%ld”,a,b,c);运行结果为:运行结果为:32767,-327
32、68,32768例例2.4:main()intx=-1;unsignedinty;y=x;printf(“%d,%d,%un”,x,y,y);运行结果为:运行结果为:-1,-1,65535无符号数输出时,最高位数值变成符号位。如符号位为1,则输出负数。课件制作:刘达明课件制作:刘达明023-668341102 2、实型变量、实型变量第二节第二节变量及其类型变量及其类型21/71 实型数据在内存中的存放形式实型数据在内存中的存放形式 存放实数存放实数的变量就是实型变量实型变量。一个实型变量在内存中是按浮点数指数形浮点数指数形式存放式存放的。系统把一个实型数据分成小数部分小数部分和指数部分指数部分
33、,分别存放。指数部分采用规范化的指数形式。常用的微机系统中一个实型数据在内存中占4个字节(32位),在这32位中,究竟用多少位来表示小数部分,多少位来表示指数部分,标准C并无规定,由各C编译系统自定。不少C编译系统以以2424位表示小数部分位表示小数部分(包括符号),以以8 8位表示指数部分位表示指数部分(包括指数的符号)。小数部分占的位(bit)数愈多,数的有效数字就越多,精度愈高。指数部分占的位数越多,则能表示的数值范围就越大。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)+.3141592+.314159*102符号符号小数部分小数部分指数指数3
34、1.4159 如实数:31.4159的指数形式为:.314159*10.314159*102 2,它在内存中的存放形式可以表示为右图所示。图中用十进制表示的,实际上在计算机中是用二进制来表示小数部分,用2的幂次来表示指数部分。课件制作:刘达明课件制作:刘达明023-66834110、实型变量的分类及其长度、实型变量的分类及其长度第二节第二节变量及其类型变量及其类型22/71 C的实型变量分为:单精度单精度(float型)、双精度双精度(double)、长双精度长双精度(long double)型三种。下表列出了微机上常用的C编译系统(如TurboC、MSC、Borland C)的实型数据的情况
35、。注意:不同的系统、不同的资料会有所差异,浮点数的内部表示与机器的硬件结构相关,是最少被计算机标准化的内容之一,对特定的编译器都应阅读其文档资料以了解float和double的精度和范围(在ANSI中的limits.h也有列示)。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)类型类型名称名称比特比特数数有效有效数字数字数值范围数值范围float单精度单精度326810-371038double双精度双精度64151610-30710308longdouble长双精长双精度度80181910-4931104932如:float是7位有效数字,floata
36、=7758.521125;a的后3位不其作用,实际上输出a=7758.520996。double有效数字为15位,也有类似问题。longdouble型有效数字为19位,用得很少,这里不作介绍。课件制作:刘达明课件制作:刘达明023-66834110、实型变量的定义与赋值、实型变量的定义与赋值第二节第二节变量及其类型变量及其类型23/71每个变量使用前必须定义,一般放在函数的开头的声明部分定义变量。如:定义:floata,b;doublei,j;longdoublex,y;赋值:a=21.910;b=-20.09832;i=-30201.09282;j=90.987760900;printf(“
37、a=%fn”,a);/*输出结果a=21.910000*/注意注意:将一个float型数据赋给double型变量,有效数字决不会丢失。而将一个double型数据赋给float型变量,就可能丢失有效数字。如:将实型常量7865.54986621116分别赋给实型变量a和b:floata;doubleb;当它赋给a时,只有前7位有效,即a=7865.549,后几位不起作用。当它赋给b时,全部有效,即b=7865.54986621116。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110、实型数据的舍入误差
38、、实型数据的舍入误差第二节第二节变量及其类型变量及其类型24/71 由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)例例2.5:main()floata,b;a=123456.789e5;b=a+20.0f;printf(“a=%fnb=%fn”,a,b);运行结果:运行结果:输出结果是a与b相等。虽然理论上b应只能保证7位有效数字,后面的数字是无意义的,并不准确地表示该数。因此应该避免将一个很大的数和一个很小的数直接相加或相减,否则
39、就会“丢失”小的数。同样,计算1.0/3.0*3.0的结果并不等于1。课件制作:刘达明课件制作:刘达明023-668341103 3、字符型变量、字符型变量第二节第二节变量及其类型变量及其类型25/71 字符型变量的存放形式字符型变量的存放形式 字符型变量用来存放字符型常量存放字符型常量。一个字符变量只能存放一个字符,要存放字符串(包括若干字符)必须声明字符数组。在所有编译系统中,都规定用一个字节来存放一个字符,或者说一个字一个字符变量在内存中占一个字节符变量在内存中占一个字节。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII码放到存储
40、单元中。因此其存储方式类似于整型变量。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)0c1=b1010010980c1=a101000197如:charc1=a,c2=b;/*a的ASCII为97b的ASCII为98*/ASCII的取值范围为0255的整型常数,其中0127为基本ASCII码,128255为扩展ASCII码。C语言规定,在0255范围内,字符型与整型数据是等价的,是可以互相转换的。如:chara=0,b=97;inti=10,j=b;课件制作:刘达明课件制作:刘达明023-66834110、字符变量的定义与赋值字符变量的定义与赋值第二节
41、第二节变量及其类型变量及其类型26/71 字符型变量加上不同的修饰符,可以定义有符号和无符号两种类型的字符型变量,其定义方式如下:char a,b,c;/*定义变量a,b,c都为有符号字符型变量*/unsigned char x,y,z;/*定义变量x,y,z都为无符号字符型变量*/由于字符在计算机中以其ASCII码方式表示,其长度为1个字节。因此有符号有符号字符型数据转换成整型数据时其取值范围为字符型数据转换成整型数据时其取值范围为-128127-128127,无符号字符型数据转换无符号字符型数据转换成整型数据时其取值范围是成整型数据时其取值范围是02550255。作为字符型本身输出时,其A
42、SCII码范围仍然是0255。也就是说,作为字符本身的定义没有必要加作为字符本身的定义没有必要加unsignedunsigned修饰符修饰符,而作为与整型数的转换则非常有必要了。字符变量的赋值:如:a=65;b=B;c=&;(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)例例2.6:main()charc1=a,c2=b;/*等价于charc1=97,c2=98;*/c1=c1-32;c2=c2-32;printf(“%d,%cn”,c1,c1);printf(“%d,%cn”,c2,c2);输出结果为:65,A66,B课件制作:刘达明课件制作:刘达明0
43、23-66834110三、三、指向基本数据类型变量的指针变量指向基本数据类型变量的指针变量第二节第二节变量及其类型变量及其类型27/71 1 1、地址和指针的概念、地址和指针的概念 在内存区中,系统对每一个存储单元(即每一个字节)都有一个编号,这个编号就是“地址地址”。如右图中的2000、2002、2004等。在地址所标志的内存单元中存放数据。如定义int i=3,j=6,k=9;三变量,每个变量占2个字节,系统编译时2000和2001两个单元分配给了变量i,因此2000和2001单元中存放数据3。在程序中,一般是通过变量名来对内存单元进行存取操作,其实程序经过编译后已经将变量名转换为变量的地
44、址变量名转换为变量的地址,对变量值的存取都是通过地址进行的对变量值的存取都是通过地址进行的。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)变量变量i=3内存用户数据区内存用户数据区2000变量变量j=6变量变量k=9变量变量i_pointer2000200220043010000010010000000000000011000000000000011000000000课件制作:刘达明课件制作:刘达明023-66834110直接访问方式:直接访问方式:第二节第二节变量及其类型变量及其类型28/71 直接访问方式直接访问方式是指按变量地址存取变量值按变量地
45、址存取变量值的方式。如读取i的值3,是根据变量名变量名与地址地址的对应关系,找到变量i的地址2000,然后从2000开始的2个字节中取出数据数据,即变量i的值3。如果输入数据时,则是将键盘输入的值送到相应地址的存储单元中。间接访问方式:间接访问方式:间接访问方式间接访问方式就是将变量的地址变量的地址存放到另一变量另一变量中。取数时,先从另一变量中找到原变量的地址,然后再从该地址中取出该变量的值。按C语言规定,可以在程序中定义整型变量、实型变量、字符型变量等,也可以定义一种特殊的变量,用它来存放地址。如:定义变量i_pointer用来存放整型变量i的地址2000,变量i_pointer被分配为3
46、010和3011两个字节的存储单元。可以通过 i_pointer=&i 将i的地址2000赋给i_pointer变量。使用间接方式取i的值就是:先找到存放“i的地址”的变量i_pointer,从中取出i的地址2000,然后到2000、2001单元中取出i的值3。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)课件制作:刘达明课件制作:刘达明023-66834110指针指针第二节第二节变量及其类型变量及其类型29/71将数值3送到变量i中,有两种方式:将3送到变量i所标志的单元中(2000和2001)。这是直接访问方式。将3送到变量i_pointer所“指
47、向”的单元中(即所标志的单元2000和2001)。所谓“指向”,就是通过地址来体现的。这是间接访问方式。由于通过地址能找到所需的变量单元,也可以说地址地址“指向指向”该变量单元该变量单元,在C语言中,形象化地称为“指针指针”,意思是通过它能找到以它为地址的内存单元。指针就是地址指针就是地址,地址就是指针。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)20002000i_pointeri30103间接访问:间接访问:2000i3直接访问:直接访问:课件制作:刘达明课件制作:刘达明023-668341102 2、变量的指针、变量的指针第二节第二节变量及其类
48、型变量及其类型30/71 一个变量的地址称为该变量的“指针指针”。如2000是变量i的指针。指针就是地址,变量的指针变量的指针就是变量的地址变量的地址。存放变量地址(即指针)的变量,就是“指针变量指针变量”,它指向另一个变量。注意:指针变量的值指针变量的值(即指针变量中存放的值)是指针指针。为了表示指针变量和它所指向的变量之间的联系,在程序中用星号中用星号“*”“*”表示表示“指向指向”。如i_pointer就是一个指针变量,它存放变量i的指针,而*i_pointer是i_pointer所指向的变量。(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)200
49、032000i_pointeri3010*i_pointer 指针是指向变量的地址,实质上指针就是存贮单元的地址。指针变量就是专门存放另一变量的的地址的变量。根据所指的变量类型不同,可以有整型指针(int*)、实型指针(float*)、字符型指针(char*)、void指针类型(void*)、结构体指针(struct*)和共用体指针(union*)等。可以看到*i_pointer也代表一个变量,它和变量i是同一回事。即赋值语句i=3;和*i_pointer=3;是等价的。课件制作:刘达明课件制作:刘达明023-668341103 3、指针变量的定义、指针变量的定义第二节第二节变量及其类型变量及
50、其类型31/71(第二章(第二章 C语言的数据类型、运算符及其表达式)语言的数据类型、运算符及其表达式)C语言规定所有变量在使用前必须指定数据类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,它是专门存放地址的,必须将它定义为“指针变量”。定义指针变量的一般形式为:数据类型名数据类型名 *指针变量名指针变量名;如:如:int i,j,*p1,*p2;int i,j,*p1,*p2;p1和p2可以指向变量i或j。p1=&i;float a,b,*p3,*p4;float a,b,*p3,*p4;p3和p4可以指向变量a或b。p3=&b;char c,*p5;char c,*p5;