2.1C的数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值第2章数据类型、运算符与表达式2.7各类数值型数据间的混合运算2.8算术运算符和算术表达式2.9赋值运算符和赋值表达式2.10逗号运算符和逗号表达式习题第2章数据类型、运算符与表达式第2章数据类型、运算符与表达式为了方便地表示这些不同种类的数据,C语言提供了丰富的数据类型。在实际问题中,可能会遇到各种各样的数据。这些数据都以某种特定的形式存在着。年龄:22工资:2381.85姓名:HusseinSadam整数实数字符串标识符在C语言中,变量名、符号常量名、函数名等统称为标识符。C语言规定,标识符只能由字母、数字和下划线组成,且第一个字符只能是字母或下划线。下列是合法的标识符,可以充当变量名等。sum,student_name,_part_1但是,下面这些标识符不合法,Mr.Wang,ab,1_2_3①大小写敏感,sum,Sum,SUM是3个不同的标识符。②关键字不能作为标识符。③ANSIC未规定标识符的最大长度,TC最多允许32个字符。④应尽量做到“见名知意”。关于标识符应注意以下方面:C的数据类型数据类型数据所占空间的大小和存储格式有数据类型来决定,因此必须为出现在程序中的所有数据指定数据类型。由于C语言把程序中的数据又分为变量和常量两大类,因此,不论是常量数据还是变量数据,都要指定数据类型。空类型指针类型共用体结构体数组构造类型双精度型单精度型实型(浮点型)字符型短整型长整型基本整型整型基本类型C语言根据什么把数据分为变量和常量?2.2常量与变量在程序执行过程中其值可以改变的量称为变量。在程序执行过程中,其值不能被改变的量称为常量。……inta;floatb;a=-90;b=3.14*2.1;……变量变量常量常量字面值常量计算机处理的数据都要存储,存储就要有空间。如果这个空间中的数据不能被修改,这个空间就称为常量空间,简称常量。所谓字面值常量,就是一种常量空间的名称.特点:它由常量值和表示该数值类型的后缀字符或界限符组成。52388L是长整型字面量,其中52388是常量值,L是代表长整型的后缀。3.1416F是单浮点型字面量,其中3.1416是常量值,F是代表单浮点型的后缀;‘A’是字符型字面量,A是常量值,单引号是定界符;普通整型和双浮点型的字面量没有表示类型的后缀,它们是默认的,例如:345是普通整型字面量,3.1416是双浮点型字面量。有了字面常常量的概念,我们就可以严格地说明赋值操作符“=”两边的含义:从右边的名称所表示的空间中读取数据,存储到左边的名称所表示的空间中。示例2.5符号常量如果在程序中某处定义了符号常量(以PI为例),从此往后,本文件中凡是出现PI的地方都代表3.14;……#definePI3.14#defineSNO1001……L=2*PI*1.5;……s=PI*0.6*0.6;…………#define符号名常量值符号常量符号常量file1.c所谓符号常量,就是用符号代表的一个常量。符号常量的定义方式为:为什么要用符号来表示一个常量呢?这样做有什么好处?PI可以和常量3.14一样参加运算.符号常量在程序中,适当使用符号常量的好处在于:①能起到“见名知意”的作用,比直接写个常量直观。②能做到“一改全改”。关于符号常量再强调以下几点:①符号常量名习惯上常用大写;②符号常量是常量而不是变量,不允许用赋值运算等改变它的值。……#definePI3.14#defineSNO1001……L=2*PI*1.5;……s=PI*0.6*0.6;…………变量每个计算机上都要有内存,程序只有装入到内存中,才可能被执行。①从逻辑上看,内存是由一个个的字节构成的。内存201202203204205206207内存地址②每个字节都有唯一的内存地址。③每个字节可以容纳8位二进制数。二进制位变量所谓变量,就是在程序执行过程中,其值可以被改变的量。通俗地讲,变量就像高档饭店的房间,这体现在以下几个方面:对某个房间来说,一拨客人走后,另一拨客人可以进来,虽然房间不变,但里头吃饭的人在变。在C程序中,变量就是建立在内存里的房间,它用来存储不断变化的信息。存放在变量中的信息称为变量值。为了区分不同的房间,人们为每个房间起一个名字,比如百合厅、玫瑰厅等。每个变量也有变量名。房间有大小、档次之分。变量有类型之分,变量的数据类型决定了可以容纳的信息种类,也决定了所占单元的大小。每个房间有自己的房间号,而且房间名与房间号有对应关系。每个变量有自己的存储地址,而且变量名与存储地址有对应关系。总之,变量具有名字、类型、值、地址等属性。如果需要一个变量空间,一般需要通过定义来要求系统分配,定义时要指出变量(空间)的类型,并给出变量(空间)的名称,也称变量(空间)标识符。这个名称由用户指定,但要符合命名规则。通过变量名读写变量空间数据的方式称为直接引用方式。变量定义的格式为:数据类型标识符变量名;例如:intm,n;//定义两个普通整型变量m和nfloatx;//定义一个单精度浮点实型变量xcharch;//定义一个字符型变量ch运用赋值操作符“=”可以给变量赋值:m=70;x=3.14;ch='A';利用取址操作符“&”可以得到变量(空间)地址格式:&变量名利用操作符“sizeof”可以计算变量空间大小。格式:sizeof(变量名)或sizeof变量名或sizeof(类型指示符)变量下面结合例子来理解变量的这些属性。#includestdio.hvoidmain(){inta;a=10;a=a*2;printf(”a=%d\n”,a);}在C程序中,变量都是先定义、后使用的。定义变量的格式为:数据类型变量名;对于程序中定义的每个变量,TC会根据变量的数据类型,为它分配一定大小的存储单元。与此同时,也在变量名与变量的内存地址之间建立了对应关系。该赋值语句会把10存放到变量a中,于是a的值变为了10。实现过程:首先通过变量名找到相应的内存地址,再把数据写入相应的存储单元里。主函数框架C语言程序的基本形式是一个主函数框架:main(){一组程序语句}或者voidmain(){一组程序语句}intmain(){一组程序语句return(0);}变量初始化变量可以在定义的同时赋值,称为初始化:intm=70;//初始化变量初始化与赋初值是不同的:初始化是在变量定义的同时赋值,赋初值是指变量定义之后的第一次赋值。初始化等于赋初值,但是赋初值不等于初始化。下面的例子是赋初值,但不是初始化:intm,n;m=70;//给m赋初值n=m;//给n赋初值文件包含命令#includestdio.h是文件包含命令,stdio.h是库文件,含有包括系统函数printf在内的输入输出函数的原型。如果不包含这个命令而调用printf函数,系统视为非法。系统报错:'printf‘undefined(printf没有定义)格式输出函数printf系统函数printf的功能是按照指定的格式在显示器上输出。一般形式为:printf(格式控制字符串,输出参数1,输出参数2,……);举例说明:printf(%d,%d,%f,%c\n,m,n,x,ch);;m、n、x、ch分别为输出参数1~4。“%d,%d,%f,%c\n”是格式控制字符串,它由两部分组成:格式分隔符和格式说明符。格式说明符由“%”加一个格式描述符组成,用以指定对应输出参数的类型和输出格式:格式说明符与对应的输出参数在类型上要一致。示例:2.12.2整型数据下面来学习整型数据在C程序中的表示方法。先来复习一下数制和数制之间的转换。平时我们遇到的整数都是十进制形式的,在计算机科学中,还会用到二进制、八进制以及十六进制表示的整数。数制特点转换为十进制十进制每个数位只可能是0~9而且逢10进1。123=1*102+2*101+3*100八进制每个数位只可能是0~7而且逢8进1。(123)8=1*82+2*81+3*80=83十六进制每个数位只可能是0~9、a~f,而且逢16进1。(123)16=1*162+2*161+3*160=291二进制每个数位只可能是0、1而且逢2进1。(1101)2=1*23+1*22+0*21+1*20=13知识补充:各种进位制数之间的转换各种进制数的关系23=824=16各种进位制数之间的转换1.十进制数转换成r进制数转换规则整数部分:除r取余,将余数从下往上取出来。小数部分:乘r取整,将取整的结果按顺序取。1.十进制数转换成r进制数例:(23)10=(10111)2例:(23)10=(27)8练习:将十进制数(123.8125)10转换成二进制数,八进制数,十六进制数练习:将十进制数(123.8125)10转换成二进制数,八进制数,十六进制数(123.8125)10=(1111011.1101)2=(173.64)8=(7B.D)162.r进制数转换成十进制数转换规则:按权展开相加法例:(10111.1011)2=(23.6875)10(10111.1011)2=1×24+0×23+1×22+1×21+1×20+1×2-1+0×2-2+1×2-3+1×2-4=1×16+0×8+1×4+1×2+1×1+1×0.5+0×0.25+1×0.125+1×0.0625=16+4+2+1+0.5+0.125+0.0625=(23.6875)10例:(27.54)8=(23.6875)10(27.54)8=2×81+7×80+5×8-1+4×8-2=2×8+7×1+5×0.125+4×0.015625=16+7+0.625+0.0625=(23.6875)10练习:将下列二进制数、八进制数、十六进制数转换成十进制数:(1011.101)2(123.45)8(3AF.4C)16练习:将下列二进制数、八进制数、十六进制数转换成十进制数:(1011.101)2=(11.625)10(123.45)8=(83.578125)10(3AF.4C)16=(943.296875)10整数从右向左小数从左向右二进制十六进制二进制八进制一位拆三位一位拆四位三位并一位四位并一位各种进制数的关系:23=824=16二进制000001010011100101110111八进制01234567二进制与八进制对照表:二进制与十六进制对照表:二进制00000001001000110100010101100111十六进制01234567二进制10001001101010111100110111101111十六进制89ABCDEF3.二进制数与八进制数的转换二进制数转换成八进制数整数:从右向左,每3位分一组.小数:从左向右,每3位分一组,最后一组若不足3位,在该组后面补相应数量的0,凑成3位.再将每组按二进制数向十进制数转换的方法进行转换.例:(10110101.1011)2=(265.54)8分组为10,110,101.101,100,转换结果为(265.54)8八进制数转换成二进制数分别将每一位八进制数转换成3位二进制数.例:(265.54)8=(10110101.101100)24.二进制数与十六进制数的转换二进制数转换成十六进制数整数:先将二进制整数从右向左每隔4位分一组.小数:先将二进制小数从左向右每隔4位分一组,最后一组若不足4位,在该组后面补相应数量的0,凑成4位.将每组转换成十六进制数.例:(10110101.1101101)2=(B5.DA)16先将10110101.1101101分组为1011,010.1101,1010十六进制数转换成二进制数分别将每一位十六进制数转换成4位二进制数.例:(B5.DA)16=(10110101.11011010)25.八进制数与十六进制数的转换八进制数转换成十六进制数将每一位八进制数转换成3位二进制数;再按二进制数向十六进制数