第5章数据类型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章基本数据类型与运算本章要点C语言的功能之所以如此强大,是因为c语言中有丰富的数据类型和运算符,这也是本章主要内容,属于本书的重点和基础。通过本章的学习,应当掌握:五种类型的常量的使用;三种类型的变量所占内存单元的大小以及它们的定义、初始化和应用;八类运算符和相应表达式的书写、优先级以及结合方向。目录5.1数据类型概述5.2常量5.3变量5.4运算符与表达式5.5运算符的优先级和结合性5.6数据类型的转换5.1数据类型概述数据类型属于数据结构问题。不同的数据类型所占用的内存空间不同,适合于描述不同的问题。C语言中提供了丰富的数据类型:短整型(short)基本整型(int)长整型(long)整型单精度型(float)双精度型(double)实型(浮点型)数值型字符型(char)枚举型(enum)基本类型构造类型数组类型结构类型(struct)共用类型(union)文件类型(FILE)指针类型空类型(void)C语言数据类型5.2常量定义:程序运行期间一直保持不变的量。通常是一个常数或者字符、字符串。根据数据类型的不同分为以下几种常量。整型常量实型常量字符常量字符串常量符号常量直接常量1.整型常量定义:即整型常数,整数。C语言中有三种形式的表示整型常量的方法:十进制数:非0开头例如50,-365,153,0等八进制数:以0开头例如016,0165等十六进制数:以0x开头例如0x336,0x2af等分配内存大小:大小介于-32768-32767之间的分配2B;在此范围之外则分配4B。注意:十进制常量可以有正负之分;但八进制和十进制常量只能表示无符号的整数。应用:参与表达式的运算,作为赋给变量的值。关于整型常量的类型匹配规则:将一个整型常量赋给一个整型变量时,其数据类型的匹配规则为:一个整型常量,可以赋给能容纳下其值的整型变量。例如,其值在-215~215-1范围内的整型常量,可以赋给int型变量和longint型变量;其值在-231~231-1范围内的整型常量,就只能赋给longint型变量。注意:常量无unsigned型,但一个非负整型常量,只要它的值不超过相应变量的值域(即取值范围),也可以赋给unsigned型变量。2.实型常量定义:又称为浮点数,可以表示各种小数。表示形式:(1)十进制形式。由数字和小数点组成,例如,3.14159,9.8,-5.567等。(2)指数形式。一般格式为:尾数E(e)整型指数。例如,3.05E+5,-1.2342e-5等。用指数形式表示实型数据时,在C语言中有如下语法规定:(1)字母e或E之前必须要有数字。(2)字母e或E之后的指数必须为整型。(3)在字母e或E的前后以及数字之间不得插入空格。例如,e6、-2.432E0.5、5.23455e(3+6)、.e5、2.543543E13等都是不合法的指数形式。分配内存:默认分配8字节,即当作double类型常量处理。实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。如:floata,b=3.13145;doublex,y=-4.6456;应用:参与表达式的运算,作为赋给变量的值。3.字符常量定义:用单引号括起来的一个字符就是字符常量。注意区分大小写。转义字符:“\”后面跟一些特殊字符或ascii码值得字符表示方式称为转义字符。注意:程序中适当的使用转义字符可以方便的输出一些控制字符(如:回车、换行等)。1.\n换行(光标移动到下一行的开头)2.\r回车(不换行,回到本行第一列)3.\b退格(光标从当前位置前移一列)4.\t横向跳格(水平制表符,跳8格)5.\v竖向跳格(垂直制表符)6.\f走纸换页(移到下一页的开头)7.\\输出“\”字符8.\’单引号字符9.\ddd1到3位8进制数所代表的字符,如\101,即为A.10.\xhh1到2位16进制所代表的字符11.\a响铃注:转义字符的含义分配内存:一个字符常量占用一个字节内存。应用:参与表达式的运算,作为赋给变量的值。【例】转义字符的输出。/*程序功能:用转义字符输出可打印字符和不可打印字符*/main(){printf(\x4F\x4B\x21\n);/*等价于printf(OK!\n);*/printf(\101\x08\n);}程序运行结果如下:OK!Ab4.字符串常量定义:用双引号括起来的多个字符序列。字符串中所含字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为(一对紧连的双引号)。例如:“Howdoyoudo”、“Goodmorning”等都是字符串常量,其长度分别为14和13(空格也是一个字符)。如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:C:\msdos\v6.22应表示为C:\\msdos\\v6.22;Isay:“Goodbye!应表示为Isay:\Goodbye!\。字符串的存储C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个\0作为字符串的结束标志。注意:在源程序中书写字符串常量时,不必加结束字符\0,系统会自动加上。如果有一个字符串为CHINA,则它在内存中的实际存储为CHINA\0最后一个字符\0是系统自动加上的。字符常量A('A')与字符串常量A(A)的区别:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号。(2)长度不同:字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志\0。应用:参与表达式的运算,作为赋给数组的值。5.符号常量定义:用标识符去代替某一个具体的常量,以后程序中需要此常量的地方都可以用标识符代替。优点:含义清楚易于实现常量数值的修改书写规定:习惯上使用大写字母来表示符号常量。例:#definePAI3.1415926main(){floatrand,total;printf(“pleaseinputrand:”);scanf(“%f”,&rand);total=2*PAI*rand;printf(“tatal=%f”,total);}5.3变量定义:在程序中值可以被改变的量称为变量。一个变量用一个标识符来表示,对应内存中若干个存储单元。组成变量的两个基本要素:变量名变量值5变量名变量值存储单元a1.变量的命名规则(区分大小写);2.变量必须遵循“先定义,后使用”的原则;数据类型变量名1,变量名2,…;例如:inta,b,c;floatx,y;charch;3.变量在定义时必须指定数据类型,但可以在定义时赋初值(初始化),也可以在定义后的程序中赋初值。数据类型变量名1[=初值1],变量名2[=初值2],…;例如:inta=5,b=3;inta,b,c;a=b=c=3;一.变量的相关规定:二.各种类型的变量的定义和初始化1.整型变量:1)整型变量的分类及类型标识符(在turboc中):类型定义类型符位数数值范围有符号基本整型[signed]int16位-215~215-1无符号基本整型unsigned[int]16位0~216-1有符号短整型short16位-215~215-1无符号短整型unsignedshort16位0~216-1有符号长整型long32位-231~231-1无符号长整型unsignedlong32位0~232-12)整型变量的定义和初始化:例如:inta=5,b=3;inta,b,c;a=b=c=3;注意:定义位置有两种程序的开头函数体中3)整型变量值在内存中的存放:根据数据类型,系统会分配相应大小的内存单元存放一个整数。按照定点整数的方式存放。例:main(){inta,b,c,d;unsignedu;a=5;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d”,c,d);}inta,b,c,d;main(){unsignedu;a=5;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d”,c,d);}4)整型变量值的溢出问题:当赋给变量的值超出了变量所能表示的范围时,就会发生变量值的溢出问题。程序中出现了溢出问题并不会报错,但造成程序运行结果的不正确,所以我们为了避免溢出问题的发生,首先必须了解溢出的有关概念。例如:inta,b;a=32767;a=a+2;整型变量的小结在turboc中,int类型和shortint类型所占用的内存空间相同,故表示的范围也相同;一个整型常量后加上字母u或U,系统认为是一个unsignedint类型;如果加上l或L,则认为是longint类型的常量。2.实型变量1)实型变量的分类及类型标识符:单精度:float,4字节,7位有效数字双精度:double,8字节,15~16位有效数字长双精度:longdouble,16字节,18~19位有效数字2)实型变量的定义和初始化:例如:floatx;x=888888.8;或者doubley=53.456478;2)实型变量值在内存中的存放方式:按照计算机内数据的浮点表示方法存储。如:在turboc中,实型数据的存储方式为:阶符阶码数符数码123173)实型数据的舍入误差:应当避免将一个很大的数和一个很小的数直接相加或相减,因为这样做会“丢失”较小的数,得不到正确结果。例:main(){floatx,y;x=53456.789e5;y=x+20;printf(“%f”,y);}试着比较理论值和实际运算结果。分析原因并寻找解决方案。3.字符变量1)字符型变量的类型标识符:字符变量的类型关键字为char,占1字节内存单元。2)变量值的存储字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号正数)存储到内存单元中。例如:charch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1='a';ch2='b';/*给字符变量赋值*/小写字母a、b的ASCII码值分别为97、98。在内存中,字符变量ch1、ch2的值如图2-2所示。9798ch1ch2(a)01100001ch1ch2(b)01100010图2-2字符变量ch1、ch2在内存中的存储(a)十进制形式;(b)二进制形式4)字符型和整型之间的相通性:字符数据在内存中存储的是字符的ASCII码值——一个无符号整数,其形式与整数的存储形式一样(如图2-2所示),所以C语言允许字符型数据与整型数据之间通用。(1)一个字符型数据,既可以以字符形式输出,也可以以整数形式输出。(2)允许对字符数据进行算术运算,也就是对它们的ASCII码值进行算术运算。也可以进行字符数据和数值数据的混合运算。(3)整型变量可以接受字符常量,反之,字符变量也可以接受整型常量。例:字符变量的字符形式输出和整数形式输出。/*程序功能:用字符形式和整数形式输出字符变量*/main(){charch1,ch2;ch1='A';ch2='a';printf(ch1=%c,ch2=%c\n,ch1,ch2);printf(ch1=%d,ch2=%d\n,ch1,ch2);}程序运行结果:ch1=A,ch2=ach1=65,ch2=97例:字符数据的算术运算。/*程序功能:字符数据的算术运算*/main(){charch1,ch2;ch1='a';ch2='B';/*字母的大小写转换:小写字母-32→大写,大写字母+32→小写*/printf(ch1=%c,ch2=%c\n,ch1-32,ch2+32);/*用字符形式输出一个大于256的数值*/printf(ch1+200=%d\n,ch1+200);printf(ch1+200=%c\n,ch1+200);printf(ch1+256=%d\n,ch1+256);printf(ch1+256=%c\

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功