高级语言程序设计:chap02 数据与计算基础

上传人:努力****83 文档编号:193125584 上传时间:2023-03-08 格式:PPT 页数:72 大小:1.56MB
收藏 版权申诉 举报 下载
高级语言程序设计:chap02 数据与计算基础_第1页
第1页 / 共72页
高级语言程序设计:chap02 数据与计算基础_第2页
第2页 / 共72页
高级语言程序设计:chap02 数据与计算基础_第3页
第3页 / 共72页
资源描述:

《高级语言程序设计:chap02 数据与计算基础》由会员分享,可在线阅读,更多相关《高级语言程序设计:chap02 数据与计算基础(72页珍藏版)》请在装配图网上搜索。

1、第二部分 数据与计算基础Introduction to data&computing学习程序设计语言与学习外语n具有相同之处n需要学习一些词汇以知道每个词的意思n需要学习语法,以便这些语汇组织成句子n需要学习一些常见习惯用语来理解别人所说的东西n因此,我们也需要学习程序设计语言的基本词汇,基本语法和常见的习惯用语,但仅有这些是不够的,我们得进一步学习如何表述自己的思想,如何解决问题。本部分内容本部分内容n程序的基本组成元素n基本数据的描述形式n表达式的形式和意义(所表示的计算过程)n一个基本概念:类型n学习写最简单的C程序一、基本字符、标识符、关键字1.基本字符n高级语言程序是基本字符的序列,

2、C语言程序的基本字符包括n数字 09n大小写字母 az,AZn标点符号n!%&*()_-+=:;,.?/|n特殊字符n空格、换行、制表符(空白字符),起分隔作用。n增删空白一般不影响程序的意义2.标识符identifiern各种高级语言中的标识符用来指称对象的名称,即标识符是程序语言里各种对象的名字nC语言的标识符形式n以字母开头的字母或数字的连续序列,n下划线“_”看作字母nC和Java的标识符对字母大小写敏感,例na和A是不同字母nABC、Abc、AbC和abc是4个不同标识符n有些高级语言不区分大小写字母nPASCAL语言,BASIC语言等标识符示例nC语言合法标识符示例nabcd,si

3、n,Beijing,C_Programming,a3b06,a3b400n,while,_f2048,sx211_12a,abc_,_ n例nx3+5,其中x3是一个标识符nab_400+xy_/xn不合法标识符示例n9a,123X,a b1关于标识符的命名n标识符命名应遵循一定的规范n课程中可以参考下发编码规范对各类不同的标识符的命名要求n在实际工作中参照公司或项目组的命名规范n任何标识符的命名最好能有一定的含义n源程序中的标识符的命名尽量采用英文,最好不要采用中文或拼音缩写n课后去了解一些Naming Convention3.高级语言的关键字 keywordsn关键字或保留字n高级程序设计

4、语言中规定的具有固定含义和用途的标识符,不能用作一般名字n每种高级语言都有一套关键字nC语言的关键字,ANSI C 共有32个nauto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while二、数据与类型1.数据举例n-1,0,1,2,3,n1.25,99.999,n

5、“据报道,本年度各地气温普遍比往年偏高,”2.数据在计算机中的表示n不同类型的数据在计算机中的表达式方式不同,所表示的数值范围和精度不同,所占用的存储空间的大小也不同。n位(BIT)是描述计算机数据量的最小单位,8位称一个字节(BYTE),16位称为一个字(WORD),32位称双字(DWORD)。010000 01每一格代表1位(bit)8位合称为1字节(byte)3.二进制数能代表什么?n0100 0001n有8个开关,有2个开着,其余6个关了n65这个数,1*26+1*20n大写字母字符A,那B怎么表示?n一个8位密钥nn结论:同一个数,在不同的语义背景下可能代表完全不同的意思4.数据与类

6、型n数据Datan对客观事物的符号表示n在计算机科学中是指所有输入到计算机中并被计算机程序处理的符号的总称 n数据都具有一定的类型,类型是计算机科学的一个核心概念。n一个类型是程序里可用的一类数据对象集合,数据都必须属于特定类型。n同类型所有数据对象的性质相同,采用统一书写形式,同样编码方式,能做同样操作。5.数据类型举例n基本数据类型n整数,字符型数据,实数n基本类型用定长二进制编码表示,确定了该类型的可能范围n最主要的特点:其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。n复合、抽象或复杂的数据类型n整数数组,人,人的集合,武器,牌,某种图片,银行账户,三、C语言基本数据类

7、型 1.C的基本数据类列表int 整型 float 单精度浮点型char 字符型 double 双精度浮点型short int(或short)短整型long int(或long)长整型unsigned int 无符号整型unsigned short 无符号短整型unsigned long 无符号长整型unsigned char 无符号字符型数据类型与所需存储空间n结论1:对于一种类型的数据,给定大小固定的存储空间,只能表示该类型的有限范围有限精度的数值n结论2:存储空间可以存储不同类型的数据n结论3:任意一种数据都需要按某种编码规则按统一格式进行存储和解读三根棍,表示范围:0-999,例:82

8、6五根棍,2位小数,表示范围:0.00-999.99例:425.012.各种整型数据类型所占位数最小取值范围int 16-3276832767int 32-21亿21亿short 16-3276832767long 32-21亿21亿unsigned int 16065535unsigned short 16065535unsigned long 32042亿问题:如果超出这个范围怎么办?整数十进制写法n整数一般用十进制写法,除0本身外首字符不能为0n1234,0,768,2047,1999,2000n长整数写法n加后缀l或 L(不能有间隔)n123L 304l 25278L 1l 0Ln小写

9、l易与数字1混淆,建议用大写n整数前可以加正负号整数的八进制写法n八进制逢八进一n0开始的数字序列n只允许用07共8个数字n0123,06254,0531,0765432Ln八进制数值解读示例n0123 182+281+380=64+16+3=83n06254683+282+581+480整数的十六进制写法n十六进制逢十六进一n16进制数的主要目的在于表示冗长的二进制数n共16个数字,除09外,用字母 af 或 AF 表示其余6个数字,分别代表1015n每一位16进制数代表4位二制数n写法n在C语言中用0 x或0X开头的数字序列表示,不同于平常的后面加h或H的写法十六进制数字解读示例n解读示例

10、(按无符号整数解读)n0 x64 一个8位整数,值为6161+4160n0110 0100n0 x0064值为100的16位整数n0000 0000 0110 0100n0 xA3B5n值为10163+3162+11161+5160的16位整数n表示二进制数1010 0011 1011 01013.实数类型和实数的表示n实数的类型n单精度浮点数类型(浮点类型)floatn双精度浮点数类型(双精度类型)double,占8个字节n长双精度类型long doublen常用的标准表示法n浮点数32位表示,4个字节,约7位有效数字n双精度数用64位表示,8个字节,大约16位有效数字n长双精度数用64位或

11、80位表示(系统确定)n浮点型数据的存储符合IEEE浮点数格式,如float型数据,1位用于符号,8位用于指数,23位用于基数。实数的写法n普通写法n数字序列,需包含小数点“.”(可以是首/末字符)或指数部分n指数写法ne/E 开头数字序列(可带符号),以10为底。可同时有小数点和指数。n例n3.2,3.,2E-3,2.45e17nfloat加后缀f或F,long double加Ln实数前可以有正负号n整数类型和实数类型统称算术类型4.字符类型和字符的表示n字符类型ncharn占8位,一个字节n微机常用 ASCII(American Standard Code for Information

12、Interchange美国标准信息交换码)字符集,其中包含128个字符。有时用扩展ASCII字符集,256个字符(见第二本教材附录D)n字符字面量n单引号括起的一个字符n1,a,Dn转义字符n一组以“”开头的特殊字符序列,用这种方法可以表示任何可输出的字母字符、专用字符、控制字符和图形字符。常用转义字符表转义字符 功 能 a响铃,发出系统警告声音 n换行符,使屏幕光标移到屏幕下一行开头 r回车,使屏幕光标移到屏幕当前行开头,不换行 t制表符(横向跳格),使屏幕光标移到下一制表位 反斜杠字符 单引号字符 双引号字符5.字符型与整型n字符型相当于单字节的整型n其中存放的数据可以作为普通整数使用。n

13、也可以将其看成为字符的ASCII码,如一个char型数据A,其ASCII码为65,故实际存储的内容是65,0 x41。a的ASCII为97,存储内容为97,0 x61。n在许多场合,字符变量用于表示单字节整数nchar型数据取值范围为-128127,unsigued char型数据取值范围为0255。6.字符串n字符串n表示一串字符的数据描述形式。n例nCHINA nWelcomennHe said:Ok.nn特殊字符用换意序列表示,主要用于输入输出n不能在一个字符串的中间换行n很长的字符串可采用连续写几个字符串的形式四、数据的内外部表示1.数据与存储空间0100000100000000000

14、000000000000000000000存储空间:以字节为单位编号普通字符型变量占8位A一个32位int占用的存储空间一个float型浮点数所需占用的存储空间0 x000000000 xFFFFFFFF存储空间的编号称为地址0 x000000010 x000000022.数据的外部表示、内部表示与转换n外部表示n源程序中写数据时用的形式、给正运行中的程序提供数据时用的形式或者程序输出的形式n内部表示n数据在计算机内的二进制编码形式,计算机内部存储和处理数据时所用的形式外部形式内部形式整数十进制(或其他进制)的数字字符序列整数的二进制编码字符字符本身相应的二进制编码(ASCII编码)数据外部表

15、示与内部表示5、五、伍、fivea,A,This外部表示(书写)内部表示(信息编码、存储)5,05,0X05,5.0a,A,“This”程序源代码里,图片里书本上,显示器,?3.整数在内存中表示方法n任何数据在内存中都以二进制形式表示,整数也一样二进制,即任何整数最后的表示都是一定长度二进制形式,如32位二进制数。n一个32位整数由4个字节组成,在内存中表示整数时,存在这个4个字节在存储空间中的存放顺序的问题n微机字节序little endian:高位在后,低位在前n0 x00000064,01100100 00000000 00000000 00000000n0 x14000064,0110

16、0100 00000000 00000000 00010100n主机字节序big-endian:高位在前,低位在后n0 x00000064,00000000 00000000 00000000 01100100n0 x14000064,00010100 00000000 00000000 01100100前011001000000000000000000后00000000前000000000000000000000000后01100100little endian:高位在后,低位在前big-endian:高位在前,低位在后0 x000000640 x14000064前0110010000000

17、00000000000后00010100前000101000000000000000000后011001004.浮点数编码规范举例n对于大小为32-bit的浮点数n其第31 bit为符号位,为0则表示正数,反之为负数,其读数值用s表示;n第3023 bit为幂数,其读数值用e表示;n第220 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;n则按照规定,该浮点数的值用十进制表示为:(-1)s *(1+x)*2(e-127)实例n设有浮点数,其16进制为49E48E68Hn0 100 1001 1 110 0100 1000 1110 0110 1000ns e 指数

18、x 小数部分ne=(100 1001 1)B=147 nx=(0.110 0100 1000 1110 0110 1000)B n =0.78559589385986328125n则该浮点数的十进制表示=(-1)s *(1+x)*2(e-127)=(-1)0 *(1+0.78559589385986328125)*2(147-127)=1872333.0 数据内外部表示示例1-整数1234567 或 0X0012D6871.外部表示:人写的或给人看的整数2.编码方案:补码,正数即为原码(0000 0000 0001 0010 1101 0110 1000 0111)B 1)内存存储方案1(微机

19、字节序):用连续的4个字节存,低位在前,高位在后(1000 0111 1101 0110 0001 0010 0000 0000)B2)内存存储方案2(主机字节序):也用连续的4个字节存,但高位在前,低位在后(0000 0000 0001 0010 1101 0110 1000 0111)B因此,若用VC跟踪程序时,查看保存该数的4个字节存储空间中的内容时,会显示为:3.机器内部表示:数据内外部表示示例2-实数即为0X4640E6662.单精度浮点数二进制编码(0100 0110 0100 0000 1110 0110 0110 0110)B(0110 0110 1110 0110 0100

20、0000 0100 0110)B(0100 0110 0100 0000 1110 0110 0110 0110)B1.外部表示:人写的或给人看浮点数12345.6 或 1.23456E4 设为float类型1)内存存储方案1(微机字节序):用连续的4个字节存,低位在前,高位在后2)内存存储方案2(主机字节序):也用连续的4个字节存,但高位在前,低位在后因此,若用VC跟踪程序时,查看保存该数的4个字节存储空间中的内容时,会显示为:3.机器内部存储表示5.常用字符编码ASCII码nASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。n标准 ASCII

21、码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号,以及在美式英语中使用的特殊控制字符。n032及127(共34个)是控制字符或通讯专用字符;n33126(共94个)是字符n4857为0到9十个阿拉伯数字;n6590为26个大写英文字母n97122号为26个小写英文字母n其余为一些标点符号、运算符号等 n后128个称为扩展ASCII码 6.显示或输出数据n常用显示(打印)函数nprintf 将信息送到标准输出(一般送到屏幕或特定窗口)nprintf(格式描述串,其他参数);n第一个参数应是字符串,可以有其他参数。n如果“格式描述串”里没有%,也没

22、有其他参数,printf函数将列出格式描述串。nprintf(WelcomentonBeijing!n);n显示三行字符:nWelcomentonBeijing!例#include int main()printf(Welcomen);printf(ton);printf(Beijing!n);return 0;程序执行也输出三行:WelcometoBeijing!7.Escape Sequence 转义序列n字符格式串中%开始的内容具有特殊意义,是一种内容填充格式转换描述,指明希望填充在字符串该位置的值以何种格式填充到字符中。n以十进制格式输出整数nprintf(”Test:%d+%d=%d

23、n,0 x0a,3,13);n输出浮点数nprintf(len:%f,width:%f,area:%fn,n 2.2,3.5,7.7);n格式串里的普通字符直接输出,其中的转换描述用对应参数的转换结果替代。常用转换n转换描述 实现的转换 对应参数的类型n%d10进制整数转换输出 整型n%ld长整数转换输出 long 类型n%f实数转换输出 double 类型n%lf实数转换输出long double类型n%s输出字符串字符串n%c输出字符字符n%x以十六进制格式输出 整数n详细内容见参考书之附录I与J或邮箱中材料相关注意事项n转换描述和“其他参数”个数一致。n转换描述和对应参数的类型必须一致。

24、n如果程序里用 printf,最前面应当写n#include n通知编译程序,需要使用标准库的输入输出函数。n在%和转换字符之间可写一个整数,表示输出宽度。对浮点数可写%8.4f 表示8位精度,4位小数:nprintf(%10s:%4d%8.1fn,Li Ming,2,88.4);五、运算符、表达式与计算Operators,Expressions and Computation定义与示例n表达式 Expressionn描述计算的最基本结构n由计算对象(Operand)和运算符“按一定规则”构成。n运算符 Operatorn描述运算的特殊符号,C 语言的所有运算符都用一个或两个特殊字符表示(有一

25、个例外)n例n237+23*37-141.算术运算符 Arithmetic Operatorn运算符使用形式 意义n+一元和二元运算符一元正号,二元加法n-一元和二元运算符一元负号,二元减法n*二元运算符乘法运算n/二元运算符除法运算n%二元运算符取模运算(求余数)n由+和-的上下文可确定是“一元”还是“二元”。n%只能用于整型,其余可用于各种算术类型。nUnary Operator&Binary Operator2.算术表达式 Arithmetic Expressionn形式与数学的算术表达式类似n-(28+32)+(16*7-4)n25*(3-6)+234n同类型值的运算结果仍是该类型的值

26、。n例n3+5计算结果是int类型的8n3L+5L的结果是longn3.2+2.88的结果是doublen应在运算对象和运算符间适当加空格。例n计算半径为 6.5 厘米的圆球体积。用 printf 输出计算结果,程序:#include int main()printf(V=%lf cm3n,(3.1416*6.5*6.5*6.5)*4.0/3.0);return 0;n运行时输出:V=1150.349200 cm33.表达式的求值n表达式计算又称“表达式求值”。一个表达式的意义就是它求出的值。nC语言明确规定了表达式计算过程。包括几方面n 优先级n 结合方式n(多个)运算对象的求值顺序n括号4

27、.优先级 priorityn优先级n运算符在表达式中相邻出现时,优先级高的运算符先算。(附录A 运算符表)n算术运算符分三个优先级n一元运算符:+,-高n二元运算符:*,/,%中n二元运算符:+,-低n例n5/-3+4*65.结合方式与括号n结合方式 associative lawn同优先级运算符相邻时的计算顺序n一元算术运算符自右向左结合,二元算术运算符自左向右结合。n例:166/8*5/3n括号n改变计算顺序,括号括起的部分先算。n-(2+6)*4)/(3+5)n括号是控制计算顺序的手段。关于求值顺序n例n(5+8)*(6+4)n(5+8)和(6+4)中哪个先做?nC 对此问题无规定。n程

28、序中不应写依赖特殊计算顺序的表达式,那样将无法保证得到的结果nC 里可以写出对求值顺序敏感的表达式,但不要去写这种表达式n在表达式比较复杂的时候,应尽量加上括号6.计算和类型n表达式计算中有许多与类型有关的问题。n例,下面表达式对的结果不同n14/8*12 和 14*12/8n1*3/3 和 1/3*3nint数据计算得到int结果nint采用整除,商是整数,余数丢掉nlong类型与int一样。所有整数类型都如此n各种实数类型的情况类似水库漫坝、溢出7.算术计算的溢出 overflown每个类型有明确取值范围;n计算有确定的结果类型;n计算中结果超出类型表示范围称为溢出。nC程序对溢出不报错,

29、溢出后的计算不再有意义。n例,若 int 由16位表示,下面表达式有问题:n32766+18n如果可能,应选择合适类型。如改为n32766L+18L n实数计算也可能发生溢出(上溢和下溢)。8.混合类型计算和类型转换n运算对象类型不同时形成混合类型计算n例如:3.27+201n各算术类型的加法都用+表示,编译程序根据运算对象类型确定怎样做,如n3+2用 int 类型的加法运算n3.0+2.0用 double 类型的加法运算n出现混合类型计算,程序自动将运算对象转换到相同类型的值,而后计算。n这些转换属自动类型转换。这种转换不需要在程序里明确写出。自动类型转换n自动类型转换原则n把表示范围小的类

30、型的值转换为表示范围大的类型的值。n各种类型的表示范围从小到大是nint long float double long doublen例:32767+2Ln混合类型计算中自动插入数值转换动作,由原类型的值产生出新值后参与计算。n写程序或读程序都应注意n表达式中计算对象的类型n子表达式计算结果的类型n哪些地方会发生类型转换,怎么转换示例2L34.53.0*13.52.0+15.5值的类型转换表达式2L+3*4.5的计算过程显式类型转换n如果自动转换不符合需要,可要求做特定类型转换,称为强制转换或类型强制。n写法n表达式前写括起的类型名。n例n(int)(3.6*15.8)+4n实数类型转为整型时

31、丢掉小数部分。与类型转换有关的问题n类型转换可能丢失信息;n写强制转换时必须注意,若被转换值在结果类型里无法表示,结果无法预计。n显式类型转换看作一元运算符,与其他一元运算符有同样优先级和结合方式;n类型转换是值转换,从一个数据值出发,产生另一类型的新值,原值不变;n数值类型间都可以转换。六、现成计算功能与函数库初步站在巨人的肩膀上,使你比巨人还高使有现成功能写程序,而不是什么功能都重头写起1.程序的开发重要思想n思想n充分利用现成的、别人开发好的计算或处理功能,以提高开发效率。n相类似的或相关的一组现成功能常被打包在一起,构成一个功能集合体,称为n功能包,功能库,函数包,函数库n各种开发工具

32、或应用平台环境都会提供大量的现成功能库或函数库,提供给开发人员使用,以提高开发效率。n各种C开发平台也会提供大量不同的函数库供开发者使用。2.函数库及其使用n标准函数库n标准库提供了许多函数,实现许多功能n其中有一组数学函数,实现常用数学函数计算n函数调用n需要知道名字、使用方式、能完成的工作。n不必关心功能如何实现。n例,调用标准函数 sinn2.0*sin(2.4)为什么要提供这些标准函数库?3.函数使用n函数值可参与计算nsin(2.4)*sin(3.98)n括号里是实际参数,简称实参,得到结果或称返回值。n例,计算两边长分别为 3.5 和4.72,夹角为 37 度的三角形的面积:n3.

33、5*4.72*sin(37.0/180.0*3.1416)/2.0n函数使用形式n函数名(实参,.,实参)n函数通常规定了需要几个实参和实参类型。n标准库函数名都由小写字母拼写。数学函数的使用n主要数学函数nsin cos tan asin acos atan sinh:双曲正弦函数cosh tanh exp:以自然对数e为底指数函数log log10 sqrt fabsn乘幂:double pow(double,double)n实数余数:double fmod(double,double)n例npow(2.5,3.4)nfmod(103.45,3.14259)n使用标准库数学函数,应程序前面

34、写n#include n例n求两邻边长为 3.5 和 4.72 米,两边夹角为 37 度的三角形的面积。#include /标准输入输出库#include /数学库int main()printf(Area:%f m2n,3.5*4.72*sin(37.0/180*3.1416)/2);return 0;函数调用中的类型转换n实参类型与函数要求不符时,表达式值自动转为函数要求类型的值后再送给函数。n例,下面表达式计算中将出现两次类型转换nsin(2)*sin(4)n设f的类型特征为 int f(int),下表达式计算会出现哪些类型转换n4.23*f(3*2.7)n例:三角形三边长为例:三角形三

35、边长为3、5、7厘米,求其面积。厘米,求其面积。n根据已知三边求三角形面积公式,可写出下面程序:根据已知三边求三角形面积公式,可写出下面程序:#include#include int main()printf(%fn,sqrt(3+5+7)/2.0)*(3+5+7)/2.0-3)*(3+5+7)/2.0-5)*(3+5+7)/2.0-7);return 0;确保采用实数除法本部分小问题n1.在每个程序前面加上注释的目的是什么?n2.函数库的目的是什么?n3.ANSI C定义一个称为math的库,要使用这个库,应该在程序中加入什么?n4.每个C程序都要定义的函数的名字是什么?n5.n是什么意思?n6.参数是什么?有什么用?本部分结束Q/A

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!