




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C
语言程序设计物理与电子科学学院第2章 基本数据类型2.1数据类型介绍2.2整型数据2.3浮点型数据2.4算术运算符与算术表达式2.5赋值运算符与赋值表达式2.1数据类型介绍
数据类型反映数据的存储方式、取值范围、存储空间大小及运算方式。不同类型的数据在内存中的存储方式、取值范围、存储空间大小及运算方式是不同的。C程序中常量、变量、表达式的值和函数值等数据都有明确的类型。
几个重要的概念:
(1)数据的存储方式。
(2)数据的取值范围。
(3)数据的存储空间大小。
(4)数据的运算方式和类型转换。2.2整型数据数据类型关键字存储空间大小取值范围有符号字符型[signed]char1字节-128—127(-27——27-1)无符号字符型unsignedchar1字节0—255(0—28-1)有符号短整型[signed]short[int]2字节-32768—32767(-215——215-1)无符号短整型unsignedshort[int]2字节0—65535(0—216-1)有符号基本整型[signed]int4字节-231——231-1无符号基本整型unsignedint4字节0—232-1有符号长整型[signed]long[int]4字节-231—231-1无符号长整型unsignedlong[int]4字节0—232-1有符号双长整型[signed]longlong[int]8字节-263—263-1无符号双长整型unsignedlonglong[int]8字节0—264-1注:VC系统不支持这两种类型的数据整型型数据类型分类整型数据存储方式无符号整型数据在内存中以其二进制数形式存放,只能存放0和正整数。有符号整型数据在内存中以二进制补码的形式存放,最高位为符号位,可以存放负整数、0和正整数。存储空间大小和有无符号决定整型数据的取值范围。正整数的补码为其二进制数,负整数求补码的步骤:(1)先取该数的绝对值; (2)然后以二进制形式表示; (3)再对其按位取反; (4)然后加1。 例如:-10取补码过程(以4字节为例)(1)先取该数的绝对值10(2)然后以二进制形式表示00000000000000000000000000001010(3)再对其取反;11111111111111111111111111110101(4)然后加1。11111111111111111111111111110110例如:内存中存储形式如下,以4字节为例,若按有符号方式存储,求该数大小(换算为十进制数):11111111111111111111111111111111(1)先减111111111111111111111111111111110(2)再按位取反00000000000000000000000000000001(3)再换算为十进制数1(4)再加负号-1整型常量1.整型常量的三种进制
(1)十进制。如123,-123
(2)八进制,以0开头。如0123,-0123
(3)十六进制,以0x或0X开头,如0x123,-0x123
补充知识:二进制、八进制、十六进制和十进制之间的相互转换。2.整型常量类型的确定
(1)默认原则——按照数值所在范围确定类型
在VC系统中,int型数据和long型数据的字节数和取值范围相同。当一个整数的值在十进制数范围(-215—215-1
)之内,一般被看成int型(有符号)或long型(有符号),在内存中占4个字节。超过这个范围,一般被看成longlong型(有符号),在内存中占8个字节。
(2)后缀字母标识
用l或L表示long型。如123L(long型)
用ll或LL表示longlong型。(注:VC系统不支持longlong型)
用u或U表示unsigned型,如123u(unsignedint型)字符型常量
1.字符型常量的表示
(1)对于可打印字符,除单引号和反斜杠字符外,均可用一对单引号括起来直接使用。
如:'a'、'0'等
(2)所有字符均可用转义字符表示。用转义字符形式来表示字符常量也必须用一对单引号括起来。
如:'\n'、'\141'、'\x61'等
注:ASCII码表参考教材附录C(307页)字符形式含义ASCII代码\n\t\b\r\f\a\\\’\”\ddd\xhh换行,将当前位置移到下一行开头水平制表(跳到下一个Tab位置)退格,将当前位置移到前一列回车,将当前位置移到本行开头换页,将当前位置移到下页开头发出铃声代表一个反斜杠字符\代表一个单撇号字符’
代表一个双撇号字符”1-3位八进制数代表的字符1-2位十六进制数代表的字符1098131279239342.字符型常量在内存中的存储方式
字符型常量在内存中以其ASCII码值的二进制数表示,VC系统将字符型常量看成int型,在内存中占4个字节。
例如:'a'、'\141'、'\x61'、97、0141、0x61在VC系统中没有任何区别,均为int型常量,只是书写方式不同而已。其在内存中的存储形式均为:00000000000000000000000001100001
因此,字符型常量本质上就是整型常量。字符串常量
1.字符串常量的表示
用一对双引号扩去来的零个和多个字符序列即可表示字符串常量。字符序列可以是普通字符或转义字符。字符串中的每个字符均不可再用单引号括起来,但转义字符的反斜杠不可丢失。
如:""、""、"a"、"hello"、"WelcometoC!\n"等。双引号内无字符双引号内为空格字符
2.字符串常量在内存中的存储方式字符串中的字符数称为该字符串的长度,字符串常量在内存中存储时,每个字符占1个字节,根据字符串长度可以确定存储空间大小。另外,字符串常量在存储时系统自动在字符串的末尾加一个字符串结束标志,该结束标志位转义字符'\0',它在内存中占1个字节,其ASCII码值为0,含义为“空操作”,即不产生任何动作,只起到标志作用。如"a"在内存中占2个字节,存放形式为:0110000100000000整型数据格式输出
1.printf函数的基本格式intprintf(格式控制字符串,输出表达式1,输出表达式2,……)
(1)关于格式控制字符串
普通字符→原样输出
转义字符→根据转义字符含义执行相应的输出
格式说明字段→与输出表达式一一对应,按照该格式对输出表达式的数值进行转换并输出。
格式说明字段详细介绍参见教材43-47页(2)关于整型数据的格式说明字段%d或%i:带符号的十进制形式输出%u:无符号的十进制形式输出%o:无符号的八进制形式输出%x或%X:无符号的十六进制形式输出%c:字符形式输出前缀修饰:-(左对齐)域宽修饰:n(n为正整数),当n小于数字位数时不受域宽约束。(3)关于输出表达式输出表达式可以使常量、变量或表达式,输出时计算顺序是从右到左。格式说明字段应与输出表达式值的类型保持一致。2.例:以下程序段输出结果inta=97;charb='a';printf("%d,%o,%x,%c\n",a,a,a,a);printf("%d,%o,%x,%c\n",b,b,b,b);printf("%a=%1d\n",a);printf("%a=%5d\n",a);printf("%a=%-5d\n",a);整型数据格式输入
1.scanf函数的基本格式intscanf(格式控制字符串,地址1,地址2,……)(1)关于地址参数地质参数一般用求地址运算符“&”对变量运算得到的。(2)关于整型数据的格式说明字段
%d:输入带符号的十进制数(3)数值数据流的分割默认分割:空格、Tab键分割、回车键分割;字符分割:根据格式字符串要求。2.例:以下程序段输出结果inta,b;scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);scanf("a=%d,b=%d",&a,&b);printf("a=%d,b=%d\n",a,b);整型变量(含字符型变量)
1.整型变量的定义
整型变量必须先定义后使用,定义整型变量时必须制定类型和变量名,系统在内存中为该变量分配一定大小的存储空间。整型变量值的取值范围和存储方式由变量类型决定。变量类型一旦确定即不可更改。2.整型变量赋值类型转换
将不同于变量类型的数据赋给变量时,系统根据变量类型对该数据进行转换。转换时可能会改变存储方式或丢失数据。
3.常见的整型变量赋值类型转换(1)将有符号的整型数据赋给无符号整型变量转换方式:将有符号的数据按照无符号数据存储方式存储并赋值。如:unsignedinti;i=-10;printf("i=%u\n",i);输出结果为:i=4294967286因为-10在内存中形式为:11111111111111111111111111110110按照无符号数据存储方式存储,该数值即为4294967286。
(2)将超过整型变量范围的整型数据赋给整型变量
转换方式:根据整型变量的字节数将该整型数据在内存中存储的二进制数的低字节数值赋给整型变量。
如:chari;i=257;printf("i=%d\n",i);
输出结果为:i=1
因为257在内存中形式为:00000000000000000000000100000001
而char型变量i在内存中只占1个字节,因此将低字节的8位二进制数00000001赋给i,i的值即为1。再如:unsignedchari;i=-257;printf("i=%u\n",i);输出结果为:i=255因为-257在内存中形式为:11111111111111111111111011111111而unsignedchar型变量i在内存中只占1个字节,因此将低字节的8位二进制数11111111赋给i,i的值即为255。(3)将实数赋给整型变量转换方式:现将该实数的小数部分去掉取整后,再根据前面的两条规则转换赋值。如:inti;i=10.8;printf("i=%d\n",i);输出结果为:i=10再如:unsignedinti;i=-10.8;printf("i=%u\n",i);输出结果为:i=4294967286
(4)使用规则:整型变量在定义的时候一定要考虑到可能的取值范围和符号,避免类型不匹配强行赋值导致的数据丢失或错误,整型变量可以在定义的同时赋值(初始化)。
2.3浮点型数据数据类型关键字存储空间大小取值范围单精度浮点型float4字节|3.4e-38|~|3.4e+38|双精度浮点型double8字节|1.7e-308|~|1.7e+308|长双精度浮点型longdouble10字节|1.2e-4932|~|1.2e+4932|浮点型数据类型分类浮点型数据存储方式浮点型数据在浮点型是存放,存储空间大小由类型决定。其中有符号位占1位,数字部分(尾数)和指数(阶码)所占位数由类型决定。符号位尾数位阶码位浮点型数据有效数字和精度数据类型关键字有效数字和精度单精度浮点型float大约7位十进制数,7位精度双精度浮点型double16或17位十进制数,7位精度长双精度浮点型longdouble18位十进制数,7位精度注:VC系统不支持这种类型的数据浮点型常量1.浮点型常量类型C语言中,所有浮点型常量默认为double型。若在数字后加后缀f或F则为float型,加后缀l或L则为double型。2.浮点型常量的表示(1)小数形式必须有小数点。如:3.143.0.0(2)指数形式e或E前面必须有数字,e或E后面必须为整数。如:3e2(=300.0)-3.14E-2(=0.0314)浮点型数据格式输出1.浮点型数据的格式说明字段%f:小数形式输出十进制数,小数点后默认保留6位%e或%E:以科学计数法输出十进制数,输出结果e或E前面的数小数点后默认保留6位前缀修饰:-(左对齐)域宽修饰:m.n(m和n均为正整数),m表示输出域宽,n表示小数点后数字位数。数值宽度大于域宽m时不受其约束。但小数点后的数字受域宽n约束,小数位按保留n位后的数字四舍五入。2.例:以下程序段输出结果floata=3.14;doubleb=-3.14e-2;printf("a=%f\n",a);printf("b=%f\n",b);printf("a=%e\n",a);printf("b=%e\n",b);printf("a=%15.2f\n",a);printf("a=%-15.2f\n",a);printf("a=%15.2e\n",a);printf("a=%-15.2e\n",a);浮点型数据格式输入1.浮点型数据的格式说明字段%f:给float型变量输入带符号的十进制实数%lf:给double型变量输入带符号的十进制实数2.输入的浮点型数据可以是小数形式或指数形式浮点型变量1.浮点型变量的定义和初始化2.浮点型变量赋值类型转换(1)将整型数据赋给浮点型变量,系统自动将整型数据的存储方式变为浮点型存储方式。(2)将double型数据赋给float型变量,系统会警告但能正常运行,但可能会丢失数据精度。2.4算术运算符与算术表达式运算符名称运算对象功能优先级*乘任何两个实数或整数求两数之积3/除任何实数或整数,但右操作数不可为0求两数之商3%模两个整数,但右操作数不可为0求整除的余数3+加任何两个实数或整数求两数之和4-减任何两个实数或整数求两数之差4++自增变量变量值增加12--自减变量变量值减少12算术运算符分类(1)两个整数相除的结果为整数。如5/3的结果值为1,舍去小数部分。(2)如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2。(3)VC++采取“向零取整”的方法。如5/3=1,-5/3=-1,取整后向零靠拢。(4)%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如8%3,结果为2。(5)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。几点说明算术表达式值的类型算术表达式值的类型由运算对象决定。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论