第3章 数据类型、运算符和表达式55_第1页
第3章 数据类型、运算符和表达式55_第2页
第3章 数据类型、运算符和表达式55_第3页
第3章 数据类型、运算符和表达式55_第4页
第3章 数据类型、运算符和表达式55_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机处理的对象是数据,而数据是以某种特定的形式存在的,例如,姓名可以用一个字符数据表示,年龄可以用一个整数表示,各种商品的价格可以用实数表示等。为了能准确、方便地用数据描述生活中的各种信息,C语言将数据划分为不同的类型。本章学习C语言的基础知识:数据类型、运算符与表达式。房间——内存单元房号——单元地址预定房间——定义变量,inta,b;入住客人——变量赋值,a=3;在C语言中,各类数据是计算机处理的主要对象,这些数据在计算机处理过程中,也需要使用一个类似“容器”的东西加以表达和储存,这通常是由常量和变量来完成的。常量:用来表达在程序运行过程中其值保持恒定的数据。变量:用来表达在程序运行过程中其值可以根据需要经常更新的数据。想一想:常量中的数据是如何存入的?当变量中的数据更新后,它原来的值到哪儿去了?计算机的数据在程序运行时,放在内存的单元。只有当存入某文件时才写入磁盘,文件后面讲。第三章数据类型、运算符和表达式掌握C的数据类型及其定义方法-P37掌握C运算符种类、运算优先级、结合性-P365掌握不同类型数据间的转换与运算-P54掌握C表达式类型和求值规则3.1C的数据类型——P373.1C的数据类型整型字符型实型(浮点型)枚举类型单精度型双精度型数组类型结构体类型共用体类型构造类型基本类型指针类型空类型数据类型3.2常量与变量

一、常量1.什么是常量?常量是在程序运行过程中,其值不能被改变的量。2.常量的分类?常量直接常量符号常量:从其字面形式即可判断的常量。如:12、3.5、‘a’:利用一个标识符代表的常量。

例1:(直接常量)main(){

intr;floatl,s;r=10;l=2*3.14159*r;s=3.14159*r*r;

printf(“l=%f\n”,l);

printf(“s=%f\n”,s);}

例2:(符号常量)#definePI3.14159main(){

intr;floatl,s;r=10;l=2*PI*r;s=PI*r*r;

printf(“l=%f\n”,l);

printf(“s=%f\n”,s);}

3.符号常量的特点①符号常量的实际值易于修改。②符号常量意义较明确,属准常数。二、变量1.什么是变量?变量是指程序在运行过程中,其值会发生改变的量。inta;后a=4;a=8;?a发生了变化2.变量的属性变量的属性:变量名、变量类型、变量值

变量的定义格式:变量类型变量名如:charcup;

inta,b,c=10;floatx=2,y,z;3.变量的使用C语言中,对所有用到的变量作强制定义,即“先定义,后使用”。相当于预定客房。联想:原样照印,遇%d从后面提数据。变量名的书写规则:由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:下列标识符中,不合法的变量名有:M.D.John,12%gf,1add,_ce36,age&,5thclass,lotus-1-2-3,cd*ef,float请思考为什么?提问同学。选变量名时,要做到“见名知意”例如:namest_agesum大小写字母是两个不同的字符,C变量名习惯用小写字母表示。建议变量名的长度不要超过8个字符。变量名的含义:变量名实际上是一个符号地址,代表内存单元的地址。相当于房间号301。5(存储单元)num例:num=5;例:sum=num;6(存储单元)sum5(存储单元)sum3.3整型数据一、整型常量1.十进制整数。如123、-456、0。2.八进制整数。以0开头,如0123表示八进制数123,即(123)8,等于十进制数83。即:(123)8=

1×82+2×81+3×80=833.十六进制整数。以0x开头,如0x123代表

16进制数123,即(123)16=1×162+2×161+3×160=291(6c)16=6×161+12×160=108二、整型变量

(一)整型变量的分类

基本型:以int

表示短整型:以shortint

或short

表示

1.类型长整型:以longint

或long

表示

(123l、123L)

无符号基本型(unsignedint)

无符号型无符号短整型(unsignedshort)

无符号长整型(unsignedlong)(-32768~32767)shortint

long数制转换基本概念10进制:逢10进1,数码01234567892进制:逢2进1,数码0、1计算:1+1=?101+111=?8进制:逢8进1,数码01234567计算:7+2=?13+17=?16进制:逢16进1,数码0123456789ABCDEF计算:5+6=?A2+51=?10→2进制:除2取余。计算:8→10→8进制:除8取余计算:8→10→16进制:除16取余计算:18→数制转换基本概念10进制:逢10进1数码0123456789,位权为103102101100故每位的数为相应数码*位权,1234为1*103+2*102+3*101+4*100=1234(十进制表示)2进制:逢2进1数码0、1,位权为23222120故每位的数为相应数码*位权,1101为1*23+1*22+0*21+1*20=13

(十进制表示)8进制:逢8进1数码01234567,位权为83828180故每位的数为相应数码*位权,0017为0*83+0*82+1*81+7*80=15(十进制表示)16进制:逢16进1数码0123456789ABCDEF故每位的数为相应数码*位权,00A3为0*163+0*162+10*161+3*160=17(十进制表示)与2进制对应0 0000 000 0000 01 0001 001 0001 12 0010 010 0010 23 0011 011 0011 34 0100 100 0100 45 0101 101 0101 56 0110 110 0110 67 0111 111 0111 78 1000 1000 89 1001 1001 910 1010 1010 A11 1011 1011 B12 1100 1100 C13 1101 1101 D14 1110 1110 E15 1111 1111 F2.整型数据在内存中的存放形式(补码表示法:便于加减运算)inti;i=10;——也可用8421法处理10=(1010)22102522210余数0101首位8421法介绍(基本原理:15=23+22+21+20) |||| 8421如:11的2进制=?16的2进制=?反之,如已知1101是二进制数,求10进制数。二进制只有0、1,为何不出现2?逢2进1八进制只有01234567,逢8进1十六进制只有0~9,10以后要占两位,必须用ABCDEF。F是多少?能出现G吗?逢16进1通用性的转换方法:除H取余,正向。*权后相加,反向。思考:用二进制进行过渡。16进制对应4位,8进制对应3(17)10=10001=0001,0001=(11)16(1A)16=0001,1010=16+8+0+2+0=(28)10八进制呢?同样方法。(17)10=168421=10001=010,001=(21)8(17)8=001,111=8+4+2+1=(15)10

2.整型数据在内存中的存放形式(补码表示法:便于加减运算)inti;i=10;——也可用8421法处理10=(1010)22102522210余数0101首位00000000

0000101000000000

0000101011111111

111101011111111

11111011010的原码取反取反后再加1,得-10的补码10的表示法,正数的补码等于它的原码-10一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。只需一般了解。inta;/*变量a的数值范围:-32768~32767*/unsignedintb;/*变量b的数值范围:0~65535*/01111111

111111111111111

111111111符号位数据位3276765535(二)整型变量的字长TurboC:short和int是2个字节、long是4个字节(三)整型数据的数据范围请看P43表。注意:①整型常量在给整型变量赋值的时候,一定要与其数据类型相匹配。②整数常量后加字母l或L,则是long型常量。③整数常量后加字母u或U,则是unsignedint

型常量。3.4实型数据——P45一、实型常量(小数、指数)1.十进制数小数形式如:0.123、123.0、.123、123.、0.0等。由整数、小数点、小数三部分组成。(必须有小数点)。2.指数形式如:123e3(相当于123x103),或写成123E3由尾数、e(或E)和指数三部分表示组成。尾数为十进制整数或十进制浮点数,指数必须是整数。(注意三部分必须存在且有效)如:╳

e3╳2.1e3.5╳.e3╳e思考:为何错?二、实型变量(一)实型变量的分类C实型变量分为单精度、双精度、长双精度。float型:字长32位(4个字节)double型:字长64位(8个字节)longdouble型:字长128位(16个字节)(二)实型变量的定义单精度(float型)如:floatx,y;双精度型(double型)如:doublea=10,b,c;例2.3main(){floata;doubleb;a=1234.111111;b=1234.111111;

printf(“a=%f,b=%f”,a,b);}输出结果:a=1234.111084,b=1234.111111注意:float型的有效位数达到7位

double型的有效位数达到16位3.5字符型数据一、字符常量1.单引号括起来的一个字符:'T','7','!'2.转义字符:指不能用符号直接表示的字符常量。将反斜杠(\)后面的字符转变成另外的意义。如‘\n’中的n不代表字母n而作为“换行”符。例如:‘

\n

’换行,将当前位置移到下一行的开头

\t

’横向跳格(水平制表,占8列)

\b

’退一格

\r

’回车,将当前位置移到本行的开头

\a

’报警

\0

’空字符

‘\j’代表字符‘j’‘\'’单撇号字符‘\"’双撇号字符‘\ddd’1到3位八进制代表的字符-要会8进制(’\165’->11710->’u’)‘\xdd’1到2位十六进制代表的字符-要会16进制(‘\x6c’->10810->’l’)

‘\\’反斜杠(‘\’字符)——考试“\\n”,出\n

main(){printf("12345678901234567890\n");printf("c\tlanguags\be\rC\n");—\t跳8格,\b退1格,\r回本行头printf("is\tusef\165\x6c");——\165是u,\x6c是l}Clanguageisuseful二、字符型变量(一)字符变量的定义形式charc1,c2;(二)字符的长度:1个字节字符型变量用来存放一个字符常量。实际在内存中存放的是该字符的ASCII码值。main(){

inti;charc;i=97;c=’a’;

printf(“i=%c,c=%c\n”,i,c);

printf(“i=%d,c=%d”,i,c);}例:输出结果:i=a,c=a

i=97,c=97

字符型数据和整型数据(0~255)之间可以通用。c=c+2;main(){

inti=298;

printf(“ASCII(%d)=%c\n”,i,i);}例:ASCII(298)=*(*的ASCII是298)00000001

00101010ASCII(42)=*298%256=42

main(){charbeep=‘\a’;

printf(“beep=%d%c\n”,beep,beep);}beep=7还会有一声警告音三、字符串常量用双引号括起来的一串字符序列。如:"ascii","7y677","8757gj\n"要点:注意:‘a’和“a”是完全不同的。

⑴字符串常量必须由双引号括起。

⑵字符串常量的末尾有一个ASCII码为0的字符(字符’\0’),作为字符串结束标志。

字符串常量的存储存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符‘

\0’自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。后面讲字符数组时要用到。例:c=“china”china\03.6运算符和表达式的简介一、什么是运算符和表达式?1+2运算符运算量运算量C语言的表达式是由常量、变量、调用函数通过运算符连接起来的式子。二、C运算符

C的运算符见55页按运算量的数量来分,C语言的运算符分为单目运算符、双目运算符和三目运算符。如:++——单目运算符例:i++

+——双目运算符例:a+b?:——三目运算符例:a?c:d三、C表达式

C语言使用的基本表达式有:⑴赋值表达式,如:a=3⑵算术表达式,如:3+4*2⑶关系表达式,如:3>2⑷逻辑表达式,如:3>5&&a>=b⑸条件表达式,如:a>b?a:b⑹逗号表达式,如:a=3,b=4,c=5四、表达式的求值规则

1.在有多个运算符的表达式中,按照运算符优先级的高低进行运算。(优先级见附录365页)2.对于优先级相同的表达式中,按照运算符的结合性来确定运算的次序。

a=b+d/3*83.7算术运算符和算术表达式——P551、基本的算术运算符:

+-(求正与求负)*/%(乘、除、求余)

+-(加与减)说明:

a=-b;(1)在“/”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=1(2)“%”要求两侧均为整数,“%”运算不能用于float和double

型数据例如:5%3=2

2、各类数值型数据间的混合运算一、运算过程:先自动转换成同类数据,再进行运算。

二、转换规则:低字长类型转换成高字长类型。double←float

↑long

↑unsigned

↑int←char,short①向左的横向箭头表示即使在同一种数据类型间进行运算时也要进行转换。用于提高精度。②向上纵向箭头表示当运算对象类型不同时的转换方向。P54例:若有inti;floatf;doubled;longdoublee;判断表达式:10+‘a’+i*f-d/e的类型(‘a’的ASCII是97)原则:向精度高的看齐。请思考:3/4?3.0/4?1/2*15*20?1.0/2*15*20?char8位,int16位float32位,double64位,longdouble128位intunsignedintlongintunsignedlongintdoubleshort,charfloat系统自动转换3、强制类型转换运算符一般形式:(类型名)(表达式)例如:(double)a+b;

(int)(x+y)功能∶把表达式的的值转换成指定的类型。

输出结果:x=3.600000,i=3注意:强制类型转换后并不改变原来变量的类型请看下面程序段:main(){floatx,y;inti,j,k;x=3.6;i=(int)x;j=(int)x+5;k=(int)(x+3.6);printf(“x=%f,i=%d”,x,i);}3.8赋值运算符和赋值表达式——P59一、赋值运算符“=”赋值表达式的格式∶<变量>=<表达式>

如:num=5+3功能:将该运算符右侧表达式的值赋给左侧变量。要求:如果表达式类型与左边的变量的类型不匹配,自动进行类型转换。结合方向(自右向左)P365:

x=y=a+b等价x=(y=a+b)复合运算符:

在赋值符“=”之前加上其他运算符,可以构成复合的运算符。复合赋值运算符——优点:书写简洁如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3

常见复合赋值运算符:

+=,–=,*=,/=,%=复合赋值运算的功能:与左边的变量进行复合运算后再赋给左边变量。例:(赋值运算符和复合赋值运算符)

main(){

inta,b,c;a=b=c=5;从右向左

a=(b=8)+(c=9);/*a=17*/a=10;a+=a-=a*a;从右向左,先a=a-a*a;}赋值运算的顺序:自右向左。

a=-180运算符说明:++自增,变量值加1––自减,变量值减13.9自增、自减运算符——P57i=i+1;i++;i=i-1;i--;自增运算符的另一种用法:++i、––i先使i的值加(减)1,再使用ii++、i––在使用i之后,使i的值加(减)1记忆:++i++(前加i后加)前加代表:用前加后加代表:用后加例:inti=5,j;j=++i;j=?i=?j=i++;j=?i=?举例:

intj,i=3;j=++i;/*j的值为4*/j=i++;/*j的值为4,然后i的值变为5*/j=-i++;/*j的值-5,然后i的值变为6*/自右向左

i++;/*i=i+1;i为7*/j--;/*i=i-1;*/printf(“i=%d”,i++);printf(“i=%d”,++i);⑴自增、自减运算符只能用于变量,不能用于表达式。注意:如:╳(a+b)++╳5++╳(-i)++⑵使用时,应避免歧义性。如:i+++j(i++)+j(3)自增、自减运算符的结合方向是自右向左

x=-i++x=-(i++)3.10逗号运算符和逗号表达式——P65表达式1,表达式2,表达式3,……,表达式n一、逗号表达式的一般形式二、逗号表达式的求解原则依次求式1、式2,直至表达式n,逗号表达式的值为式n的值。三、逗号运算符的优先级

优先级最低。其他运算全部完成后才进行逗号运算。例:逗号表达式,其值为最后一项的值

main(){intx1,x2,a;x1=(a=3,6*3);x2=a=3,6*3;printf("x1=%dx2=%d\n",x1,x2);}输出结果:x1=18x2=3main(){for(i=5,j=6;i+j>4;j--,i--)

语句部分}printf(“%f”,(x=x++,y=++y,x+y))i=2;printf(“%d,%d”,i,i++);3,2i=8,j=10printf(“%d,%d,%d,%d”,i,j,i++,j++);9,11,8,10关系运算符及表达式运算符>、<、==、>=、<=、!=优先级低于算术、==和!=低于其它。但高于逻辑运算符。关系表达式:常量、变量及运算符构成关系表达式如a>10或b<=9。结果:成立为1,不成立为0分析:a=3,问a>10的结果是什么?逻辑运算符及表达式逻辑运算符&&||!逻辑表达式:常量、变量及运算符构成关系表达式通常用关系表达式+逻辑运算符构成逻辑表达式。如a>10&&a<=20表示范围是什么?分析:a=8,问(a>10)&&(a<=20)的结果是什么?上面关系、逻辑可构成条件表达式,用于条件判断。其值为成立1,不成立0。非0也成立。运算规则记忆:&&同0、1的乘,||同0、1的加。分析:1&&0,1||1,2&&3,3||1,a=3,!a结果?主要记忆要点:1.数据类型:整型、浮点、字符——对常量、变量记忆

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论