1、A1计算机程序设计基础计算机程序设计基础(C语言)语言) A2 1. 课堂要求很严格。2. 多听,适时做笔记。3. 上课不能讲闲话。4. 课后认真完成作业、实验报告。5. 有问题,及时与老师联系。教 学 要 求A3选用教材与参考书 顾治华、陈天煌等顾治华、陈天煌等 2007.22007.2谭浩强谭浩强 A4课程内容课程内容第一章第一章 C C语言程序设计概述语言程序设计概述 第二章第二章 算法及算法设计简介算法及算法设计简介 第三章第三章 数据描述与基本操作数据描述与基本操作第四章第四章 选择结构程序设计选择结构程序设计 第五章第五章 循环结构程序设计循环结构程序设计 第六章第六章 数组与指针
2、数组与指针第七章第七章 函数与模块化程序设计方法函数与模块化程序设计方法A5第一章第一章 语言程序设计概述语言程序设计概述A6 A71.1 程序设计的概念程序设计的概念1.1.1 程序设计语言程序设计语言1.1.2 程序设计的概念程序设计的概念A8计算机计算机n计算机是用来延伸人的能力的工具,需要人来计算机是用来延伸人的能力的工具,需要人来驾驭驾驭n我们的职责是让非计算机专业的人更容易驾驭我们的职责是让非计算机专业的人更容易驾驭它它n完成这一目标的主要手段之一就是完成这一目标的主要手段之一就是“编程编程(Programming)”A9计算机基本工作过程计算机基本工作过程n整个过程的执行者是硬件
3、,但硬件是受软件控制的整个过程的执行者是硬件,但硬件是受软件控制的n编程,就是编写软件,使硬件按照人的意图工作编程,就是编写软件,使硬件按照人的意图工作A10计算机基本工作过程计算机基本工作过程输入/输出设备存储器运算器控制器源程序和输入数据输出结果取出数据存入数据操作命令存取命令取出程序指令输入输出命令计算结果CPU“冯冯诺依曼机诺依曼机”结构结构 大脑大脑眼眼/耳耳/口口程序和数据执行结果A11软件的形成软件的形成n软件(软件(Software)的形成)的形成q程序员程序员(Programmer)编写程序)编写程序源代码源代码(Source Code)q编译器编译器(Compiler)把源
4、代码转换为可被计算机)把源代码转换为可被计算机理解的理解的机器代码机器代码(Machine Code)q并把机器代码以并把机器代码以可可执行文件执行文件(Executable File)的形式保存在磁盘上的形式保存在磁盘上A12机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统如 ADD A, B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象1.1.1 程序设计语言程序设计语言
5、A13程序设计语言的故事程序设计语言的故事n计算机为什么用二进制呢?计算机为什么用二进制呢?n为什么不用我们日常熟悉的十进制呢?为什么不用我们日常熟悉的十进制呢?q二进制在在电器元件中容易实现二进制在在电器元件中容易实现 q计算机进行二进制运算比进行十进制运算要简单得计算机进行二进制运算比进行十进制运算要简单得多多 A14程序设计语言的故事程序设计语言的故事n机器语言编写的机器语言编写的1+1程序程序n汇编语言(汇编语言(Assemble Language)编写的)编写的1+1程序程序101110000000000100000000000001010000000100000000MOV AX,
6、 1ADD AX, 1A15程序设计语言的故事程序设计语言的故事nBASIC语言编写的语言编写的1+1程序程序nC语言编写的语言编写的1+1程序程序PRINT 1+1#include main()printf(%dn, 1+1);A1652 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96AdaALGOL60ALGOL68PascalModula-2CPLBCPL BC+JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula 67Smalltalk 80BASICANSI-BA
7、SICQBASIC VBFORTRAN90A171.1.2 程序设计的概念程序设计的概念程序设计就是用计算机语言来程序设计就是用计算机语言来编写程序的过程。编写程序的过程。什么是程序?著名计算机科学什么是程序?著名计算机科学家沃思提出有名的公式:家沃思提出有名的公式: 算法算法+数据结构数据结构=程序程序A18A191.2 C语言的产生和发展语言的产生和发展1.2.1 C语言的产生语言的产生 1.2.2 C语言的发展语言的发展1.2.3 C语言的特点语言的特点A20n一切从一个叫一切从一个叫“Space Travel”Space Travel”的电子游戏开始的电子游戏开始的的nKen Thom
8、psonKen Thompson为了让他的游戏能在为了让他的游戏能在PDP-7PDP-7上运行,上运行,用汇编语言给用汇编语言给PDP-7PDP-7写了一个操作系统写了一个操作系统UNIXUNIXn汇编太不好用了,汇编太不好用了,ThompsonThompson需要高级语言需要高级语言n试验了一些高级语言,包括试验了一些高级语言,包括FortranFortran,都不理想,都不理想n他在他在BCPLBCPL基础上,自己设计了一个基础上,自己设计了一个B B语言语言nUNIXUNIX开始发展,开始发展,B B也不够用了也不够用了nDennis RitchieDennis Ritchie加入,把加
9、入,把B B改造成改造成C C n开始用开始用C C重写重写UNIXUNIXA211.2.2 qC语言发展过程语言发展过程n产生过程产生过程q时间时间:19721973q地点地点:美国贝尔实验室美国贝尔实验室q目的目的:UNIX操作系统操作系统q设计人设计人: Ken.Thompson和和Dennis.M.RitchienC标准标准q标准标准C: K&R合著合著The C Programming LanguageqANSI C: 1983年年q87 ANSI C: 1987年年q1990年国际标准的年国际标准的ANSI CA22Ritchie和Thompson在开发UNIXA23接受美国国家技
10、术勋章接受美国国家技术勋章A24C语言的祖师爷语言的祖师爷Dennis M. RitchieA25Ritchie漫画像A26C语言本身既有一般高级语言的特点,又由低级语言本身既有一般高级语言的特点,又由低级语言(汇编语言)的特点。语言(汇编语言)的特点。C语言是一种结构化的程序设计语言,它具有实语言是一种结构化的程序设计语言,它具有实现顺序、分支、循环三种基本结构化控制的语句。现顺序、分支、循环三种基本结构化控制的语句。C语言简洁,紧凑,使用方便灵活。只有语言简洁,紧凑,使用方便灵活。只有32个保个保留字,留字,9种控制语句,书写形式自由。种控制语句,书写形式自由。数据类型丰富。有整型、实型、
11、字符型、数组型数据类型丰富。有整型、实型、字符型、数组型、指针型、结构体型、共用体型和枚举型等。、指针型、结构体型、共用体型和枚举型等。A275、运算功能强。有、运算功能强。有32种运算符,包括了算术运算种运算符,包括了算术运算、关系运算、逻辑运算、位运算、指针运算等。、关系运算、逻辑运算、位运算、指针运算等。6、目标代码质量高,运行速度快。、目标代码质量高,运行速度快。7、可移植性强。、可移植性强。8、语法限制不太严格,程序设计自由度大。、语法限制不太严格,程序设计自由度大。A28C 语言是编译型语言语言是编译型语言n 一种编译语言对应一种编译器一种编译语言对应一种编译器 q按照该语言的语法
12、编写程序源代码,把自己的思想按照该语言的语法编写程序源代码,把自己的思想融入到代码中融入到代码中 q编译器读入源代码,把程序员的意图转换成可执行编译器读入源代码,把程序员的意图转换成可执行程序,供他人使用程序,供他人使用A29C语言与计算机系统层次关系语言与计算机系统层次关系A301.3 简单简单C程序介绍程序介绍A31nC程序格式和结构特点程序格式和结构特点第一个程序第一个程序 Hello,World!/* example1.1 The first C Program*/#include main() printf(“Hello,World!”);注释编译预处理函数语句输出:Hello,Wo
13、rld!A32/* 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=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语句语句预处理命令注释注释主函数子函数A33q格式特点格式特点n
14、习惯用习惯用小写小写字母,大小写敏感字母,大小写敏感n不使用行号,不使用行号,无程序行无程序行概念概念n可使用空行和空格可使用空行和空格n常用常用锯齿形锯齿形书写格式书写格式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缩进 对齐 有足够的注释 有合适的空行A34q结构特点结构特点n函数与主函数函数与主函数q程序由一个或多个函数组成程序由一个或多个函数组成q必须有且只能有一个主函
15、数必须有且只能有一个主函数main()q程序执行从程序执行从main开始,在开始,在main中结束,其它函数通过嵌套中结束,其它函数通过嵌套调用得以执行。调用得以执行。n程序语句程序语句qC程序由语句组成程序由语句组成q用用“;”作为语句终止符作为语句终止符n注释注释q/* */为注释为注释,不能嵌套不能嵌套q不产生编译代码不产生编译代码例: /*This is the main /* of example1.1*/ */ 非法n编译预处理命令编译预处理命令函数首部函数首部: 包括函数名、函数类型、函数参数名、包括函数名、函数类型、函数参数名、参数类型。参数类型。 函数体:声明部分函数体:声明
16、部分,执行部分。执行部分。A351.4 C C程序的上机步骤程序的上机步骤A36编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe开始编辑编译 有错?执行连接结果正确结束可执行目标程序f.exe源程序f.c目标程序f.obj库函数和其他目标程序YesNoYesNoA371.5 C语言的基本语法和结构语言的基本语法和结构1.5.1 C语言的基本语法语言的基本语法 1.5.2 C语言的基本结构语言的基本结构A381.5.1 C语言的基本语法语言的基本语法n标识符标识符n关键字关键字n运算符运算符n分隔符分隔符
17、n常量常量n注释符注释符n字符集字符集A39标识符标识符n常量、变量、语句标号以及自定义函数的名称常量、变量、语句标号以及自定义函数的名称n只能是只能是字母、数字和下划线字母、数字和下划线组成的字符串,组成的字符串,第第一个字符必须是字母或下划线一个字符必须是字母或下划线n标准标准C不限制标识符长度,但一般不超过不限制标识符长度,但一般不超过8字符字符n标识符大小写有区别标识符大小写有区别n标识符名最好能标识符名最好能“顾名思义顾名思义”A403232个关键字个关键字:(auto break case char constcontinue default do double elseenum
18、extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile whileA419 9种控制语句种控制语句:if( )else switch casefor( )while( )dowhile( )continuebreakgotoreturnA423434种运算符:种运算符:算术运算符:算术运算符:+ - + - * * / % + - / % + -关系运算符:关系运算符: = != = !=逻辑运算符:!逻
19、辑运算符:! & |& |位运算符位运算符 : | & | &赋值运算符:赋值运算符:= = 及其扩展及其扩展条件运算符:条件运算符:?:?:逗号运算符:逗号运算符:, ,指针运算符:指针运算符:* * & &求字节数求字节数 :sizeofsizeof强制类型转换:强制类型转换:( (类型)类型)分量运算符:分量运算符:. -. -下标运算符:下标运算符: 其它其它 :( ) -( ) -A431.5.2 C语言的基本结构语言的基本结构(1)顺序结构)顺序结构 ABa b A44(2)选择结构选择结构,或称分支结构 此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框abB
20、Ap不成立成立A45 (3) 循环结构循环结构,它又称为重复结构,即反复执行某一部分的操作。又两类循环结构: a. 当型(当型(while型)循环结构型)循环结构ap1TFAbb. 直到型(直到型(Until型)循环结构型)循环结构 aATFbp2A461.6 本章要点小结本章要点小结A47本章课堂练习本章课堂练习 (1) 以下说法中正确正确的是( ). A) C语言程序总是从第一个函数开始执行 B) 在C语言程序中,要调用的函数必须在main()函数中定义 C) C语言程序总是从main()函数开始执行 D) C语言程序中的main()函数必须放在程序的开始部分A48解答:C解释:C语言程序
21、总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须的。A49(2)以下叙述不正确不正确的是A)一个C源程序可由一个或多个函数组成B) 一个C源程序必须包含一个main函数C) C程序的基本组成单位是函数 D) 在C程序中,注释说明只能位于一条语句的后面A50解答:D解释: 凡是用“/*”和“*/”括起来的文字,都是注释。其出现的位置可以任意。A51(3)下列标识符中,合法合法的变量名有:A)a.b B)$
22、888 C)A1 D) 3x56 A52解答:C解释:变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。A53第二章第二章 程序的灵魂程序的灵魂:算法算法 A54n一个程序主要包括以下两方面的信息:一个程序主要包括以下两方面的信息:(1) 对数据的描述对数据的描述。在程序中要指定用到。在程序中要指定用到哪哪些些数据以及这些数据的类型和数据的组织形式数据以及这些数据的类型和数据的组织形式q这就是数据结构这
23、就是数据结构(data structure)(2) 对操作的描述对操作的描述。即要求计算机进行操作的。即要求计算机进行操作的步骤步骤q也就是算法也就是算法(algorithm)A55n数据是操作的对象数据是操作的对象n操作的目的是对数据进行加工处理,以得到操作的目的是对数据进行加工处理,以得到期望的结果期望的结果n著名计算机科学家沃思著名计算机科学家沃思(Nikiklaus Wirth)提提出一个公式:出一个公式: 算法算法 + 数据结构数据结构 = 程序程序A56n一个程序除了一个程序除了算法和数据结构这算法和数据结构这主要要素外,主要要素外,还应当采用结构化程序设计方法进行程序设计,还应当
24、采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示并且用某一种计算机语言表示n算法算法、数据结构数据结构、程序设计方法程序设计方法和和语言工具语言工具是是一个程序设计人员应具备的知识一个程序设计人员应具备的知识q算法算法数据结构数据结构程序设计方法程序设计方法语言工具和环境语言工具和环境程序程序A57n算法是解决算法是解决“做什么做什么”和和“怎么做怎么做”的问题的问题n程序中的操作语句,是算法的体现程序中的操作语句,是算法的体现n不了解算法就谈不上程序设计不了解算法就谈不上程序设计A58A592.1 算法的概念算法的概念n广义地说,为解决一个问题而采取的方法和步广义地说,为解决一
25、个问题而采取的方法和步骤,就称为骤,就称为“算法算法”n对同一个问题,可以有不同的解题方法和步骤对同一个问题,可以有不同的解题方法和步骤n为了有效地进行解题,不仅需要保证算法正确,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法还要考虑算法的质量,选择合适的算法A60n计算机算法可分为两大类别:计算机算法可分为两大类别:q数值运算算法数值运算算法q非数值运算算法非数值运算算法n数值运算数值运算的目的是求数值解的目的是求数值解n非数值运算非数值运算包括的面十分广泛,最常见的包括的面十分广泛,最常见的是用于事务管理领域是用于事务管理领域2.1 算法的概念算法的概念A61
26、n可以用最原始的方法进行:可以用最原始的方法进行:q步骤步骤1:先求:先求1*2,得到结果,得到结果2。q步骤步骤2:将步骤:将步骤1得到的乘积得到的乘积2再乘以再乘以3,得到结,得到结果果6。q步骤步骤3:将:将6再乘以再乘以4,得,得24。q步骤步骤4:将:将24再乘以再乘以5,得,得120。这就是最后的结。这就是最后的结果。果。例例2.1 求求12345 100太繁琐太繁琐例例2.1 求求12345简单算法的举例概念简单算法的举例概念A62n改进的算法:q设变量p为被乘数q变量i为乘数q用循环算法求结果求求12345简单算法的举例概念简单算法的举例概念A63nS1:使p=1,或写成1pn
27、S2:使i=2,或写成2inS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipnS4:使i的值加1,即i+1 inS5:如果i不大于5,返回重新执行S3;否则,算法结束n最后得到p的值就是 5!的值若是若是100,求什么?,求什么?简单算法的举例概念简单算法的举例概念A64 例例2.2 有有50个学生,要求将成绩在个学生,要求将成绩在80-90分的学分的学生的学号和成绩输出。生的学号和成绩输出。n用用ni代表第代表第i个学生个学生学号,学号,gi表示第表示第i个学生成绩个学生成绩S1:1iS2:如果:如果90 gi80, 则输出则输出ni和和gi,否则不输出,否则不输出S3:i+1iS
28、4:如果:如果i50,返回到步骤,返回到步骤S2,继续执行,继续执行,否则,算法结束否则,算法结束A65A66n一个有效算法应该具有以下一个有效算法应该具有以下特点特点:(1) 有穷性有穷性。一个算法应包含有限的操。一个算法应包含有限的操作步骤,而不能是无限的。作步骤,而不能是无限的。(2) 确定性确定性。算法中的每一个步骤都应。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模当是确定的,而不应当是含糊的、模棱两可的。棱两可的。2.2 算法的特性算法的特性A67n一个有效算法应该具有以下一个有效算法应该具有以下特点特点:(3) 有零个或多个输入有零个或多个输入。所谓输入是指在。所谓输入是
29、指在执行算法时需要从外界取得必要的信息。执行算法时需要从外界取得必要的信息。(4) 有一个或多个输出有一个或多个输出。算法的目的是为。算法的目的是为了求解,了求解,“解解” 就是输出。就是输出。q没有输出的算法是没有意义的。没有输出的算法是没有意义的。(5) 有效性有效性。算法中的每一个步骤都应当。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。能有效地执行,并得到确定的结果。2.2 算法的特性算法的特性A68n对于一般最终用户来说对于一般最终用户来说:q他们并不需要在处理每一个问题时都要他们并不需要在处理每一个问题时都要自己设计算法和编写程序自己设计算法和编写程序q可以使用别人已设计
30、好的现成算法和程可以使用别人已设计好的现成算法和程序序q只需根据已知算法的要求给予必要的输只需根据已知算法的要求给予必要的输入,就能得到输出的结果入,就能得到输出的结果输入输入3个数个数黑箱子黑箱子3个数中最大数个数中最大数求求3个数的个数的最大数最大数2.2 算法的特性算法的特性A69A70n常用的方法有:常用的方法有:q自然语言自然语言q传统流程图传统流程图q结构化流程图结构化流程图q伪代码伪代码q2.3 算法的表示算法的表示A71n2.1节节例子例子介绍的算法是用自然语言表示的介绍的算法是用自然语言表示的n用自然语言表示通俗易懂,但文字冗长,容易用自然语言表示通俗易懂,但文字冗长,容易出
31、现歧义性出现歧义性n用自然语言描述包含分支和循环的算法,不很用自然语言描述包含分支和循环的算法,不很方便方便n除了很简单的问题外,一般不用自然语言除了很简单的问题外,一般不用自然语言A72用一些图形符号形象直观的表述算法,上表给出用一些图形符号形象直观的表述算法,上表给出了了ANSI 规定的程序流程图符号。规定的程序流程图符号。n流程图流程图是用一些图框来表示各种操作是用一些图框来表示各种操作n用图形表示算法,直观形象,易于理解用图形表示算法,直观形象,易于理解A73x0YN一个入口一个入口两个出口两个出口A74位置不够位置不够防止交叉防止交叉A75 例例2.4 将例将例2.1的算法用的算法用
32、流程图表示。流程图表示。 求求12345n如果需要将最后结果输如果需要将最后结果输出出:1t输出输出ti5开始开始2it*iti+1i结束结束NYA76n通过以上几个例子可以看出流程图是表通过以上几个例子可以看出流程图是表示算法的较好的工具示算法的较好的工具n一个流程图包括以下几部分一个流程图包括以下几部分:(1) 表示相应操作的框表示相应操作的框(2) 带箭头的流程线带箭头的流程线(3) 框内外必要的文字说明框内外必要的文字说明n流程线不要忘记画箭头,流程线不要忘记画箭头,否则否则难以判定难以判定各框的执行次序各框的执行次序A77n特点:绘制简单,描述直观,之前广泛使用。特点:绘制简单,描述
33、直观,之前广泛使用。n缺点:缺点:q程序流程图不易表示算法或程序的层次结构。程序流程图不易表示算法或程序的层次结构。q用箭头表示的控制流可能引起随意的转移控制。用箭头表示的控制流可能引起随意的转移控制。q可能诱使人们过早地考虑局部程序的控制结构而忽可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构。视全局的程序结构。q不易表示数据结构和程序模块之间的关系。不易表示数据结构和程序模块之间的关系。A78NS图表示法图表示法 1973 1973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提提出了一种新的流程图形式。在这种流程图中,
34、完出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的形框内,在该框内还可以包含其他的从属于它的框。框。 这种流程图又称这种流程图又称NSNS结构化流程图(结构化流程图(N N和和S S是两位美国学者的英文姓名的第一个字母)。是两位美国学者的英文姓名的第一个字母)。这种流程图适于结构化程序设计,因此很受欢这种流程图适于结构化程序设计,因此很受欢迎。迎。 A79nN-S流程图用以下的流程图符号:ABABYNpA当当p1成立成立A直到直到p2成立成立顺序结构顺序结构选择结构选择结构循
35、环结构循环结构(当型)(当型)循环结构循环结构(直到型)(直到型)NS图表示法图表示法 A80用伪码表示算法用伪码表示算法 伪代码是用介于自然语言和计算机语言伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图之间的文字和符号来描述算法。它不用图形符号,因此书写方便,格式紧凑,也比形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)较好懂,便于向计算机语言算法(即程序)过渡。过渡。 A81BEGIN(算法开始算法开始)1=iWhile ii1=i While i=80 and giiEND(算法结束)(算法结束) 前例用伪代码表示算法如下:A82用计算机
36、语言表示算法用计算机语言表示算法 n要完成一项工作,包括要完成一项工作,包括设计算法设计算法和和实现算法实现算法两个部分。两个部分。n设计算法的目的是为了实现算法。设计算法的目的是为了实现算法。n不仅要考虑如何设计一个算法,也要考虑如不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。何实现一个算法。A83用用C语言程序实现前例如下语言程序实现前例如下#include /*打印出50名同学中成绩在80-90分者*/main() int i,g50,n50; for(i=0;i50;i+) /*输入50名同学的学号,成绩*/ scanf(“%d,%d”,&ni,&gi); for(i=0;i=
37、80)&(gi=90) ) printf(“%6d,%3dn”,ni,gi);A84A852.4 结构化程序设计方法简介结构化程序设计方法简介 A86顺序、分支和循环三种基本结构的共同特点:顺序、分支和循环三种基本结构的共同特点: (1)只有一个入口。只有一个入口。(2)只有一个出口。只有一个出口。(3)结构内的每一部分都有机会被执行到。也就是结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都有从入口到出口的路径说,对每一个框来说,都有从入口到出口的路径通过它。通过它。 (4)结构内不存在结构内不存在“死循环死循环”(无终止的循环)。(无终止的循环)。A87结构化程序结构化程序 所
38、谓结构化程序,就是仅仅使用顺序、选择、所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。循环等三种基本结构所构造的程序。 结构化程序设计方法结构化程序设计方法 结构化程序设计方法的基本思想是,把一个复杂结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行。每个阶段的问题都问题的求解过程分阶段进行。每个阶段的问题都控制在人们容易理解和处理的范围内。控制在人们容易理解和处理的范围内。 A882.4 本章要点小结本章要点小结A89第三章第三章 数据描述与数据描述与 基本操作基本操作 A90n3.1 基本数据类型基本数据类型n3.2 运算符和表达式运算符和表达式n3
39、.3 输入输出操作输入输出操作A913.1 基本数据类型基本数据类型n3.1.1 C语言的数据类型语言的数据类型n3.1.2 常量和变量常量和变量n3.1.3 数据类型转换数据类型转换A923.1.1 C3.1.1 C语言的数据类型语言的数据类型(一) 什么是数据类型?(二) C语言的数据类型有哪些?A93( (一一) ) 什么是数据类型?什么是数据类型?数据结构+算法=程序C语言中以“数据类型”形式存在对数据的描述对操作的描述A94数据类型基本类型整型(有符号、无符号)字符型实型(浮点型)枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型单精度型双精度型在程序中对用到的所有数据都必须
40、指定其数据类型.?不同类型的数据,所占内存的字节数不同, 对应的操作也不相同。( (二二) C) C的数据类型的数据类型A95整型数据整型数据1. 整型数据的分类整型数据的分类n最基本的整型类型最基本的整型类型q基本整型基本整型(int型型):占:占2个或个或4个字节个字节(32位编译位编译系统系统)q短整型短整型(short int):VC+6.0中占中占2个字节个字节q长整型长整型(long int):VC+6.0中占中占4个字节个字节q双长整型双长整型(long long int):C99新增的新增的,64位占位占8个字节,个字节,VC+6.0中定义为中定义为 _int64A962. 整
41、型变量的符号属性整型变量的符号属性q整型变量的值的范围包括负数到正数整型变量的值的范围包括负数到正数q可以将变量定义为可以将变量定义为“无符号无符号”类型类型q扩充的整形类型:扩充的整形类型:n有符号基本整型 signed int;n无符号基本整型 unsigned int;n有符号短整型 signed short int;n无符号短整型 unsigned short int;n有符号长整型 signed long int;n无符号长整型 unsigned long int;整型数据A97字符型数据字符型数据n字符是按其代码字符是按其代码(整数整数)形式存储的形式存储的nC99把字符型数据作为
42、整数类型的一种把字符型数据作为整数类型的一种n字符型数据在使用上有自己的特点字符型数据在使用上有自己的特点A981.字符与字符代码字符与字符代码大多数系统采用大多数系统采用ASCII字符集字符集q字母:字母:A Z,a zq数字:数字:09q专门符号:专门符号:29个:个:! ” # & ( ) *等等q空格符:空格、水平制表符空格符:空格、水平制表符t、换行、换行n等等q不能显示的字符:不能显示的字符:空空(null)字符字符(以以0表示表示)、鸣铃鸣铃(以以a表示表示)、退格退格(以以b表示表示)、回车、回车(以以r表示表示)等等字符型数据A99n字符字符1和整数和整数1是不同的概念是不同
43、的概念:q字符字符1只是代表一个形状为只是代表一个形状为1的符号,在的符号,在需要时按原样输出,在内存中以需要时按原样输出,在内存中以ASCII码形式码形式存储,占存储,占1个字节个字节q整数整数1是以整数存储方式是以整数存储方式(二进制补码方式二进制补码方式)存存储的,占储的,占2个或个或4个字节个字节字符型数据A1002.字符变量字符变量n用类型符用类型符char定义字符变量定义字符变量q char c = ?; 系统把系统把“?”的的ASCII代码代码63赋给变量赋给变量cqprintf(“%d %cn”,c,c);q输出结果是:输出结果是: 63 ?字符型数据A101浮点型数据浮点型数
44、据浮点型数据是用来表示具有小数点的实数浮点型数据是用来表示具有小数点的实数nfloat型型(单精度浮点型单精度浮点型)q编译系统为编译系统为float型变量分配型变量分配4个字节个字节q数值以规范化的二进制数指数形式存放数值以规范化的二进制数指数形式存放 A102浮点型数据是用来表示具有小数点的实数浮点型数据是用来表示具有小数点的实数nfloat型型(单精度浮点型单精度浮点型)ndouble型型(双精度浮点型双精度浮点型)u编译系统为编译系统为double型变量分配型变量分配8个字节个字节u15位有效数字位有效数字浮点型数据A103几种基本数据类型类型 符号关键字数的表示范围所占位数整型字符型
45、实型有无(signed)int32-21474836482147483647(signed)short16-3276832767(signed)long32-2147483648214748364732Unsigned int042949672953204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255说明:数据类型所占字节数随编译器不同而不同,上表以VC+ 6.0为例:A104举例:数据溢出(举例:数
46、据溢出(Overflow)的危害)的危害n 一台安装了Windows 95/98的机器,如果连续运行49.7天,可能死机n 原因:q Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。q 这个计数器个unsigned longq unsigned long的最大值:4294967295q 一天有24*60*60*1000 = 86400000毫秒q 4294967295 / 86400000 = 49.71026961805q 当49.7天的时候,此计数器会溢出,引起死机A105(一) 常 量(二) 变 量3.1.2 3.1.2 常量与变量常量与变量A106预备知识:预备知
47、识:bit,Byte,Wordn bit, 位位n Byte, 字节字节 1 B = 8 bn Word, 字字 1 W=2 Bn Kilobyte(KB), 1 KB = 1,024 Bn Megabyte(MB), 1 MB = 1,024 KBn Gigabyte(GB), 1 GB = 1,024 MBn Terabyte(TB) 1 TB = 1,024 GB A107n一个字节有多大?一个字节有多大?q 可以表示数字可以表示数字0255q 保存一个字符(英文字母、数字、符号),保存一个字符(英文字母、数字、符号),ASCII编码编码q 两个字节保存一个汉字两个字节保存一个汉字A10
48、8预备知识:二进制预备知识:二进制n世界上有世界上有(10)2种人,种人,1种人懂二进制,种人懂二进制,1种人种人不懂二进制不懂二进制n 一个位有多大?一个位有多大?q 只能是只能是“0”或者或者“1”,这叫二进制,这叫二进制n二进制诠释了计算机的哲学二进制诠释了计算机的哲学q 种类众多的复杂事物都是由若干种简单事物构成种类众多的复杂事物都是由若干种简单事物构成A1091.常量常量:在程序运行过程中,其值在程序运行过程中,其值不能被改变的量不能被改变的量n整型常量整型常量:如如1000,12345,0,-345n实型常量实型常量q十进制小数形式十进制小数形式:如如0.34 -56.79 0.0
49、q指数形式指数形式:如如12.34e3 (代表代表12.34 103)n字符常量字符常量:如:如?q转义字符转义字符:如:如nn字符串常量字符串常量:如如”boy”n符号常量符号常量:#define PI 3.14163.1.2 常量与变量A110字符与字符串的区别有哪些?字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。A1112. 变量变量:在程序运行期间,变量的值
50、是可以改变的在程序运行期间,变量的值是可以改变的n变量必须变量必须先定义先定义,后使用后使用n定义定义变量变量时指定该变量的时指定该变量的名字名字和和类型类型n变量名变量名和和变量值变量值是是两个不同的概念两个不同的概念n变量名实际上是以一个名字代表的一个变量名实际上是以一个名字代表的一个存储地址存储地址n从变量中取值,实际上是通过变量名找到相应的内存从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据地址,从该存储单元中读取数据3.1.2 常量与变量A112方式:1、定义变量的同时赋初值(也叫变量初始化)。 格式: 数据类型 变量名=初值, 变量名2=初值2;2、通过一