C语言课件完整版(精华)课件_第1页
C语言课件完整版(精华)课件_第2页
C语言课件完整版(精华)课件_第3页
C语言课件完整版(精华)课件_第4页
C语言课件完整版(精华)课件_第5页
已阅读5页,还剩963页未读 继续免费阅读

下载本文档

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

文档简介

计算机程序设计基础(C语言)1编辑版计算机程序设计基础(C语言)1编辑版

1.课堂要求很严格。2.多听,适时做笔记。3.上课不能讲闲话。4.课后认真完成作业、实验报告。5.有问题,及时与老师联系。教学要求2编辑版1.课堂要求很严格。教学要求2编辑版选用教材与参考书主教科书

顾治华、陈天煌等

《C语言程序设计》

机械工业出版社

2007.2参考教材顾治华、陈天煌等《C语言程序设计实验指导》

机械工业出版社2007.2参考书谭浩强《C语言程序设计》清华大学出版社3编辑版选用教材与参考书主教科书顾治华、陈天煌等《C语言程序课程内容第一章C语言程序设计概述

第二章算法及算法设计简介

第三章数据描述与基本操作第四章选择结构程序设计

第五章循环结构程序设计

第六章数组与指针第七章函数与模块化程序设计方法4编辑版课程内容第一章C语言程序设计概述4编辑版第一章

C语言程序设计概述5编辑版第一章

C语言程序设计概述5编辑版1.1程序设计的概念1.2C语言的产生及发展1.3简单C程序介绍1.4

C程序的上机步骤1.5C语言的基本语法和基本结构1.6本章要点小结6编辑版1.1程序设计的概念6编辑版1.1程序设计的概念1.1.1程序设计语言1.1.2程序设计的概念7编辑版1.1程序设计的概念1.1.1程序设计语言7编辑版计算机计算机是用来延伸人的能力的工具,需要人来驾驭我们的职责是让非计算机专业的人更容易驾驭它完成这一目标的主要手段之一就是

“编程(Programming)”8编辑版计算机计算机是用来延伸人的能力的工具,需要人来驾驭8编辑版计算机基本工作过程整个过程的执行者是硬件,但硬件是受软件控制的编程,就是编写软件,使硬件按照人的意图工作9编辑版计算机基本工作过程整个过程的执行者是硬件,但硬件是受软件控制计算机基本工作过程输入/输出设备存储器运算器控制器源程序和输入数据输出结果取出数据存入数据操作命令存取命令取出程序指令输入输出命令计算结果CPU“冯·诺依曼机”结构大脑眼/耳/口程序和数据硬盘CPU内存执行结果10编辑版计算机基本工作过程存储器运算器控制器源程序输出结果取出数据存软件的形成软件(Software)的形成程序员(Programmer)编写程序源代码(SourceCode)编译器(Compiler)把源代码转换为可被计算机理解的机器代码(MachineCode)并把机器代码以可执行文件(ExecutableFile)的形式保存在磁盘上11编辑版软件的形成软件(Software)的形成11编辑版机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加

10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象1.1.1程序设计语言12编辑版机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0程序设计语言的故事计算机为什么用二进制呢?为什么不用我们日常熟悉的十进制呢?二进制在在电器元件中容易实现计算机进行二进制运算比进行十进制运算要简单得多13编辑版程序设计语言的故事计算机为什么用二进制呢?13编辑版程序设计语言的故事机器语言编写的1+1程序汇编语言(AssembleLanguage)编写的1+1程序101110000000000100000000000001010000000100000000MOVAX,1ADDAX,114编辑版程序设计语言的故事机器语言编写的1+1程序10111000M程序设计语言的故事BASIC语言编写的1+1程序C语言编写的1+1程序PRINT1+1#include<stdio.h>main(){ printf("%d\n",1+1);}15编辑版程序设计语言的故事BASIC语言编写的1+1程序PRINT5254565860626466687072747678808284868890929496AdaALGOL60ALGOL68PascalModula-2CPLBCPLBCC++JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula67Smalltalk80BASICANSI-BASICQBASICVBFORTRAN9016编辑版5254565860626466687072747678801.1.2程序设计的概念程序设计就是用计算机语言来编写程序的过程。什么是程序?著名计算机科学家沃思提出有名的公式:算法+数据结构=程序17编辑版1.1.2程序设计的概念程序设计就是用计算机语言来编写程算法即问题的求解过程、计算机的工作步骤。数据结构即对参与运算的数据怎样进行合理的组织、安排,以提高程序运行的效率和求解的精确性。程序的两大要素:数据结构、算法18编辑版算法即问题的求解过程、计算机的工作步骤。程序的两大要素:数据1.2C语言的产生和发展1.2.1C语言的产生1.2.2C语言的发展1.2.3C语言的特点19编辑版1.2C语言的产生和发展1.2.1C语言的产1.2.1C语言的产生一切从一个叫“SpaceTravel”的电子游戏开始的……KenThompson为了让他的游戏能在PDP-7上运行,用汇编语言给PDP-7写了一个操作系统—UNIX汇编太不好用了,Thompson需要高级语言试验了一些高级语言,包括Fortran,都不理想他在BCPL基础上,自己设计了一个B语言UNIX开始发展,B也不够用了DennisRitchie加入,把B改造成C开始用C重写UNIX20编辑版1.2.1C语言的产生一切从一个叫“SpaceT1.2.2C语言的发展C语言发展过程产生过程时间:1972~1973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准标准C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年国际标准的ANSIC21编辑版1.2.2C语言的发展C语言发展过程21编辑版Ritchie和Thompson在开发UNIX22编辑版Ritchie和Thompson在开发UNIX22编辑版接受美国国家技术勋章23编辑版接受美国国家技术勋章23编辑版C语言的祖师爷DennisM.Ritchie24编辑版C语言的祖师爷DennisM.Ritchie24编辑版Ritchie漫画像

25编辑版Ritchie漫画像

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

一种编译语言对应一种编译器按照该语言的语法编写程序源代码,把自己的思想融入到代码中编译器读入源代码,把程序员的意图转换成可执行程序,供他人使用28编辑版C语言是编译型语言一种编译语言对应一种编译器28编辑版C语言与计算机系统层次关系29编辑版C语言与计算机系统层次关系29编辑版1.3简单C程序介绍30编辑版1.3简单C程序介绍30编辑版C程序格式和结构特点第一个程序Hello,World!/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}注释编译预处理函数语句输出:Hello,World!31编辑版C程序格式和结构特点第一个程序Hello,World!注/*example1.2calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;

sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}运行结果:sum=34语句预处理命令注释主函数子函数32编辑版/*example1.2calculat格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}main(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的素质之一:使用TAB缩进{}对齐有足够的注释有合适的空行33编辑版格式特点main()main()优秀程序员的素质之一:3结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法编译预处理命令①函数首部:包括函数名、函数类型、函数参数名、参数类型。②函数体:声明部分,执行部分。34编辑版结构特点例:/*Thisisthemain1.4C程序的上机步骤35编辑版1.4C程序的上机步骤35编辑版编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe开始编辑编译

有错?执行连接结果正确结束可执行目标程序f.exe源程序f.c目标程序f.obj库函数和其他目标程序YesNoYesNo36编辑版编辑链接编译执行程序代码的录入,语法分析查错,翻译与其它目标1.5C语言的基本语法和结构1.5.1C语言的基本语法1.5.2C语言的基本结构37编辑版1.5C语言的基本语法和结构1.5.1C语言1.5.1C语言的基本语法标识符关键字运算符分隔符常量注释符字符集38编辑版1.5.1C语言的基本语法标识符38编辑版标识符常量、变量、语句标号以及自定义函数的名称只能是字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线标准C不限制标识符长度,但一般不超过8字符标识符大小写有区别标识符名最好能“顾名思义”39编辑版标识符常量、变量、语句标号以及自定义函数的名称39编辑版32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile40编辑版32个关键字:(由系统定义,不能重作其它定义)40编辑版9种控制语句:if()~else~switch~case~for()~while()~do~while()continuebreakgotoreturn41编辑版9种控制语句:41编辑版34种运算符:算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-42编辑版34种运算符:42编辑版1.5.2C语言的基本结构(1)顺序结构

ABab43编辑版1.5.2C语言的基本结构(1)顺序结构ABab(2)选择结构,或称分支结构

此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框abBAp不成立成立44编辑版(2)选择结构,或称分支结构此结构中必包含一个判断框。根据

(3)

循环结构,它又称为重复结构,即反复执行某一部分的操作。又两类循环结构:

a.当型(while型)循环结构ap1TFAbb.直到型(Until型)循环结构

aATFbp245编辑版

(3)

循环结构,它又称为重复结构,即反复执行某一部分1.6本章要点小结程序设计的概念C语言的产生及发展C语言的特点C程序的介绍和上机步骤C语言的基本语法和结构46编辑版1.6本章要点小结程序设计的概念46编辑版本章课堂练习

(1)以下说法中正确的是().A)C语言程序总是从第一个函数开始执行

B)在C语言程序中,要调用的函数必须在main()函数中定义

C)C语言程序总是从main()函数开始执行

D)C语言程序中的main()函数必须放在程序的开始部分47编辑版本章课堂练习(1)以下说法中正确的是().47编解答:C解释:C语言程序总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须的。48编辑版解答:C48编辑版(2).以下叙述不正确的是A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数

D)在C程序中,注释说明只能位于一条语句的后面49编辑版(2).以下叙述不正确的是49编辑版解答:D解释:

凡是用“/*”和“*/”括起来的文字,都是注释。其出现的位置可以任意。50编辑版解答:D50编辑版(3).下列标识符中,合法的变量名有:A)a.bB)$888C)A1D)

3x5651编辑版(3).下列标识符中,合法的变量名有:51编辑版解答:C解释:变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。52编辑版解答:C52编辑版第二章程序的灵魂:算法53编辑版第二章程序的灵魂:算法53编辑版一个程序主要包括以下两方面的信息:(1)对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式这就是数据结构(datastructure)(2)对操作的描述。即要求计算机进行操作的步骤也就是算法(algorithm)54编辑版一个程序主要包括以下两方面的信息:54编辑版数据是操作的对象操作的目的是对数据进行加工处理,以得到期望的结果著名计算机科学家沃思(NikiklausWirth)提出一个公式:

算法

+数据结构=程序55编辑版数据是操作的对象55编辑版一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识算法+数据结构+程序设计方法+语言工具和环境=程序56编辑版一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序算法是解决“做什么”和“怎么做”的问题程序中的操作语句,是算法的体现不了解算法就谈不上程序设计57编辑版算法是解决“做什么”和“怎么做”的问题57编辑版2.1算法的概念2.2算法的特性2.3算法的表示2.4结构化程序设计方法58编辑版2.1算法的概念58编辑版2.1算法的概念广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”对同一个问题,可以有不同的解题方法和步骤为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法59编辑版2.1算法的概念广义地说,为解决一个问题而采取的方法和步计算机算法可分为两大类别:数值运算算法非数值运算算法数值运算的目的是求数值解非数值运算包括的面十分广泛,最常见的是用于事务管理领域2.1算法的概念60编辑版计算机算法可分为两大类别:2.1算法的概念60编辑版可以用最原始的方法进行:步骤1:先求1*2,得到结果2。步骤2:将步骤1得到的乘积2再乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。这就是最后的结果。例2.1求1×2×3×4×5×…×100太繁琐例2.1求1×2×3×4×5简单算法的举例概念61编辑版可以用最原始的方法进行:例2.1求1×2×3×4×5×…改进的算法:设变量p为被乘数变量i为乘数用循环算法求结果求1×2×3×4×5简单算法的举例概念62编辑版改进的算法:求1×2×3×4×5简单算法的举例概念62编辑版S1:使p=1,或写成1pS2:使i=2,或写成2iS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新执行S3;否则,算法结束最后得到p的值就是

5!的值若是100,求什么?简单算法的举例概念63编辑版S1:使p=1,或写成1p若是100,求什么?简单算法的举

例2.2有50个学生,要求将成绩在80-90分的学生的学号和成绩输出。用ni代表第i个学生学号,gi表示第i个学生成绩S1:1iS2:如果90≥gi≥80,

则输出ni和gi,否则不输出S3:i+1iS4:如果i≤50,返回到步骤S2,继续执行,否则,算法结束64编辑版例2.2有50个学生,要求将成绩在80-90分的学生的2.1算法的概念2.2算法的特性2.3算法的表示2.4结构化程序设计方法65编辑版2.1算法的概念65编辑版一个有效算法应该具有以下特点:(1)

有穷性。一个算法应包含有限的操作步骤,而不能是无限的。(2)

确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。2.2算法的特性66编辑版一个有效算法应该具有以下特点:2.2算法的特性66编辑版一个有效算法应该具有以下特点:(3)

有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。(4)

有一个或多个输出。算法的目的是为了求解,“解”就是输出。没有输出的算法是没有意义的。(5)

有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。2.2算法的特性67编辑版一个有效算法应该具有以下特点:2.2算法的特性67编辑版对于一般最终用户来说:他们并不需要在处理每一个问题时都要自己设计算法和编写程序可以使用别人已设计好的现成算法和程序只需根据已知算法的要求给予必要的输入,就能得到输出的结果输入3个数黑箱子3个数中最大数求3个数的最大数2.2算法的特性68编辑版对于一般最终用户来说:输入3个数黑箱子3个数中最大数求3个数2.1算法的概念2.2算法的特性2.3算法的表示2.4结构化程序设计方法69编辑版2.1算法的概念69编辑版常用的方法有:自然语言传统流程图结构化流程图伪代码……2.3算法的表示70编辑版常用的方法有:2.3算法的表示70编辑版自然语言表示法2.1节例子介绍的算法是用自然语言表示的用自然语言表示通俗易懂,但文字冗长,容易出现歧义性用自然语言描述包含分支和循环的算法,不很方便除了很简单的问题外,一般不用自然语言71编辑版自然语言表示法2.1节例子介绍的算法是用自然语言表示的71编传统的程序流程图用一些图形符号形象直观的表述算法,上表给出了ANSI规定的程序流程图符号。流程图是用一些图框来表示各种操作用图形表示算法,直观形象,易于理解72编辑版传统的程序流程图用一些图形符号形象直观的表述算法,上表给出了x≧0Y……N……一个入口两个出口传统的程序流程图73编辑版x≧0Y……N……一个入口两个出口传统的程序流程图73编辑版③①②①③②③位置不够防止交叉传统的程序流程图74编辑版③①②①③②③位置不够防止交叉传统的程序流程图74编辑版

例2.4将例2.1的算法用流程图表示。

求1×2×3×4×5如果需要将最后结果输出:1t输出ti>5开始2it*iti+1i结束NY75编辑版例2.4将例2.1的算法用流程图表示。1t输出ti>通过以上几个例子可以看出流程图是表示算法的较好的工具一个流程图包括以下几部分:(1)表示相应操作的框(2)带箭头的流程线(3)框内外必要的文字说明流程线不要忘记画箭头,否则难以判定各框的执行次序传统的程序流程图76编辑版通过以上几个例子可以看出流程图是表示算法的较好的工具传统的程特点:绘制简单,描述直观,之前广泛使用。缺点:程序流程图不易表示算法或程序的层次结构。用箭头表示的控制流可能引起随意的转移控制。可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构。不易表示数据结构和程序模块之间的关系。传统的程序流程图77编辑版特点:绘制简单,描述直观,之前广泛使用。传统的程序流程图77N-S图表示法

1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框。

这种流程图又称N—S结构化流程图(N和S是两位美国学者的英文姓名的第一个字母)。这种流程图适于结构化程序设计,因此很受欢迎。78编辑版N-S图表示法1973年美国学者I.Nassi和BN-S流程图用以下的流程图符号:ABABYNpA当p1成立A直到p2成立顺序结构选择结构循环结构(当型)循环结构(直到型)N-S图表示法

79编辑版N-S流程图用以下的流程图符号:ABABYNpA当p1成立A用伪码表示算法

伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。

80编辑版用伪码表示算法伪代码是用介于自然语言和计算机语言BEGIN(算法开始)1=>iWhilei<=30{inputniandgii+1=>i}1=>iWhilei<=30{ifgi>=80andgi<=90printniandgii+1=>i}END(算法结束)

前例用伪代码表示算法如下:81编辑版BEGIN(算法开始)前例用伪代码表示算法如下:81编辑版用计算机语言表示算法

要完成一项工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。82编辑版用计算机语言表示算法要完成一项工作,包括设计算法和实现算法用C语言程序实现前例如下#include<stdio.h>/*打印出50名同学中成绩在80-90分者*/main(){

int

i,g[50],n[50];

for(i=0;i<50;i++)/*输入50名同学的学号,成绩*/scanf(“%d,%d”,&n[i],&g[i]);for(i=0;i<50;i++)/*输出成绩80-90分同学的学号,成绩*/

if((g[i]>=80)&&(g[i]<=90))printf(“%6d,%3d\n”,n[i],g[i]);}fc1.c83编辑版用C语言程序实现前例如下#include<stdio.h>2.1算法的概念2.2算法的特性2.3算法的表示2.4结构化程序设计方法84编辑版2.1算法的概念84编辑版2.4结构化程序设计方法简介

荷兰学者E.W.dijkctra提出了结构化程序设计(structuredprogramming)的理论,成为70年代中期至90年代初的程序设计主流。结构化程序设计方法提出了一些大家都要遵循的原则,这些原则归纳为32个字:自顶向下,逐步细化。模块设计,结构编码。清晰第一,效率第二。书写规范,缩进格式。85编辑版2.4结构化程序设计方法简介荷兰学者E.W.dijkc顺序、分支和循环三种基本结构的共同特点:(1)只有一个入口。(2)只有一个出口。(3)结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都有从入口到出口的路径通过它。(4)结构内不存在“死循环”(无终止的循环)。86编辑版顺序、分支和循环三种基本结构的共同特点:(1)只有一个入结构化程序

所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。

结构化程序设计方法

结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行。每个阶段的问题都控制在人们容易理解和处理的范围内。

87编辑版结构化程序所谓结构化程序,就是仅仅使用顺序、选择、结构化程2.4本章要点小结

算法的概念算法的特性算法的表示结构化程序设计方法88编辑版2.4本章要点小结算法的概念88编辑版第三章数据描述与

基本操作89编辑版第三章数据描述与

3.1基本数据类型3.2运算符和表达式3.3输入输出操作90编辑版3.1基本数据类型90编辑版3.1基本数据类型3.1.1C语言的数据类型3.1.2常量和变量3.1.3数据类型转换91编辑版3.1基本数据类型3.1.1C语言的数据类型91编辑版3.1.1C语言的数据类型(一)什么是数据类型?(二)C语言的数据类型有哪些?92编辑版3.1.1C语言的数据类型(一)什么是数据类型?92编(一)什么是数据类型?数据结构+算法=程序C语言中以“数据类型”形式存在对数据的描述对操作的描述93编辑版(一)什么是数据类型?数据结构+算法=程序C语言中以对数据数据类型基本类型整型(有符号、无符号)字符型实型(浮点型)枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型单精度型双精度型在程序中对用到的所有数据都必须指定其数据类型.?不同类型的数据,所占内存的字节数不同,对应的操作也不相同。(二)C的数据类型94编辑版数据类型基本类型整型(有符号、无符号)构造类型数组类型指针类整型数据1.整型数据的分类最基本的整型类型基本整型(int型):占2个或4个字节(32位编译系统)短整型(shortint):VC++6.0中占2个字节长整型(longint):VC++6.0中占4个字节双长整型(longlongint):C99新增的,64位占8个字节,VC++6.0中定义为_int6495编辑版整型数据1.整型数据的分类95编辑版2.整型变量的符号属性整型变量的值的范围包括负数到正数可以将变量定义为“无符号”类型扩充的整形类型:有符号基本整型

[signed]int;无符号基本整型

unsignedint;有符号短整型

[signed]short[int];无符号短整型

unsignedshort

[int];有符号长整型

[signed]long[int];无符号长整型

unsignedlong

[int];整型数据96编辑版2.整型变量的符号属性整型数据96编辑版字符型数据字符是按其代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点97编辑版字符型数据字符是按其代码(整数)形式存储的97编辑版1.字符与字符代码大多数系统采用ASCII字符集字母:A~Z,a~z数字:0~9专门符号:29个:!”#&‘()*等空格符:空格、水平制表符‘\t’、换行‘\n’等不能显示的字符:空(null)字符(以‘\0’表示)、鸣铃(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等字符型数据98编辑版1.字符与字符代码字符型数据98编辑版字符’1’和整数1是不同的概念:字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节字符型数据99编辑版字符’1’和整数1是不同的概念:字符型数据99编辑版2.字符变量用类型符char定义字符变量

charc=’?’;

系统把“?”的ASCII代码63赋给变量cprintf(“%d%c\n”,c,c);输出结果是:

63?字符型数据100编辑版2.字符变量字符型数据100编辑版浮点型数据浮点型数据是用来表示具有小数点的实数float型(单精度浮点型)编译系统为float型变量分配4个字节数值以规范化的二进制数指数形式存放

101编辑版浮点型数据浮点型数据是用来表示具有小数点的实数101编辑版浮点型数据是用来表示具有小数点的实数float型(单精度浮点型)double型(双精度浮点型)编译系统为double型变量分配8个字节15位有效数字浮点型数据102编辑版浮点型数据是用来表示具有小数点的实数浮点型数据102编辑版几种基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32-2147483648~2147483647(signed)short16-32768~32767(signed)long32-2147483648~214748364732Unsignedint0~4294967295320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随编译器不同而不同,上表以VC++6.0为例:103编辑版几种基本数据类型类型符号关键字数的表示范围所占位数整型字符型举例:数据溢出(Overflow)的危害

一台安装了Windows®95/98的机器,如果连续运行49.7天,可能死机原因:

Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器个unsignedlong

unsignedlong的最大值:4294967295

一天有24*60*60*1000=86400000毫秒

4294967295/86400000=49.71026961805……

当49.7天的时候,此计数器会溢出,引起死机104编辑版举例:数据溢出(Overflow)的危害一台安装了Wind(一)常量(二)变量3.1.2常量与变量105编辑版(一)常量3.1.2常量与变量105编辑版预备知识:bit,Byte,Word

bit,位

Byte,字节1B==8bWord,字1W==2BKilobyte(KB),1KB==1,024BMegabyte(MB),1MB==1,024KBGigabyte(GB),1GB==1,024MBTerabyte(TB)1TB==1,024GB106编辑版预备知识:bit,Byte,Wordbit,一个字节有多大?可以表示数字0~255

保存一个字符(英文字母、数字、符号),ASCII编码两个字节保存一个汉字107编辑版一个字节有多大?107编辑版预备知识:二进制世界上有(10)2种人,1种人懂二进制,1种人不懂二进制一个位有多大?只能是“0”或者“1”,这叫二进制二进制诠释了计算机的哲学

种类众多的复杂事物都是由若干种简单事物构成108编辑版预备知识:二进制世界上有(10)2种人,1种人懂二进制,1种1.常量:在程序运行过程中,其值不能被改变的量整型常量:如1000,12345,0,-345实型常量十进制小数形式:如0.34-56.790.0指数形式:如12.34e3(代表12.34103)字符常量:如’?’转义字符:如’\n’字符串常量:如”boy”符号常量:#definePI3.14163.1.2常量与变量109编辑版1.常量:在程序运行过程中,其值不能被改变的量3.1.2常字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志’\0’。110编辑版字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而2.变量:在程序运行期间,变量的值是可以改变的变量必须先定义,后使用定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据3.1.2常量与变量111编辑版2.变量:在程序运行期间,变量的值是可以改变的3.1.2方式:1、定义变量的同时赋初值(也叫变量初始化)。格式:数据类型变量名[=初值][,变量名2[=初值2]……];2、通过一个赋值语句给变量赋初值。格式:

变量名=初值;变量赋初值出现在函数体的声明部分出现在函数体的执行部分inta,b=3;inta,b;b=3;112编辑版方式:变量赋初值出现在函数体出现在函数体inta,b=1、程序中用到的变量必须“先定义(declare),后使用”。2、C语言的关键字不能用作变量名。3、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。4、定义变量时,给几个变量赋相同的初值,应写成:inta=3,b=3,c=3;

不能写成:inta=b=c=3;×5、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行类型转换。关于变量以及变量赋初值的几点说明113编辑版1、程序中用到的变量必须“先定义(declare),后使用”变量——举例#include<stdio.h>voidmain(){intstudent,age;intif=adrress=1;floatscore=90;

stadent=2;Age=20.7;printf("%d%d%d%f",if,student,age,score);}本程序中有几处错误?undeclaredidentifier114编辑版变量——举例#include<stdio.h>本程序中有变量使用要注意长度不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度程序在TurboC2.0和VisualC++6.0下的运行结果不同注意!#include<stdio.h>voidmain(){

printf("DatatypeNumberofbytes\n");

printf("-------------------------------\n");

printf("char%d\n",sizeof(char));

printf("int%d\n",sizeof(int));

printf("shortint%d\n",sizeof(short));

printf("longint%d\n",sizeof(long));

printf("float%d\n",sizeof(float));

printf("double%d\n",sizeof(double));}115编辑版变量使用要注意长度不要对变量所占的内存空间字节数想当然注意!3.1.3数据类型转换(一)隐式转换(自动转换)(二)显式转换(强制转换)116编辑版3.1.3数据类型转换(一)隐式转换(自动转换)116编(一)隐式转换(自动转换)转换发生条件运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换--实参与形参类型不一致时转换先转换、后运算117编辑版(一)隐式转换(自动转换)转换发生条件运算转换------不隐式转换(自动转换)同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种long

double>double>float=long>=int>=short>char把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,可能丢失信息(好的编译器会发出警告)见教材28页118编辑版隐式转换(自动转换)同种数据类型的运算结果,还是该类型见教材隐式转换(自动转换)不同类型数据间的混合运算:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算;(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型;(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算.119编辑版隐式转换(自动转换)不同类型数据间的混合运算:119编辑版inti;floatf;doubled;longe;……i=2;f=2.5;d=3.9;e=3;……10+‘a’+i*f-d/e1075.01.3112.0110.7intdoubledoubledoubledouble思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。120编辑版inti;10+‘a’+i*f-d/e1075.01.3(二)显式转换(强制转换)一般形式(要转换成的数据类型)(被转换的表达式)注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。举例floatx,y;x=2.3;y=4.5;

(int)(x+y)//6(int)(int)x+y//6.5(double)说明强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。121编辑版(二)显式转换(强制转换)一般形式(要转换成的数据类型)(#include<stdio.h>voidmain(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d",x,i);}思考:以下程序的输出结果是什么?x=3.600000,i=3程序运行结果:结论:较高类型向较低类型转换时可能发生精度损失问题122编辑版#include<stdio.h>思考:以下程序的输出结举例:已知三角形的边长a、b、c,求三角形周长的一半。#include<stdio.h>voidmain(){floata,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)123编辑版举例:已知三角形的边长a、b、c,求三角形周长的一半。#inC运算符简介算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式关系运算符和表达式逻辑运算符和表达式条件运算符与表达式3.2运算符与表达式124编辑版C运算符简介3.2运算符与表达式124编辑版1、算术运算符

+-*/%2、关系运算符><==>=<=!=

3、逻辑运算符!&&||4、位运算符<<>>~|^&5、赋值运算符

=及其扩展赋值运算符6、条件运算符?:7、逗号运算符,8、指针运算符*&9、求字节数运算符sizeof10、强制类型转换运算符(类型)11、分量运算符.12、下标运算符[]13、其他如函数调用运算符()分类运算符详见254页!C运算符简介125编辑版1、算术运算符

运算符必须有运算对象,分为3类:运算对象是一个的,则称为单目运算运算对象是两个的,则称为双目运算运算对象是三个的,则称为三目运算C运算符简介126编辑版运算符必须有运算对象,分为3类:C运算符简介基本算术运算符+-*/%说明

例:

5/3=1

-5/3=-1模运算符或求余运算符算术表达式用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。优先级和结合性先乘除、后加减,有括号先算括号。自左至右常量、变量、函数等说明

两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。求余运算的两侧均应为整数

5%3=2例:

a*b/c-1.5+’a’

算术运算符和算术表达式如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。127编辑版基本算术运算符+-*/%说明格式:前置:++i,--i(在使用i之前,使i的值加(减)1)后置:i++,i--(在使用i之后,使i的值加(减)1)自增、自减运算符作用:自增运算符(++)使单个变量的值增1;自减运算符(--)使单个变量的值减1。例1i=3;……A)j=++i;j=i++;j=-i++;i=i+1i=i-1?j,i

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

简单赋值运算符的一般形式为:变量

=

表达式它的作用是将一个表达式的值赋给一个变量。

复合赋值运算的一般格式为:变量双目运算符=

表达式└──┬──┘复合赋值运算符它等价于:变量=变量双目运算符

(表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。赋值运算符和赋值表达式130编辑版赋值运算符简单赋值运算符:=简单赋值运算符的一般形式为:赋值表达式格式:<变量><赋值运算符><表达式>赋值表达式的值:被赋变量的值类型转换转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。131编辑版赋值表达式格式:<变量><赋值运算符><表达式>类注意:将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用例1floata;intb;a=1.2;b=a*3;?b

b=3例2a=b=5;a=7+(b=8)?a,b

a=5;b=5a=15;b=8自右而左的结合性132编辑版注意:例1floata;intb;?bb=3例2算术自反赋值运算符

(1)运算规则

对象数名称运算符运算规则运算对象运算结果结合性双目加赋值减赋值乘赋值除赋值模赋值+=-=*=/=%=a+=b相当于a=a+ba-=b相当于a=a-ba*=b相当于a=a*ba/=b相当于a=a/ba%=b相当于a=a%b数值型数值型自右向左整型整型133编辑版算术自反赋值运算符(1)运算规则对象数名称运算符运逗号运算符,逗号表达式表达式1,表达式2,……,表达式n说明1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。逗号运算符和逗号表达式134编辑版逗号运算符,逗号表达式表达式1,表达式2,……,表达例1a=3a=(3*5,a*4)?aa=12例2a=3a=3*5,a*4?aa=15表达式的值为60135编辑版例1a=3?aa=12例2a=3?aa=15135编关系运算符及其优先次序关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符:①<

(小于)②<=(小于或等于)③>

(大于)④>=(大于或等于)

⑤==(等于)⑥!=(不等于)优先级相同

(高)优先级相同

(低)136编辑版关系运算符及其优先次序关系运算符:优先级相同(高)优先级相关系、算术、赋值运算符的优先级算术运算符(高)赋值运算符(低)关系运算符关系运算符及其优先次序137编辑版关系、算术、赋值运算符的优先级算术运算符(高)赋c>a+b等效于

c>(a+b)a>b==c等效于

(a>b)==ca==b<c等效于

a==(b<c)a=b>c等效于

a=(b>c)关系运算符及其优先次序138编辑版c>a+b等效于c>(a+b)关系运算符关系表达式关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”139编辑版关系表达式关系表达式139编辑版关系运算注意:例若a=0;b=0.5;x=0.3;

则a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例‘a’>0结果为‘A’>100结果为10140编辑版关系运算注意:例若a=0;b=0.5;x=0.3;关系运算注意:例注意区分“=”与“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为0141编辑版关系运算注意:例注意区分“=”与“==”例应避逻辑运算符及其优先次序3种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子142编辑版逻辑运算符及其优先次序3种逻辑运算符:142编辑版判断年龄在13至17岁之内?age>=13&&age<=17判断年龄小于12或大于65?age<12||age>65逻辑运算符及其优先次序143编辑版判断年龄在13至17岁之内?逻辑运算符及其优先次序143编辑逻辑运算的真值表逻辑运算符及其优先次序144编辑版逻辑运算的真值表逻辑运算符及其优先次序144编辑版逻辑运算符的优先次序!→&&→||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符

&&和||赋值运算符(低)逻辑运算符及其优先次序145编辑版逻辑运算符的优先次序!逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”但在判断一个量是否为“真”时以0代表“假”,以非0代表“真”注意:将一个非零的数值认作为“真”146编辑版逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”146编辑(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||b的值为1(5)4&&0||2的值为1逻辑表达式147编辑版(1)若a=4,则!a的值为0逻辑表达式147编辑版修改后的逻辑运算真值表逻辑表达式148编辑版修改后的逻辑运算真值表逻辑表达式148编辑版判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表达式值为1,则闰年;否则为非闰年逻辑表达式149编辑版判别某一年是否闰年,用逻辑表达式表示逻辑表达式149编辑版条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;条件运算符150编辑版条件运算符和条件表达式有一种if语句,当被判别的表达式的值为条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;条件表达式151编辑版条件运算符和条件表达式有一种if语句,当被判别的表达式的值为条件表达式的一般形式为表达式1?表达式2:

表达式3条件运算符和条件表达式条件运算符的执行顺序:求解表达式1若为非0(真)则求解表达式2,

温馨提示

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

评论

0/150

提交评论