C语言课件完整版(精华).ppt

上传人:小飞机 文档编号:3146170 上传时间:2023-03-11 格式:PPT 页数:484 大小:11.17MB
返回 下载 相关 举报
C语言课件完整版(精华).ppt_第1页
第1页 / 共484页
C语言课件完整版(精华).ppt_第2页
第2页 / 共484页
C语言课件完整版(精华).ppt_第3页
第3页 / 共484页
C语言课件完整版(精华).ppt_第4页
第4页 / 共484页
C语言课件完整版(精华).ppt_第5页
第5页 / 共484页
点击查看更多>>
资源描述

《C语言课件完整版(精华).ppt》由会员分享,可在线阅读,更多相关《C语言课件完整版(精华).ppt(484页珍藏版)》请在三一办公上搜索。

1、1,计算机程序设计基础(C语言),2,1.课堂要求很严格。2.多听,适时做笔记。3.上课不能讲闲话。4.课后认真完成作业、实验报告。5.有问题,及时与老师联系。,教 学 要 求,3,选用教材与参考书,主教科书 顾治华、陈天煌等 C语言程序设计机械工业出版社 2007.2参考教材 顾治华、陈天煌等C语言程序设计 实验指导 机械工业出版社 2007.2参考书 谭浩强 C语言程序设计 清华大学出版社,4,课程内容,第一章 C语言程序设计概述 第二章 算法及算法设计简介 第三章 数据描述与基本操作第四章 选择结构程序设计 第五章 循环结构程序设计 第六章 数组与指针第七章 函数与模块化程序设计方法,5

2、,第一章 语言程序设计概述,6,1.1 程序设计的概念1.2 语言的产生及发展1.3 简单程序介绍1.4 C程序的上机步骤1.5 C语言的基本语法和基本结构 1.6 本章要点小结,7,1.1 程序设计的概念,1.1.1 程序设计语言1.1.2 程序设计的概念,8,计算机,计算机是用来延伸人的能力的工具,需要人来驾驭我们的职责是让非计算机专业的人更容易驾驭它完成这一目标的主要手段之一就是“编程(Programming)”,9,计算机基本工作过程,整个过程的执行者是硬件,但硬件是受软件控制的编程,就是编写软件,使硬件按照人的意图工作,10,计算机基本工作过程,源程序和输入数据,输出结果,取出数据,

3、存入数据,操作命令,存取命令,取出程序指令,输入输出命令,计算结果,CPU,“冯诺依曼机”结构,大脑,眼/耳/口,11,软件的形成,软件(Software)的形成程序员(Programmer)编写程序源代码(Source Code)编译器(Compiler)把源代码转换为可被计算机理解的机器代码(Machine Code)并把机器代码以可执行文件(Executable File)的形式保存在磁盘上,12,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减,用助记符号描述的指令系统如 ADD A,B,程序设

4、计是数据被加工的过程,客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,1.1.1 程序设计语言,13,程序设计语言的故事,计算机为什么用二进制呢?为什么不用我们日常熟悉的十进制呢?二进制在在电器元件中容易实现 计算机进行二进制运算比进行十进制运算要简单得多,14,程序设计语言的故事,机器语言编写的1+1程序汇编语言(Assemble Language)编写的1+1程序,MOV AX,1ADD AX,1,15,程序设计语言的故事,BASIC语言编写的1+1程序C语言编写的1+1程序,PRINT 1+1,#include

5、 main()printf(%dn,1+1);,16,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula 67,Smalltalk 80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,17,1.1.2 程序设计的概念,程序设计就是用计算机语言来编写程序的过程。什么是程序?著名计算机科学家沃思提出有名的公式:算法+数据结构=程序,18,算法即问题的求解过程、计算机的工作步骤。数据结构即对参与运算的数据怎样进行合理

6、的组织、安排,以提高程序运行的效率和求解的精确性。,程序的两大要素:数据结构、算法,19,1.2 C语言的产生和发展,1.2.1 C语言的产生 1.2.2 C语言的发展1.2.3 C语言的特点,20,1.2.1 C 语言的产生,一切从一个叫“Space Travel”的电子游戏开始的Ken Thompson为了让他的游戏能在PDP-7上运行,用汇编语言给PDP-7写了一个操作系统UNIX汇编太不好用了,Thompson需要高级语言试验了一些高级语言,包括Fortran,都不理想他在BCPL基础上,自己设计了一个B语言UNIX开始发展,B也不够用了Dennis Ritchie加入,把B改造成C

7、开始用C重写UNIX,21,1.2.2 C 语言的发展,C语言发展过程产生过程时间:19721973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:K&R合著The C Programming LanguageANSI C:1983年87 ANSI C:1987年1990年国际标准的ANSI C,22,Ritchie和Thompson在开发UNIX,23,接受美国国家技术勋章,24,C语言的祖师爷Dennis M.Ritchie,25,Ritchie漫画像,26,C语言本身既有一般高级语言的特点,又由低级语言(汇编语言)

8、的特点。C语言是一种结构化的程序设计语言,它具有实现顺序、分支、循环三种基本结构化控制的语句。C语言简洁,紧凑,使用方便灵活。只有32个保留字,9种控制语句,书写形式自由。数据类型丰富。有整型、实型、字符型、数组型、指针型、结构体型、共用体型和枚举型等。,1.2.3 C语言的特点,27,5、运算功能强。有32种运算符,包括了算术运算、关系运算、逻辑运算、位运算、指针运算等。6、目标代码质量高,运行速度快。7、可移植性强。8、语法限制不太严格,程序设计自由度大。,1.2.3 C语言的特点,28,C 语言是编译型语言,一种编译语言对应一种编译器 按照该语言的语法编写程序源代码,把自己的思想融入到代

9、码中 编译器读入源代码,把程序员的意图转换成可执行程序,供他人使用,29,C语言与计算机系统层次关系,30,1.3 简单C程序介绍,31,C程序格式和结构特点,第一个程序 Hello,World!/*example1.1 The first C Program*/#include main()printf(“Hello,World!”);,输出:Hello,World!,32,/*example1.2 calculate the sum of a and b*/#include/*This is the main program*/main()int a,b,sum;a=10;b=24;sum

10、=add(a,b);printf(”sum=%dn,sum);/*This function calculates the sum of x and y*/int add(int x,int y)int z;z=x+y;return(z);,运行结果:sum=34,33,格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式,main().,main()int i,j,sum;sum=0;for(i=1;i10;i+)for(j=1;j10;j+)sum+=i*j;printf(“%dn”,sum);,优秀程序员的素质之一:使用TAB缩进对齐有足够的注释有

11、合适的空行,34,结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/*/为注释,不能嵌套不产生编译代码,例:/*This is the main/*of example1.1*/*/,编译预处理命令,函数首部:包括函数名、函数类型、函数参数名、参数类型。函数体:声明部分,执行部分。,35,1.4 C程序的上机步骤,36,程序代码的录入,生成源程序*.c,语法分析查错,翻译生成目标程序*.obj,与其它目标程序或库链接装配,生成可执行程序*.e

12、xe,开始,编辑,编译,有错?,执行,连接,结果正确,结束,可执行目标程序f.exe,源程序f.c,目标程序f.obj,库函数和其他目标程序,Yes,No,Yes,No,37,1.5 C语言的基本语法和结构,1.5.1 C语言的基本语法 1.5.2 C语言的基本结构,38,1.5.1 C语言的基本语法,标识符关键字运算符分隔符常量注释符字符集,39,标识符,常量、变量、语句标号以及自定义函数的名称只能是字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线标准C不限制标识符长度,但一般不超过8字符标识符大小写有区别标识符名最好能“顾名思义”,40,32个关键字:(由系统定义,不能重作其它

13、定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while,41,9种控制语句:if()else switch casefor()while()dowhile()continuebreakgotoreturn,42,34种运算符:算术运算符:+-*/%+-关系运算符:=

14、!=逻辑运算符:!&|位运算符:|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它:()-,43,1.5.2 C语言的基本结构,(1)顺序结构,A,B,a,b,44,(2)选择结构,或称分支结构,此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框,a,b,B,A,p,不成立,成立,45,(3)循环结构,它又称为重复结构,即反复执行某一部分的操作。又两类循环结构:,a.当型(while型)循环结构,b.直到型(Until型)循环结构,46,1.6 本章要点小结,程序设计的概念C语

15、言的产生及发展C语言的特点C程序的介绍和上机步骤C语言的基本语法和结构,47,本章课堂练习,(1)以下说法中正确的是().A)C语言程序总是从第一个函数开始执行 B)在C语言程序中,要调用的函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言程序中的main()函数必须放在程序的开始部分,48,解答:C解释:C语言程序总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须

16、的。,49,(2)以下叙述不正确的是A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面,50,解答:D解释:凡是用“/*”和“*/”括起来的文字,都是注释。其出现的位置可以任意。,51,(3)下列标识符中,合法的变量名有:A)a.b B)$888 C)A1 D)3x56,52,解答:C解释:变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名

17、和函数名中的英文字母用小写,以增加可读性。,第二章 程序的灵魂:算法,一个程序主要包括以下两方面的信息:(1)对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式这就是数据结构(data structure)(2)对操作的描述。即要求计算机进行操作的步骤也就是算法(algorithm),数据是操作的对象操作的目的是对数据进行加工处理,以得到期望的结果著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法+数据结构=程序,一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示算法、数据结构、程序设计方法

18、和语言工具是一个程序设计人员应具备的知识算法数据结构程序设计方法语言工具和环境程序,算法是解决“做什么”和“怎么做”的问题程序中的操作语句,是算法的体现不了解算法就谈不上程序设计,2.1 算法的概念2.2 算法的特性2.3 算法的表示2.4 结构化程序设计方法,2.1 算法的概念,广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”对同一个问题,可以有不同的解题方法和步骤为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法,计算机算法可分为两大类别:数值运算算法非数值运算算法数值运算的目的是求数值解非数值运算包括的面十分广泛,最常见的是用于事务管理领域,2.1 算

19、法的概念,可以用最原始的方法进行:步骤1:先求1*2,得到结果2。步骤2:将步骤1得到的乘积2再乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。这就是最后的结果。,例2.1 求12345 100,太繁琐,例2.1 求12345,简单算法的举例概念,改进的算法:设变量p为被乘数变量i为乘数用循环算法求结果,求12345,简单算法的举例概念,S1:使p=1,或写成1pS2:使i=2,或写成2iS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipS4:使i的值加1,即i+1 iS5:如果i不大于5,返回重新执行S3;否则,算法结束最后得到p的值就是 5!的值

20、,若是100,求什么?,简单算法的举例概念,例2.2 有50个学生,要求将成绩在80-90分的学生的学号和成绩输出。用ni代表第i个学生学号,gi表示第i个学生成绩S1:1iS2:如果90 gi80,则输出ni和gi,否则不输出S3:i+1iS4:如果i50,返回到步骤S2,继续执行,否则,算法结束,2.1 算法的概念2.2 算法的特性2.3 算法的表示2.4 结构化程序设计方法,一个有效算法应该具有以下特点:(1)有穷性。一个算法应包含有限的操作步骤,而不能是无限的。(2)确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。,2.2 算法的特性,一个有效算法应该具有以下特

21、点:(3)有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。(4)有一个或多个输出。算法的目的是为了求解,“解”就是输出。没有输出的算法是没有意义的。(5)有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。,2.2 算法的特性,对于一般最终用户来说:他们并不需要在处理每一个问题时都要自己设计算法和编写程序可以使用别人已设计好的现成算法和程序只需根据已知算法的要求给予必要的输入,就能得到输出的结果,输入3个数,黑箱子,3个数中最大数,求3个数的最大数,2.2 算法的特性,2.1 算法的概念2.2 算法的特性2.3 算法的表示2.4 结构化程序设计方法,常用的方法有

22、:自然语言传统流程图结构化流程图伪代码,2.3 算法的表示,自然语言表示法,2.1节例子介绍的算法是用自然语言表示的用自然语言表示通俗易懂,但文字冗长,容易出现歧义性用自然语言描述包含分支和循环的算法,不很方便除了很简单的问题外,一般不用自然语言,传统的程序流程图,用一些图形符号形象直观的表述算法,上表给出了ANSI 规定的程序流程图符号。,流程图是用一些图框来表示各种操作用图形表示算法,直观形象,易于理解,x0,Y,N,一个入口,两个出口,传统的程序流程图,位置不够,防止交叉,传统的程序流程图,例2.4 将例2.1的算法用流程图表示。求12345如果需要将最后结果输出:,1t,输出t,i5,

23、开始,2i,t*it,i+1i,结束,N,Y,通过以上几个例子可以看出流程图是表示算法的较好的工具一个流程图包括以下几部分:(1)表示相应操作的框(2)带箭头的流程线(3)框内外必要的文字说明流程线不要忘记画箭头,否则难以判定各框的执行次序,传统的程序流程图,特点:绘制简单,描述直观,之前广泛使用。缺点:程序流程图不易表示算法或程序的层次结构。用箭头表示的控制流可能引起随意的转移控制。可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构。不易表示数据结构和程序模块之间的关系。,传统的程序流程图,NS图表示法,1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程

24、图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框。,这种流程图又称NS结构化流程图(N和S是两位美国学者的英文姓名的第一个字母)。这种流程图适于结构化程序设计,因此很受欢迎。,N-S流程图用以下的流程图符号:,顺序结构,选择结构,循环结构(当型),循环结构(直到型),NS图表示法,用伪码表示算法,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。,BEGIN(算法开始)1=iWhile ii1=i While i=80 and gi

25、iEND(算法结束),前例用伪代码表示算法如下:,用计算机语言表示算法,要完成一项工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。,用C语言程序实现前例如下,#include/*打印出50名同学中成绩在80-90分者*/main()int i,g50,n50;for(i=0;i=80),fc1.c,2.1 算法的概念2.2 算法的特性2.3 算法的表示2.4 结构化程序设计方法,2.4 结构化程序设计方法简介,荷兰学者E.W.dijkctra提出了结构化程序设计(structured programming)的理论,成为

26、70年代中期至90年代初的程序设计主流。结构化程序设计方法提出了一些大家都要遵循的原则,这些原则归纳为32个字:,自顶向下,逐步细化。模块设计,结构编码。清晰第一,效率第二。书写规范,缩进格式。,顺序、分支和循环三种基本结构的共同特点:,(1)只有一个入口。,(2)只有一个出口。,(3)结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都有从入口到出口的路径通过它。,(4)结构内不存在“死循环”(无终止的循环)。,结构化程序,所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。,结构化程序设计方法,结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行

27、。每个阶段的问题都控制在人们容易理解和处理的范围内。,2.4 本章要点小结,算法的概念算法的特性 算法的表示 结构化程序设计方法,89,第三章 数据描述与 基本操作,90,3.1 基本数据类型3.2 运算符和表达式3.3 输入输出操作,91,3.1 基本数据类型,3.1.1 C语言的数据类型3.1.2 常量和变量3.1.3 数据类型转换,92,3.1.1 C语言的数据类型,(一)什么是数据类型?(二)C语言的数据类型有哪些?,93,(一)什么是数据类型?,数据结构+算法=程序,C语言中以“数据类型”形式存在,对数据的描述,对操作的描述,94,数据类型,基本类型,整型(有符号、无符号)字符型实型

28、(浮点型)枚举类型,构造类型,数组类型结构体类型共用体类型,指针类型,空类型,单精度型双精度型,在程序中对用到的所有数据都必须指定其数据类型.,?,不同类型的数据,所占内存的字节数不同,对应的操作也不相同。,(二)C的数据类型,95,整型数据,1.整型数据的分类最基本的整型类型基本整型(int型):占2个或4个字节(32位编译系统)短整型(short int):VC+6.0中占2个字节长整型(long int):VC+6.0中占4个字节双长整型(long long int):C99新增的,64位占8个字节,VC+6.0中定义为 _int64,96,2.整型变量的符号属性整型变量的值的范围包括负

29、数到正数可以将变量定义为“无符号”类型扩充的整形类型:有符号基本整型 signed int;无符号基本整型 unsigned int;有符号短整型 signed short int;无符号短整型 unsigned short int;有符号长整型 signed long int;无符号长整型 unsigned long int;,整型数据,97,字符型数据,字符是按其代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点,98,1.字符与字符代码大多数系统采用ASCII字符集字母:A Z,a z数字:09专门符号:29个:!”#&()*等空格符:空格、水平制表

30、符t、换行n等不能显示的字符:空(null)字符(以0表示)、鸣铃(以a表示)、退格(以b表示)、回车(以r表示)等,字符型数据,99,字符1和整数1是不同的概念:字符1只是代表一个形状为1的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节,字符型数据,100,2.字符变量用类型符char定义字符变量 char c=?;系统把“?”的ASCII代码63赋给变量cprintf(“%d%cn”,c,c);输出结果是:63?,字符型数据,101,浮点型数据,浮点型数据是用来表示具有小数点的实数float型(单精度浮点

31、型)编译系统为float型变量分配4个字节数值以规范化的二进制数指数形式存放,102,浮点型数据是用来表示具有小数点的实数float型(单精度浮点型)double型(双精度浮点型)编译系统为double型变量分配8个字节15位有效数字,浮点型数据,103,几种基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随编译器不同而不同,上表以VC+6.0为例:,104,举例:数据溢出(Overflow)的危害,一台安装了Windows 95/98的机器,如果连续运行49.7天,可能死机 原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器个unsign

32、ed long unsigned long的最大值:4294967295 一天有24*60*60*1000=86400000毫秒 4294967295/86400000=49.71026961805 当49.7天的时候,此计数器会溢出,引起死机,105,(一)常 量(二)变 量,3.1.2 常量与变量,106,预备知识:bit,Byte,Word,bit,位 Byte,字节 1 B=8 b Word,字 1 W=2 B Kilobyte(KB),1 KB=1,024 B Megabyte(MB),1 MB=1,024 KB Gigabyte(GB),1 GB=1,024 MB Terabyte

33、(TB)1 TB=1,024 GB,107,一个字节有多大?可以表示数字0255 保存一个字符(英文字母、数字、符号),ASCII编码 两个字节保存一个汉字,108,预备知识:二进制,世界上有(10)2种人,1种人懂二进制,1种人不懂二进制 一个位有多大?只能是“0”或者“1”,这叫二进制二进制诠释了计算机的哲学 种类众多的复杂事物都是由若干种简单事物构成,109,1.常量:在程序运行过程中,其值不能被改变的量整型常量:如1000,12345,0,-345实型常量十进制小数形式:如0.34-56.79 0.0指数形式:如12.34e3(代表12.34103)字符常量:如?转义字符:如n字符串常

34、量:如”boy”符号常量:#define PI 3.1416,3.1.2 常量与变量,110,字符与字符串的区别有哪些?,定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,111,2.变量:在程序运行期间,变量的值是可以改变的变量必须先定义,后使用定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址从变量中取值,实际上是通过变量名找到相应的内

35、存地址,从该存储单元中读取数据,3.1.2 常量与变量,112,方式:1、定义变量的同时赋初值(也叫变量初始化)。格式:数据类型 变量名=初值,变量名2=初值2;2、通过一个赋值语句给变量赋初值。格式:变量名=初值;,变量赋初值,出现在函数体的声明部分,出现在函数体的执行部分,int a,b=3;,int a,b;b=3;,113,1、程序中用到的变量必须“先定义(declare),后使用”。2、C语言的关键字不能用作变量名。3、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。4、定义变量时,给几个变量赋相同的初值,应写成:int a=3,b=3,c=3;不能写成:i

36、nt a=b=c=3;5、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行类型转换。,关于变量以及变量赋初值的几点说明,114,变量举例,include void main()int student,age;int if=adrress=1;float score=90;stadent=2;Age=20.7;printf(%d%d%d%f,if,student,age,score);,本程序中有几处错误?,undeclared identifier,115,变量使用要注意长度,不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度程

37、序在Turbo C2.0和Visual C+6.0下的运行结果不同,注意!,#include void main()printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);,116,3.1.3 数据类

38、型转换,(一)隐式转换(自动转换)(二)显式转换(强制转换),117,(一)隐式转换(自动转换),转换发生条件,运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的 变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换,先转换、后运算,118,隐式转换(自动转换),同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种long double double float=long=int=short char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告

39、),见教材28页,119,隐式转换(自动转换),不同类型数据间的混合运算:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算;(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型;(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算.,120,int i;float f;double d;long e;i=2;f=2.5;d=3.9;e=3;,10+a+i*f-d/e,107,

40、5.0,1.3,112.0,110.7,int,double,double,double,double,思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。,121,(二)显式转换(强制转换),一般形式,(要转换成的数据类型)(被转换的表达式)注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。,举例,float x,y;x=2.3;y=4.5;(int)(x+y)/6(int)(int)x+y/6.5(double),说明,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。,122,#include void main()float

41、 x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,123,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#include void main()float a,b,c,s;a=3;b=4;c=5;s=1/2*(a+b+c);printf(s=%8.2f,s);,s=0.00,程序运行结果:,?,s=6.00,程序运行结果:,改为:1.0/2(1/2.0)或(float)1/2(1/(float)2),124,C

42、运算符简介 算术运算符和算术表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式 关系运算符和表达式 逻辑运算符和表达式 条件运算符与表达式,3.2 运算符与表达式,125,详见254页!,C运算符简介,126,运算符必须有运算对象,分为3类:运算对象是一个的,则称为单目运算 运算对象是两个的,则称为双目运算 运算对象是三个的,则称为三目运算,C运算符简介,127,基本算术运算符,+-*/%,说明,例:5/3=1-5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和结合性,先乘除、后加减,有括号先算括号。自左至

43、右,常量、变量、函数等,说明,两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数 5%3=2,例:a*b/c-1.5+a,算术运算符和算术表达式,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,128,格式:前置:+i,-i(在使用i之前,使i的值加(减)1)后置:i+,i-(在使用i之后,使i的值加(减)1),自增、自减运算符,作用:自增运算符()使单个变量的值增1;自减运算符()使单个变量的值减1。,例,i=3;A)j=+i;j=i+;j=-i+;,i=i+1,i=i-1,?j,i,A)j=4

44、 i=4j=3 i=4j=-3,+和-结合方向是“自右至左”,129,(1)自增、自减运算是语言特有的,常用于循环语句中,使循环控 制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运算符,不能用于常量和表达式。例如,5+、-(a+b)等都是非法的。(3)+和-的结合方向为自右至左。(P30)(4)如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如i+;和+i;是一样的,都是使i加。(5)在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,说明,130,赋值运算符,简

45、单赋值运算符:=复合赋值运算符:+=,-=,*=,/=,%=,简单赋值运算符的一般形式为:变量=表达式它的作用是将一个表达式的值赋给一个变量。,复合赋值运算的一般格式为:变量 双目运算符=表达式 复合赋值运算符 它等价于:变量=变量 双目运算符(表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。,赋值运算符和赋值表达式,131,赋值表达式,格式:赋值表达式的值:被赋变量的值,类型转换,转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。,132,注意:将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内

46、,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,例1,float a;int b;a=1.2;b=a*3;,?b,b=3,例2,a=b=5;a=7+(b=8),?a,b,a=5;b=5a=15;b=8,自右而左的结合性,133,算术自反赋值运算符,(1)运算规则,对象数,名称,运算符,运算规则,运算对象,运算结果,结合性,双目,加赋值,减赋值,乘赋值,除赋值,模赋值,*,/=,%=,a+=b相当于a=a+b,a=b相当于a=ab,a*=b相当于a=a*b,a/=b相当于a=a/b,a%=b相当于a=a%b,

47、数值型,数值型,自右向左,整型,整型,134,逗号运算符,,,逗号表达式,表达式1,表达式2,表达式n,说明,1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。,逗号运算符和逗号表达式,135,例1,a=3a=(3*5,a*4),?a,a=12,例2,a=3a=3*5,a*4,?a,a=15表达式的值为60,136,关系运算符及其优先次序,关系运算符:用来对两个数值进行比较的比较运算符

48、语言提供种关系运算符:(小于)=(小于或等于)(大于)=(大于或等于)=(等于)!=(不等于),优先级相同(高),优先级相同(低),137,关系、算术、赋值运算符的优先级,关系运算符及其优先次序,138,ca+b 等效于 c(a+b)ab=c 等效于(ab)=ca=bc 等效于 a=(bc),关系运算符及其优先次序,139,关系表达式,关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“”代表“真”,以“”代表“假”,140,关系运算注意:,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例 5278在C中

49、是允许的,值为,0,例 a0 结果为 A100 结果为,1,0,141,关系运算注意:,例 注意区分“=”与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为,0,142,逻辑运算符及其优先次序,3种逻辑运算符:&(逻辑与)|(逻辑或)!(逻辑非)&和|是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子,143,判断年龄在13至17岁之内?age=13&age65,逻

50、辑运算符及其优先次序,144,逻辑运算的真值表,逻辑运算符及其优先次序,145,逻辑运算符的优先次序!&|(!为三者中最高)与其他运算符的优先次序,!(高)算术运算符关系运算符&和|赋值运算符(低),逻辑运算符及其优先次序,146,逻辑表达式,逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”但在判断一个量是否为“真”时以0代表“假”,以非0代表“真”注意:将一个非零的数值认作为“真”,147,(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&b的值为1(3)a和b值分别为4和5,则a|b的值为1(4)a和b值分别为4和5,则!a|

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号