1、第二章第二章 C C语言基础语言基础本章内容本章内容赋值表达式赋值表达式4C C语言的数据类型语言的数据类型1标识符、常量与变量标识符、常量与变量2算术表达式算术表达式3自加、自减运算符自加、自减运算符5逗号运算符和逗号运算符和sizeofsizeof运算符运算符62.1 数据类型数据类型数据类型数据类型基本类型基本类型(简单)(简单)指针类型指针类型 构造类型构造类型空类型空类型整型整型实型实型字符型字符型单精度型单精度型双精度型双精度型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型标准类型标准类型用户自定义类型用户自定义类型标识符标识符 Contents Cont
2、ents非法标识符非法标识符3d,no 1,xk#1合法标识符合法标识符 num,a8,no_1标识符:标识符:以字母或下划线开头,由字母、数字、以字母或下划线开头,由字母、数字、下划线组成的字符序列。长度可以无穷大。下划线组成的字符序列。长度可以无穷大。关键字不能作为用户标识符。如关键字不能作为用户标识符。如do,int,if 等。等。3大小写区分。如大小写区分。如book Book 是两个不同的标识符。是两个不同的标识符。1标识符尽量标识符尽量“见名知意见名知意”。如。如average,sum等。等。2常量常量v常量常量:其值不会发生改变的量,称为常量。它们可:其值不会发生改变的量,称为常
3、量。它们可以和数据类型接合起来分类。比如:整形常量,浮以和数据类型接合起来分类。比如:整形常量,浮点型常量,字符常量等等。在内存中分配一片空间点型常量,字符常量等等。在内存中分配一片空间存储常量值。存储常量值。常量分类:常量又分为常量分类:常量又分为直接常量直接常量和和符号常量符号常量。直接常量:又叫字面常量。如直接常量:又叫字面常量。如12,0,4.6,a,”abcd”符号常量:用符号常量:用标识符标识符表示一个常量,通常用大写字母表示。表示一个常量,通常用大写字母表示。符号常量必须在程序开头符号常量必须在程序开头先先定义后使用定义后使用。定义形式:定义形式:#define 符号常量名符号常
4、量名 常量表达式。常量表达式。如:如:#define PI 3.1415926 整型常量整型常量vC语言允许使用语言允许使用十进制、八进制、十六进制十进制、八进制、十六进制 表示表示整型常量。整型常量。C语言规定:以语言规定:以0开头的常量为八进制常量开头的常量为八进制常量 以以0X开头的常量为十六进制常量开头的常量为十六进制常量 如:如:123,-24 为十进制整数为十进制整数 0234,054 为八进制整数为八进制整数 0X234,0X54为十六进制整数为十六进制整数整型常量整型常量v基本整数:基本整数:最高位为符号位。最高位为符号位。v长整型数:长整型数:最高位为符号位。表示方法为:最高
5、位为符号位。表示方法为:135L v无符号整数:无符号整数:所有二进制位都为数值位,即无所有二进制位都为数值位,即无符号位。表示方法为:符号位。表示方法为:246U,066u 实型常量实型常量v实型数只有十进制表示形式。细分为小数形式和实型数只有十进制表示形式。细分为小数形式和指数形式。指数形式。小数形式:小数形式:由数字和小数点组成(必须有小数点,但小数由数字和小数点组成(必须有小数点,但小数点前后的点前后的0可以省略)可以省略)例如:例如:0.246 .246 5.0 5.等。等。指数形式:指数形式:由尾数、字母由尾数、字母E或或e及指数部分组成。其格式为:及指数部分组成。其格式为:整数部
6、分整数部分.小数部分小数部分E指数部分指数部分 例如:例如:135e3 124e-2 12.12e-5 .123e4 0e0 错误的表示:错误的表示:e2 3.5e1.5 .e 变量变量v变量变量:在程序执行过程中其值发生变化的量。在程序执行过程中其值发生变化的量。int i;int i;格式:格式:存储类型存储类型 数据类型关键词数据类型关键词 变量列表变量列表int i,j;int i,j;每个变量都有自己唯一的内存空间每个变量都有自己唯一的内存空间变量变量某片内存空间的地址即该区域最左侧起点位置的某片内存空间的地址即该区域最左侧起点位置的编号。编号。数据类型决定分配多少个连续的存储空间数
7、据类型决定分配多少个连续的存储空间。向存储空间写入值时,将值转换为二进制形式,二向存储空间写入值时,将值转换为二进制形式,二进制数值位的数量与存储空间的位数量相同,即写进制数值位的数量与存储空间的位数量相同,即写入值会充满整个存储空间。入值会充满整个存储空间。变量将会存储值。变量将会存储值。每新创建一个变量就要给它分配一片独有的内存存储每新创建一个变量就要给它分配一片独有的内存存储空间。空间。问题问题1:变量的作用?:变量的作用?问题问题2:如何存储值?:如何存储值?问题问题3:如何决定分配的空间大小?:如何决定分配的空间大小?问题问题4:如何找到分配的空间?:如何找到分配的空间?问题问题5:
8、存储空间的地址是什么:存储空间的地址是什么?根据空间的地址直接找到或者通过变量名先转换为根据空间的地址直接找到或者通过变量名先转换为对应的地址然后找到。对应的地址然后找到。问题问题6:如何将值存储到该内存空间?:如何将值存储到该内存空间?问题问题7:如何写入新值?:如何写入新值?重复问题重复问题6的步骤。结果导致变量的空间中保留新值,的步骤。结果导致变量的空间中保留新值,原来的值被覆盖。原来的值被覆盖。问题问题8:变量的值何时会发生改变?:变量的值何时会发生改变?向变量的存储空间写入值时,即只有执行向变量的存储空间写入值时,即只有执行“赋值赋值”操作的时候。操作的时候。问题问题9:如何读取变量
9、的值?:如何读取变量的值?通过存储空间的地址或变量名找到该空间,得到该通过存储空间的地址或变量名找到该空间,得到该空间中值的拷贝版。空间中值的拷贝版。问题问题10:读取后变量值是否改变?:读取后变量值是否改变?读取不会改变变量的值。读取不会改变变量的值。变量变量问题问题1:变量的作用?:变量的作用?答:变量将会存储值。答:变量将会存储值。问题问题2:如何存储值?:如何存储值?答:每新创建一个变量就会给它分配一片独有的内存存储空间。答:每新创建一个变量就会给它分配一片独有的内存存储空间。问题问题3:如何决定分配的空间大小?:如何决定分配的空间大小?答:数据类型决定分配多少个连续的存储空间。答:数
10、据类型决定分配多少个连续的存储空间。变量变量问题问题4:如何找到分配的空间?:如何找到分配的空间?答:根据空间的地址直接找到或者通过变量名先转换为对应的答:根据空间的地址直接找到或者通过变量名先转换为对应的地址然后找到。地址然后找到。问题问题5:存储空间的地址是什么:存储空间的地址是什么?答:某片内存空间的地址即该区域最左侧起点位置(首字节)答:某片内存空间的地址即该区域最左侧起点位置(首字节)的编号。的编号。问题问题6:如何将值存储到该内存空间?:如何将值存储到该内存空间?答:存储空间写入值时,将值转换为二进制形式,二进制数值答:存储空间写入值时,将值转换为二进制形式,二进制数值位的数量与存
11、储空间的位数量相同,即写入值会充满整个存储位的数量与存储空间的位数量相同,即写入值会充满整个存储空间。空间。变量变量问题问题7:如何写入新值?:如何写入新值?答:重复问题答:重复问题6的步骤。结果导致变量的空间中保留新值,的步骤。结果导致变量的空间中保留新值,原来的值被覆盖。原来的值被覆盖。问题问题8:变量的值何时会发生改变?:变量的值何时会发生改变?答:向变量的存储空间写入值时,即只有执行答:向变量的存储空间写入值时,即只有执行“赋值赋值”操作操作的时候。的时候。问题问题9:如何读取变量的值?:如何读取变量的值?答:通过存储空间的地址或变量名找到该空间,得到该空间答:通过存储空间的地址或变量
12、名找到该空间,得到该空间中值的拷贝版。中值的拷贝版。变量变量问题问题10:读取后变量值是否改变?:读取后变量值是否改变?答:读取不会改变变量的值。答:读取不会改变变量的值。补充:补充:1、变量名即为标识符的一种,变量名起名规则与标识、变量名即为标识符的一种,变量名起名规则与标识符规则相同;潜规则:组成变量名的若干个英语单词中,符规则相同;潜规则:组成变量名的若干个英语单词中,第一个单词首字母小写,其余单词首字母大写,非首字第一个单词首字母小写,其余单词首字母大写,非首字母都为小写(匈牙利命名法)母都为小写(匈牙利命名法)2、在执行变量定义语句时将会给变量分配空间。、在执行变量定义语句时将会给变
13、量分配空间。整型变量整型变量v整型变量分类:整型变量分类:数据类型数据类型类型关键词类型关键词基本型基本型intint短整型短整型short short 长整型长整型longlong无符号基本型无符号基本型unsignedunsigned int int无符号短整型无符号短整型unsigned shortunsigned short无符号长整型无符号长整型unsigned longunsigned long例如:例如:int i;shortint i;short s;unsigned long k,q;s;unsigned long k,q;实型变量实型变量v实型变量分类:实型变量分类:数据类
14、型数据类型类型关键词类型关键词双精度双精度doubledouble单精度单精度floatfloat例如:例如:float i;doublefloat i;double s;s;变量的初始化变量的初始化变量的初始化:变量的初始化:在定义变量的同时给变量赋初值。在定义变量的同时给变量赋初值。如如:int a=10,b=3int a=10,b=3;float c=123.7,d=4.5;float c=123.7,d=4.5;double x=1.234567;double x=1.234567;注意:注意:1 1、int a=b=10;int a=b=10;2 2、int i;int i;i=10
15、;i=10;float f;float f;字符型数据字符型数据u字符常量字符常量表现形式表现形式实例实例由由单引号单引号括起来的括起来的单个单个字符字符A a 3由由单引号单引号括起来的括起来的转义转义字符字符n t注意注意:字符常量在内存中实际存储的是其字符常量在内存中实际存储的是其ASCII码的值码的值 如:如:A65,a 97,351C语言规定语言规定:字符型常量在内存中占字符型常量在内存中占8位(一个字节)。位(一个字节)。字符型数据字符型数据u字符串常量字符串常量用一对双引号括起来的一个字符串;如用一对双引号括起来的一个字符串;如“hello”C规定:在一个字符串的末尾系统自动加一
16、个字符串结束标志规定:在一个字符串的末尾系统自动加一个字符串结束标志“0”在内存中占的字节数在内存中占的字节数=字符个数字符个数+1“hellohello”在内存中的存储形式是该字符对应的在内存中的存储形式是该字符对应的ASCIIASCII码值:码值:1041041011011081081081081111110h he el ll lo o00“B”B字符变量字符变量字符变量字符变量(char):用来存放一个字符,占一个字节。用来存放一个字符,占一个字节。char c=A;char c=A;A97注意:注意:字符变量存储的是字符的字符变量存储的是字符的ASCII码,即数字。码,即数字。如如:
17、char c1,c2;int i;c1=a;=c1=97;c2=c1-32;=c2=A;=c2=65;=c2=a-32;i=97;=i=a;运算符和表达式运算符和表达式uC运算符运算符:算术运算符、关系运算符、逻辑运算符、赋:算术运算符、关系运算符、逻辑运算符、赋值运算符等值运算符等u C表达式:表达式:由运算对象(常量、变量、函数)、运算符由运算对象(常量、变量、函数)、运算符和括号组成的式子。和括号组成的式子。如:算术表达式、赋值表达式、关系如:算术表达式、赋值表达式、关系表达式、逻辑表达式、表达式、逻辑表达式、条件表达式、逗号表达式等。条件表达式、逗号表达式等。表达式的求值规则表达式的求
18、值规则:先按运符的先按运符的“优先级优先级”由高到低进行,若运算对象两边运由高到低进行,若运算对象两边运算符级别相同,则按运算符的算符级别相同,则按运算符的“结合性结合性”处理。处理。算术运算符和算术表达式算术运算符和算术表达式运算符运算符结合性结合性双目:双目:+-+-*/%/%自左向右自左向右单目单目:+-自右向左自右向左两整数相除,结果为整数。两整数相除,结果为整数。8/3=2整除整除实除实除两实数或与一实数相除,结果为双精度型。两实数或与一实数相除,结果为双精度型。如如:8/3.0=2.6666666除运算(除运算(/)模运算(模运算(%)算数表达式注意事项算数表达式注意事项算术表达式
19、算术表达式:用算术运算符将运算对象连接起来的符合用算术运算符将运算对象连接起来的符合C语法语法规则的式子就称为算术表达式规则的式子就称为算术表达式u表达式中的乘号不能省略。表达式中的乘号不能省略。例如:例如:3*a b*cu表达式中的所有内容必须书写在同一行上,不允许有分表达式中的所有内容必须书写在同一行上,不允许有分子分母、上下标等形式,必要时要利用圆括号保证运算的子分母、上下标等形式,必要时要利用圆括号保证运算的顺序。顺序。u表达式不允许使用方括号和花括号,只能使用圆括号帮助表达式不允许使用方括号和花括号,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,限定运算顺序
20、。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。运算时从内层圆括号开始,由内向外依次计算表达式的值。数据类型转换数据类型转换自动类型转换自动类型转换C语言允许不同类型数据之间的各种运算。语言允许不同类型数据之间的各种运算。但应先转换,后运算。但应先转换,后运算。C允许任何标准类型数据之间的隐式转换。允许任何标准类型数据之间的隐式转换。char shortlongunsignedfloatdoubleint假设:假设:float类型变量最大表示数值为类型变量最大表示数值为10float f1=8,f2=9;f1+f2?int i=10,a=65;fl
21、oat f=12.0,e=10.0;double d=12.0;10+a+i*f-d/e数据类型转换数据类型转换强制类型转换强制类型转换格式格式:(数据类型关键字数据类型关键字)(表达式表达式)如:如:(double)a (int)(x+y)注意:注意:通过强制类型转换,只是得到了一个所通过强制类型转换,只是得到了一个所需类型的中间结果,而原来变量或表达式的值需类型的中间结果,而原来变量或表达式的值和类型并没有变化。和类型并没有变化。强制类型转换后强制类型转换后a值值是否变化?是否变化?赋值表达式赋值表达式基本赋值运算符:基本赋值运算符:=复合赋值运算符:复合赋值运算符:+=-=*=/=%=等
22、等结合性:结合性:自右向左自右向左格式:格式:变量变量=表达式表达式 变量变量+=表达式表达式a=5 a=(b=5)a=5+(b=5)a=(b=5)+(c=3)a=b*(c=2.5/b)a+=5 a*=y+8若若i=2,j=12,k=10 则则 k+=j+=i+8的值是?的值是?若若a=10 则则 a+=a-=a*=10的值是?的值是?赋值表达式赋值表达式赋值过程:赋值过程:求出表达式的值,将表达式值的类型与变量的类型比较求出表达式的值,将表达式值的类型与变量的类型比较 当二者类型相同时:直接赋值当二者类型相同时:直接赋值 当二者类型不同时:先转换再赋值。当二者类型不同时:先转换再赋值。赋值运
23、算的类型转换赋值运算的类型转换u整形整形=实型变量:数值不变实型变量:数值不变,但以浮点数形式存储到变,但以浮点数形式存储到变量中量中,例如例如 5 5.0u实型实型=整型变量:需要强制转换,舍弃小数部分。例如整型变量:需要强制转换,舍弃小数部分。例如 (int)12.234 12u较短的整数较短的整数=较长的整型变量:进行高位字节扩展;较长的整型变量:进行高位字节扩展;当被转换为无符号类型时:进行当被转换为无符号类型时:进行0扩展扩展111000010 0 0 0 0 0 0 0 1 1 1 0 0 0 0 11当被转换为符号类型时:进行符号位扩展当被转换为符号类型时:进行符号位扩展最高位:
24、最高位:0 前八位补前八位补0 最高位:最高位:1 前八位补前八位补1(以保持原值不变)(以保持原值不变)0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 111100001赋值运算的类型转换赋值运算的类型转换较长型整数较长型整数=较短型整型变量:较短型整型变量:去掉高字节位去掉高字节位,截取低字截取低字节位。节位。双精度双精度=单精度变量:只保留单精度的有效位数单精度变量:只保留单精度的有效位数无符号的整数无符号的整数=长整型变量长整型变量 将高位补将高位补0无符号的整数无符号的整数=同长整型变量,若数据超出范围,则同长整型变量,若数据超出范围,则出错出错带符号的整数带符号的整数=
25、同长无符号整型变量(符号作为数据传入)同长无符号整型变量(符号作为数据传入)自加、自减运算符自加、自减运算符单目:单目:+-+-结合性结合性:自右向左:自右向左i+ii+=i=i+1+在前,在前,i先做自增运算,运算后的结果再参与表达式运算先做自增运算,运算后的结果再参与表达式运算+在后,在后,i先参与表达式运算,等待所参与的表达式运算完先参与表达式运算,等待所参与的表达式运算完毕再做自增运算毕再做自增运算x=+i;i=i+1;x=i;x=i+;x=i;i=i+1;例例:x=(i+)+(i+)x=(+i)+(+i)逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符:逗号运算符:“,”优先级
26、优先级:最低最低 结合性:从左到右结合性:从左到右格式:格式:表达式表达式1,表达式表达式2,表达式表达式n逗号表达式的值:逗号表达式的值:从左到右,依次求出各表达式的值,从左到右,依次求出各表达式的值,表达式表达式n 的值和类型为逗号表达式的值和类型。的值和类型为逗号表达式的值和类型。如:如:x=(a=3,b=5,c=b*4)t=3,t+2 (a=2*3,a*5),a+6sizeof运算符运算符sizeof运算符是一个单目运算符运算符是一个单目运算符,它返回变量或数据类它返回变量或数据类型的字节长度型的字节长度,是一个整型值。是一个整型值。一般形式为:一般形式为:sizeof(类型标识符类型标识符)或或 sizeof(变量名变量名)例如:例如:sizeof(double)表达式的值为表达式的值为8 sizeof(int)表达式的值为表达式的值为4
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。