C语言教学之数据类型表达式_第1页
C语言教学之数据类型表达式_第2页
C语言教学之数据类型表达式_第3页
C语言教学之数据类型表达式_第4页
C语言教学之数据类型表达式_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

会计学1C语言教学之数据类型表达式第2张3.5字符型数据3.6变量赋初值3.7各类数值型数据间的混合运算3.8算术运算符和算术表达式3.9赋值运算符和赋值表达式3.10逗号运算符和逗号表达式第1页/共60页第3张本章大纲数据类型、运算符与表达式(7学时)教学内容:C的数据类型:基本数据类型;自定义的数据类型常量和变量:符号常量与一般常量;变量的定义和赋值各类型数据的混合运算运算符与表达式:算术运算符;关系运算符与逻辑运算符;表达式的执行顺序第2页/共60页第4张基本要求:了解C语言的数据类型;了解常量的概念、常量的分类;了解整型、实型和字符型数据的存储形式;掌握变量的概念、变量的分类及变量的初始化方法;掌握各类数值型数据间的混合运算规则;掌握常见的各种运算符及表达式;理解运算符的优先级与结合性。重点:基本数据类型;变量定义和赋值;运算符与表达式难点:自定义的数据类型;运算符优先级。第3页/共60页第5张

数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。

基本类型:整型,字符型,浮点型(单精度型,双精度型),枚举类型;构造类型:数组类型,结构体类型,共用体类型,指针类型,空类型。数据类型决定:1.数据占内存字节数2.数据取值范围3.可对数据进行的操作3.1C的数据类型第4页/共60页第6张

数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。

数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。

常用数据结构:数组、线性表、链表、队列、栈、树、图等的定义、存储和操作数据结构补充了解第5页/共60页第7张(1)不同的计算机语言所允许定义和使用的数据结构是不同的。(2)处理同一类问题,如果数据结构不同,算法也会不同。第6页/共60页第8张3.2常量与变量常量:在程序运行过程中,其值不能被改变的量称为常量。3.2.1常量和符号常量字面常量或直接常量符号常量:以用一个标识符代表一个常量例如:12,0,-3为整型常量;4.6、-1.23为实型常量;‘a’,‘d’为字符常量。#definePRICE30第7页/共60页第9张例3.1符号常量的使用。#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}total=3001.习惯上,符号常量名用大写2.程序中不能再次对符号常量赋值。#definePRICE30main(){……PRICE=40;……}×第8页/共60页第10张这么麻烦给常量起了名字,有什么好处吗?(1)含义清楚。定义符号常量名时应考虑“见名知意”。(2)在需要改变一个常量时能做到“一改全改”。#definePRICE30一看就知道PRICE表示价格,但千万不要在定义圆周率的时候也这样写,虽然不错,但达不到“见名知意”的目的了。#definePRICE3.1415926第9页/共60页第11张3.2.2变量变量是指在程序运行期间,其值可以改变的量。1.用来存放数据2.对应内存中的一个特定的存储单元3.有名字,以便被引用1.怎么对应到特定的存储单元呢?由编译系统完成。(参阅《编译原理》)2.变量的名字要怎么起呢?第10页/共60页第12张?变量怎么对应到特定的存储单元呢?存储单元地址3变量值变量名存储单元地址一般用十六进制数表示,与变量名一一对应,类似于身份证号,唯一但难记,类似于身份证号。存储单元每个存储单元都由一个唯一的存储单元地址和存储在单元里面的内容组成为了便于引用存储单元而起的名字。类似于人名2004H存储单元的内容a第11页/共60页第13张标识符(identifier):用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。标识符的命名规则:(1)只能由字母、数字和下划线三种字符组成,(2)且第一个字符必须为字母或下划线。必须同时满足以上两个条件。不合法的标识符名:M.d.John,¥123,3d64,a>b

合法的标识符名:while,_total,student_name,lotus_1_2_3,Class,class,BASIC

C语言区分大小写!Class和CLASS,Class,cLass都不同!×第12页/共60页第14张(1)符合标识符的2个命名规则;(2)不能和关键字(32个)重名。必须同时满足以上两个条件。变量的名字要怎么起呢?合法的变量名:num,day,x1不合法的变量名:3num,day‘,while“先定义,后使用”我是君子,先说了才会用啊!强制类型定义×第13页/共60页第15张3.3整型数据3.3.1整型常量的表示方法整型常量即整常数。(1)十进制整数。(2)八进制整数。(3)十六进制整数。如123表示十进制数123以0开头的数是八进制数。如0123表示八进制数123,-011表示八进制数-11以0x开头的数是十六进制数。如0x123,代表十六进制数123-0x12等于十进制数-18还记得进制间如何转换吗?忘了的赶快找找啊!单片机程序设计中经常用到第14页/共60页第16张1.整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。每一个整型数据(包含变量和常量)在内存中占2个或4个字节。(a)存放的示意图(b)实际存放图10=(1010)2例子:3.3.2整型变量第15页/共60页第17张

在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。补码(complement)

一个正数的补码和其原码的形式相同。负数补码的求法:(1)写出该数的绝对值的二进制形式;(2)按位取反;(3)再加1。原码又是什么呢?掌握第16页/共60页第18张原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。

补充内容:原码(trueform)①小数原码的定义[X]=X(0≤X<1)

=1-X(-1<X≤0)例如:X=+0.1011,[X]原=0.1011

X=-0.1011,

[X]原=1.1011

②整数原码的定义[X]原=X(0≤X<2n)

=2n-X(-2n<X≤0)例如:[+1011]原=00001011

[-1011]原=10001011了解第17页/共60页第19张2.整型变量的分类

(1)基本整型(int)(2)短整型(shortint)(3)长整型(longint)修饰符:(1)有符号(signed)(2)无符号(unsigned)有符号基本整型[signed]int无符号基本整型unsignedint有符号短整型[signed]short[int]无符号短整型unsignedshort[int]有符号长整型[signed]long[int]无符号长整型unsignedlong[int][]里的关键字可以省略!第18页/共60页第20张如果内存中有个数据是这样存储的,那么它是多少?如果是无符号数,它是65535如果是有符号数,它是-1例子第19页/共60页第21张3.整型变量的定义

inta,b;unsignedshortc,d;longe,f;C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”对变量的定义,一般是放在一个函数的开头部分的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)。第20页/共60页第22张例3.2整型变量的定义与使用。main(){inta,b,c,d;/*指定a、b、c、d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}第21页/共60页第23张0000000000001100(a=12)+0000000000001010(u=10)-----------------

0000000000010110(c=22)第22页/共60页第24张00000000000110001111111111100111+

1-----------------

1111111111101000(b=-24的补码)+

0000000000001010(u=10)-----------------

1111111111110010(d的补码)

1-----------------

11111111111100010000000000001110(d的绝对值=14)求b=-24的补码

a+u=22,b+u=-14第23页/共60页第25张4.整型数据的溢出在Turboc中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?main()

{inta,b;

a=32767;

b=a+1;

printf("%d,%d",a,b);

}32767,-3276832767+1不等于32768吗?第24页/共60页第26张0111111111111111(a=32767)

1

-----------------

1000000000000000(负数)?-

1

-----------------

01111111111111111000000000000000

(b的绝对值,即32768)真值为-32768

既然是这样,那要怎么改才能得到预期的结果32768呢?想一想啦!第25页/共60页第27张3.3.3整型常量的类型(1)一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和longint型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是长整型,可以将它赋值给一个longint型变量。(3)一个整常量后面加一个字母u,认为是unsignedint型,如12345u,在内存中按unsignedint规定的方式存放。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。(5)在一个整常量后面加一个字母l或l,则认为是longint型常量。例如123l、432l、0l等。第26页/共60页第28张3.4浮点型数据3.4.1浮点型常量的表示方法浮点数(floating-pointnumber)即实数(realnumber)。十进制小数形式。它由数字和小数点组成指数形式123e3,123E3.123,123.,123.0,0.0e32.1e3.5.,e×注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数第27页/共60页第29张“规范化的指数形式”:即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。一个实数在用指数形式输出时,是按规范化的指数形式输出的。

知道了!123.456可以表示为123.456e0,12.3456e1、1.23456e2、0.123456e3、0.0123456e4、0.00123456e5……

无数种?……原来1.23456e2是规范化的指数形式。第28页/共60页第30张3.4.2

浮点型变量图3.7实数3.14159在内存中的存放形式示意1.浮点型数据在内存中的存放形式一个浮点型数据在内存中占4个或8个字节(32位或64位)按照指数形式存储的纯小数部分采用规范化的指数形式了解小数位数越多,精度越高指数位数越多,表示的数的范围越大。第29页/共60页第31张2.浮点型变量的分类C浮点型变量分为三类:单精度(float)双精度(double)长双精度型(longdouble)占4个字节(32位)占8个字节(64位)占16个字节(128位)floatx,y;doublez;longdoublet;第30页/共60页第32张3.浮点型数据的舍入误差main()

{floata,b;

a=123456,789e5;

b=a+20;

printf("%f",b);

}应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。浮点型用有限的存储单元存储,所以提供的有效数字也就有限,故会产生舍入误差。12345678848.000000第31页/共60页第33张3.4.3浮点型常量的类型f=2.45678*4523.65

双精度双精度单精度*取前7位提高精度运算速度降低难道不能就按单精度计算吗?f=2.45678f*4523.65F第32页/共60页第34张3.5字符型数据3.5.1字符常量1.用单引号(即撇号)括起来的一个字符。如‘a’,‘x’,‘D’,‘?’,‘$’

。2.以一个“\”开头的字符序列。是“控制字符”,在屏幕上是不能显示的如‘\n’,‘\t’,‘\b’,‘\r’,‘\\’,‘\’’,‘\’’’,‘\ddd’,‘\xhh’‘a’和‘A’相同吗?不同!第33页/共60页第35张例3.5转义字符的使用。main()

{printf("abc\tde\rf\tg\n");

printf("h\ti\b\bjk");

}fab

cgdehjikfgdehjk打印机屏幕白纸黑字空说无凭第34页/共60页第36张3.5.2字符变量1.字符型变量用来存放字符常量2.只能放一个字符3.一个字符变量在内存中占一个字节字符变量的定义:char

c1,c2;字符变量的赋值:c1='a';c2='b';字符变量的定义和赋值:

charc1=‘a’,c2='b';第35页/共60页第37张3.5.3字符数据在内存中的存储形式及其使用方法存储输出将该字符的相应的ASCII代码放到存储单元中1.以字符形式输出2.以以整数形式输出示意图实际存储情况第36页/共60页第38张main(){charc1,c2;c1=97;c2=98;printf("%c%c\n",c1,c2);/*以字符形式输出*/printf("%d%d\n",c1,c2);/*转换为整数形式输出*/

}例3.6向字符变量赋以整数。%c表示以字符形式输出。%d表示以带符号的十进制整数形式输出。※※ab9798通用第37页/共60页第39张例3.7大小写字母的转换。main(){charc1,c2;

c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c

%c",c1,c2);}AB掌握第38页/共60页第40张3.5.4字符串常量a\0字符串常量是一对双引号括起来的字符序列。如:“CHINA”,”a”,“howdoyoudo.”,”123.45”“a”=?דa”是字符串常量‘a’‘a’是字符常量a第39页/共60页第41张charc;

c='a';c="a";c=“CHINA"

考考你下面3个赋值语句中哪些是对的?为什么?××√1.在C语言中没有专门的字符串变量2.必须使用字符数组,数组中每一个元素存放一个字符。

第40页/共60页第42张3.6变量赋初值1.允许在定义变量的同时使变量初始化2.部分赋初值3.同种类型的可以合并定义inta=3;

floatf=3.56;

charc='a';inta,b,c=5;inta=3,b=3,c=3;×inta=b=c=3;?第41页/共60页第43张3.7各类数值型数据间的混合运算图3.10转换规则纵向的箭头表示数据转换的方向横向向左的箭头表示必定的转换第42页/共60页第44张10+‘a’+i*f-d/e假设i是int变量,值为3,f是float变量,值为2.0,d是double变量,值为4.0,e为long型,值为8*优先级高于+①算10+‘a’:把‘a’转换成int为97,再加10,等于107107+i*f-d/e②算i*f:把i和f都转换成double,然后相乘得6.0优先级相同

107+6.0-d/e+和-优先级相同③算107+6.0:把107转换成double,和为113.0/优先级高于-④算d/e:把e转换成double,商为0.5113.0

-d/e113.0-0.5⑤把113.0转换成double,差为112.5第43页/共60页第45张3.8算术运算符和算术表达式1.算术运算符 (+-*/%)2.关系运算符 (><>=<===!=)3.逻辑运算符 (!&&||)4.位运算符 (<<>>~&∧|)5.赋值运算符 (=及其扩展赋值运算符)6.条件运算符 (?:)7.逗号运算符 (,)8.指针运算符 (*和&)9.求字节数运算符 (sizeof)10.强制类型转换运算符((类型))11.分量运算符(.->)12.下标运算符([

])13.其他 (如函数调用运算符())第44页/共60页第46张3.8.2算术运算符和算术表达式1.基本的算术运算符+:加法运算符或正值运算符-:减法运算符或负值运算符*:乘法运算符/:除法运算符%:模运算符或求余运算符如3+5、+3如5-2、-3如3*5如5/3=1,5/3的结果可能是-1,也可能是-2大部分是“向零取整”如7%4的值为3%两侧均应为整型数据*不能写成×第45页/共60页第47张常量变量函数

2.算术表达式和运算符的优先级与结合性+-*/运算符运算对象用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子.例如:a*b/c-1.5+'a'优先级:1.先按运算符的优先级别高低次序执行2.如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。

结合性:1.左结合性:即运算对象先与左面的运算符结合2.右结合性:有些运算符的结合方向为“自右至左”.算术表达式第46页/共60页第48张两种类型转换强制类型转换自动类型转换若x为float型,则“x%3”不合法,必须用:“(int)x%3”如3+6.53.强制类型转换运算符第47页/共60页第49张一般形式:(类型名)(表达式)(int)(x+y)先将x与y相加,然后将他们的和转换成整型表达式应该用括号括起来(int)x+y只将x转换成整型,然后与y相加原来是这样!第48页/共60页第50张例3.8强制类型转换。main()

{floatx;

inti;

x=3.6;

i=(int)x;printf("x=%f,i=%d“,x,i);

}x=3.600000,i=3在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化第49页/共60页第51张4.自增、自减运算符++i先使i的值加1,然后再使用ii++先使用i,然后再使i的值加1自增(减)运算符常用于:1.循环语句中,使循环变量自动加1或减1。2.指针变量,使指针指向下一个地址。自增运算符++--i先使i的值减1,然后再使用ii--先使用i,然后再使i的值减1自减运算符--第50页/共60页第52张i=3;

printf("%d",++i);i=3;

printf("%d",i++);i=3;

j=++i;

printf("%d",j);i=3;j=i++;

printf(“%d”,j);4334自增运算符(++)和自减运算符(--),只能用于变量,而不能用于常量或表达式,++和--的优先级:第2级。++和--的结合方向是“自右至左”。5++(a+b)++不合法第51页/共60页第53张3.9赋值运算符和赋值表达式

1.赋值运算符赋值运算符就是“=”作用是执行一次赋值操作如a=3a=3+c优先级:第14级结合性:右结合性第52页/共60页第54张整型字符型无符号有符号字符的8位放到整型变量的低8位符号扩展高8位补零将低8位放到字符变量中

温馨提示

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

评论

0/150

提交评论