1、编辑版1计算机程序设计基础计算机程序设计基础(C语言)语言)编辑版2 1.课堂要求很严格。2.多听,适时做笔记。3.上课不能讲闲话。4.课后认真完成作业、实验报告。5.有问题,及时与老师联系。教 学 要 求编辑版3选用教材与参考书 顾治华、陈天煌等顾治华、陈天煌等 2007.22007.2谭浩强谭浩强 编辑版4课程内容课程内容第一章第一章 C C语言程序设计概述语言程序设计概述 第二章第二章 算法及算法设计简介算法及算法设计简介 第三章第三章 数据描述与基本操作数据描述与基本操作第四章第四章 选择结构程序设计选择结构程序设计 第五章第五章 循环结构程序设计循环结构程序设计 第六章第六章 数组与
2、指针数组与指针第七章第七章 函数与模块化程序设计方法函数与模块化程序设计方法编辑版5第一章第一章 语言程序设计概述语言程序设计概述编辑版6 编辑版71.1 程序设计的概念程序设计的概念1.1.1 程序设计语言程序设计语言1.1.2 程序设计的概念程序设计的概念编辑版8计算机计算机n计算机是用来延伸人的能力的工具,需要人来计算机是用来延伸人的能力的工具,需要人来驾驭驾驭n我们的职责是让非计算机专业的人更容易驾驭我们的职责是让非计算机专业的人更容易驾驭它它n完成这一目标的主要手段之一就是完成这一目标的主要手段之一就是“编程编程(Programming)”编辑版9计算机基本工作过程计算机基本工作过程
3、n整个过程的执行者是硬件,但硬件是受软件控制的整个过程的执行者是硬件,但硬件是受软件控制的n编程,就是编写软件,使硬件按照人的意图工作编程,就是编写软件,使硬件按照人的意图工作编辑版10计算机基本工作过程计算机基本工作过程输入/输出设备存储器运算器控制器源程序和输入数据输出结果取出数据存入数据操作命令存取命令取出程序指令输入输出命令计算结果CPU“冯冯诺依曼机诺依曼机”结构结构 大脑大脑眼眼/耳耳/口口程序和数据执行结果编辑版11软件的形成软件的形成n软件(软件(Software)的形成)的形成q程序员程序员(Programmer)编写程序)编写程序源代码源代码(Source Code)q编译
4、器编译器(Compiler)把源代码转换为可被计算机)把源代码转换为可被计算机理解的理解的机器代码机器代码(Machine Code)q并把机器代码以并把机器代码以可可执行文件执行文件(Executable File)的)的形式保存在磁盘上形式保存在磁盘上编辑版12机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统如 ADD A,B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象
5、1.1.1 程序设计语言程序设计语言编辑版13程序设计语言的故事程序设计语言的故事n计算机为什么用二进制呢?计算机为什么用二进制呢?n为什么不用我们日常熟悉的十进制呢?为什么不用我们日常熟悉的十进制呢?q二进制在在电器元件中容易实现二进制在在电器元件中容易实现 q计算机进行二进制运算比进行十进制运算要简单得计算机进行二进制运算比进行十进制运算要简单得多多 编辑版14程序设计语言的故事程序设计语言的故事n机器语言编写的机器语言编写的1+1程序程序n汇编语言(汇编语言(Assemble Language)编写的)编写的1+1程序程序101110000000000100000000000001010
6、000000100000000MOV AX,1ADD AX,1编辑版15程序设计语言的故事程序设计语言的故事nBASIC语言编写的语言编写的1+1程序程序nC语言编写的语言编写的1+1程序程序PRINT 1+1#include main()printf(%dn,1+1);编辑版1652 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 67S
7、malltalk 80BASICANSI-BASICQBASIC VBFORTRAN90编辑版171.1.2 程序设计的概念程序设计的概念程序设计就是用计算机语言来程序设计就是用计算机语言来编写程序的过程。编写程序的过程。什么是程序?著名计算机科学什么是程序?著名计算机科学家沃思提出有名的公式:家沃思提出有名的公式:算法算法+数据结构数据结构=程序程序编辑版18编辑版191.2 C语言的产生和发展语言的产生和发展1.2.1 C语言的产生语言的产生 1.2.2 C语言的发展语言的发展1.2.3 C语言的特点语言的特点编辑版20n一切从一个叫一切从一个叫“Space Travel”Space Tr
8、avel”的电子游戏开始的电子游戏开始的的nKen ThompsonKen Thompson为了让他的游戏能在为了让他的游戏能在PDP-7PDP-7上运行,上运行,用汇编语言给用汇编语言给PDP-7PDP-7写了一个操作系统写了一个操作系统UNIXUNIXn汇编太不好用了,汇编太不好用了,ThompsonThompson需要高级语言需要高级语言n试验了一些高级语言,包括试验了一些高级语言,包括FortranFortran,都不理想,都不理想n他在他在BCPLBCPL基础上,自己设计了一个基础上,自己设计了一个B B语言语言nUNIXUNIX开始发展,开始发展,B B也不够用了也不够用了nDen
9、nis RitchieDennis Ritchie加入,把加入,把B B改造成改造成C C n开始用开始用C C重写重写UNIXUNIX编辑版211.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 C编辑版22Rit
10、chie和Thompson在开发UNIX编辑版23接受美国国家技术勋章接受美国国家技术勋章编辑版24C语言的祖师爷语言的祖师爷Dennis M.Ritchie编辑版25Ritchie漫画像编辑版26C语言本身既有一般高级语言的特点,又由低级语言本身既有一般高级语言的特点,又由低级语言(汇编语言)的特点。语言(汇编语言)的特点。C语言是一种结构化的程序设计语言,它具有实语言是一种结构化的程序设计语言,它具有实现顺序、分支、循环三种基本结构化控制的语句。现顺序、分支、循环三种基本结构化控制的语句。C语言简洁,紧凑,使用方便灵活。只有语言简洁,紧凑,使用方便灵活。只有32个保个保留字,留字,9种控制
11、语句,书写形式自由。种控制语句,书写形式自由。数据类型丰富。有整型、实型、字符型、数组型数据类型丰富。有整型、实型、字符型、数组型、指针型、结构体型、共用体型和枚举型等。、指针型、结构体型、共用体型和枚举型等。编辑版275、运算功能强。有、运算功能强。有32种运算符,包括了算术运算种运算符,包括了算术运算、关系运算、逻辑运算、位运算、指针运算等。、关系运算、逻辑运算、位运算、指针运算等。6、目标代码质量高,运行速度快。、目标代码质量高,运行速度快。7、可移植性强。、可移植性强。8、语法限制不太严格,程序设计自由度大。、语法限制不太严格,程序设计自由度大。编辑版28C 语言是编译型语言语言是编译
12、型语言n 一种编译语言对应一种编译器一种编译语言对应一种编译器 q按照该语言的语法编写程序源代码,把自己的思想按照该语言的语法编写程序源代码,把自己的思想融入到代码中融入到代码中 q编译器读入源代码,把程序员的意图转换成可执行编译器读入源代码,把程序员的意图转换成可执行程序,供他人使用程序,供他人使用编辑版29C语言与计算机系统层次关系语言与计算机系统层次关系编辑版301.3 简单简单C程序介绍程序介绍编辑版31nC程序格式和结构特点程序格式和结构特点第一个程序第一个程序 Hello,World!/*example1.1 The first C Program*/#include main()
13、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=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=
14、34语句语句预处理命令注释注释主函数子函数编辑版33q格式特点格式特点n习惯用习惯用小写小写字母,大小写敏感字母,大小写敏感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缩进 对齐 有足够的注释 有合适的空行编辑版34q结构特点结构特点n函数与主函数函数与主函数q程序由一个或多个函数组成程序由一个或多个函数组成q必
15、须有且只能有一个主函数必须有且只能有一个主函数main()q程序执行从程序执行从main开始,在开始,在main中结束,其它函数通过嵌套中结束,其它函数通过嵌套调用得以执行。调用得以执行。n程序语句程序语句qC程序由语句组成程序由语句组成q用用“;”作为语句终止符作为语句终止符n注释注释q/*/为注释为注释,不能嵌套不能嵌套q不产生编译代码不产生编译代码例:/*This is the main /*of example1.1*/*/非法n编译预处理命令编译预处理命令函数首部函数首部:包括函数名、函数类型、函数参数名、包括函数名、函数类型、函数参数名、参数类型。参数类型。函数体:声明部分函数体:
16、声明部分,执行部分。执行部分。编辑版351.4 C C程序的上机步骤程序的上机步骤编辑版36编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe开始编辑编译 有错?执行连接结果正确结束可执行目标程序f.exe源程序f.c目标程序f.obj库函数和其他目标程序YesNoYesNo编辑版371.5 C语言的基本语法和结构语言的基本语法和结构1.5.1 C语言的基本语法语言的基本语法 1.5.2 C语言的基本结构语言的基本结构编辑版381.5.1 C语言的基本语法语言的基本语法n标识符标识符n关键字关键字n运算符
17、运算符n分隔符分隔符n常量常量n注释符注释符n字符集字符集编辑版39标识符标识符n常量、变量、语句标号以及自定义函数的名称常量、变量、语句标号以及自定义函数的名称n只能是只能是字母、数字和下划线字母、数字和下划线组成的字符串,组成的字符串,第第一个字符必须是字母或下划线一个字符必须是字母或下划线n标准标准C不限制标识符长度,但一般不超过不限制标识符长度,但一般不超过8字符字符n标识符大小写有区别标识符大小写有区别n标识符名最好能标识符名最好能“顾名思义顾名思义”编辑版403232个关键字个关键字:(auto break case char constcontinue default do do
18、uble elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while编辑版419 9种控制语句种控制语句:if()else switch casefor()while()dowhile()continuebreakgotoreturn编辑版423434种运算符:种运算符:算术运算符:算术运算符:+-+-*/%+-/%+-关系运算符:关系运算符:=!=!=逻辑运算符:!逻辑运算符:
19、!&|&|位运算符位运算符 :|&|&赋值运算符:赋值运算符:=及其扩展及其扩展条件运算符:条件运算符:?:?:逗号运算符:逗号运算符:,指针运算符:指针运算符:*&求字节数求字节数 :sizeofsizeof强制类型转换:强制类型转换:(类型)类型)分量运算符:分量运算符:.-.-下标运算符:下标运算符:其它其它 :()-()-编辑版431.5.2 C语言的基本结构语言的基本结构(1)顺序结构)顺序结构 ABa b 编辑版44(2)选择结构选择结构,或称分支结构 此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框abBAp不成立成立编辑版45 (3)循环结构循环结构,它又
20、称为重复结构,即反复执行某一部分的操作。又两类循环结构:a.当型(当型(while型)循环结构型)循环结构ap1TFAbb.直到型(直到型(Until型)循环结构型)循环结构 aATFbp2编辑版461.6 本章要点小结本章要点小结编辑版47本章课堂练习本章课堂练习 (1)以下说法中正确正确的是().A)C语言程序总是从第一个函数开始执行 B)在C语言程序中,要调用的函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言程序中的main()函数必须放在程序的开始部分编辑版48解答:C解释:C语言程序总是从main()函数开始执行,而不论其在程序中的位置。当主
21、函数执行完毕时,亦即程序执行完毕。除main函数外,其它函数都是在执行main函数时被调用执行的。在C语言中,函数不允许嵌套定义。习惯上,将主函数main()放在最前头,但并不是必须的。编辑版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解释:
22、变量名只能由字母、数字和下划线三种字符所组成,且第一个字符必须为字母或下划线。C语言的关键字不能用作变量名。另外,C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。编辑版53第二章第二章 程序的灵魂程序的灵魂:算法算法 编辑版54n一个程序主要包括以下两方面的信息:一个程序主要包括以下两方面的信息:(1)对数据的描述对数据的描述。在程序中要指定用到。在程序中要指定用到哪哪些些数据以及这些数据的类型和数据的组织形式数据以及这些数据的类型和数据的组织形式q这就是数据结构这就是数据结构(data structure)(2
23、)对操作的描述对操作的描述。即要求计算机进行操作的。即要求计算机进行操作的步骤步骤q也就是算法也就是算法(algorithm)编辑版55n数据是操作的对象数据是操作的对象n操作的目的是对数据进行加工处理,以得到操作的目的是对数据进行加工处理,以得到期望的结果期望的结果n著名计算机科学家沃思著名计算机科学家沃思(Nikiklaus Wirth)提提出一个公式:出一个公式:算法算法+数据结构数据结构=程序程序编辑版56n一个程序除了一个程序除了算法和数据结构这算法和数据结构这主要要素外,主要要素外,还应当采用结构化程序设计方法进行程序设计,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算
24、机语言表示并且用某一种计算机语言表示n算法算法、数据结构数据结构、程序设计方法程序设计方法和和语言工具语言工具是是一个程序设计人员应具备的知识一个程序设计人员应具备的知识q算法算法数据结构数据结构程序设计方法程序设计方法语言工具和环境语言工具和环境程序程序编辑版57n算法是解决算法是解决“做什么做什么”和和“怎么做怎么做”的问题的问题n程序中的操作语句,是算法的体现程序中的操作语句,是算法的体现n不了解算法就谈不上程序设计不了解算法就谈不上程序设计编辑版58编辑版592.1 算法的概念算法的概念n广义地说,为解决一个问题而采取的方法和步广义地说,为解决一个问题而采取的方法和步骤,就称为骤,就称
25、为“算法算法”n对同一个问题,可以有不同的解题方法和步骤对同一个问题,可以有不同的解题方法和步骤n为了有效地进行解题,不仅需要保证算法正确,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法还要考虑算法的质量,选择合适的算法编辑版60n计算机算法可分为两大类别:计算机算法可分为两大类别:q数值运算算法数值运算算法q非数值运算算法非数值运算算法n数值运算数值运算的目的是求数值解的目的是求数值解n非数值运算非数值运算包括的面十分广泛,最常见的是包括的面十分广泛,最常见的是用于事务管理领域用于事务管理领域2.1 算法的概念算法的概念编辑版61n可以用最原始的方法进行:可以用
26、最原始的方法进行: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简单算法的举例概念简单算法的举例概念编辑版62n改进的算法:q设变量p为被乘数q变量i为乘数q用循环算法求结果求求12345简单算法的举例概念简单算法的举例概念编辑版63nS1:使p=1,或写成1pnS2:使i=2,或写成2
27、inS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipnS4:使i的值加1,即i+1 inS5:如果i不大于5,返回重新执行S3;否则,算法结束n最后得到p的值就是 5!的值若是若是100,求什么?,求什么?简单算法的举例概念简单算法的举例概念编辑版64 例例2.2 有有50个学生,要求将成绩在个学生,要求将成绩在80-90分的学分的学生的学号和成绩输出。生的学号和成绩输出。n用用ni代表第代表第i个学生个学生学号,学号,gi表示第表示第i个学生成绩个学生成绩S1:1iS2:如果:如果90 gi80,则输出则输出ni和和gi,否则不输出,否则不输出S3:i+1iS4:如果:如果i50,
28、返回到步骤,返回到步骤S2,继续执行,继续执行,否则,算法结束否则,算法结束编辑版65编辑版66n一个有效算法应该具有以下一个有效算法应该具有以下特点特点:(1)有穷性有穷性。一个算法应包含有限的操。一个算法应包含有限的操作步骤,而不能是无限的。作步骤,而不能是无限的。(2)确定性确定性。算法中的每一个步骤都应。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模当是确定的,而不应当是含糊的、模棱两可的。棱两可的。2.2 算法的特性算法的特性编辑版67n一个有效算法应该具有以下一个有效算法应该具有以下特点特点:(3)有零个或多个输入有零个或多个输入。所谓输入是指在。所谓输入是指在执行算法时需
29、要从外界取得必要的信息。执行算法时需要从外界取得必要的信息。(4)有一个或多个输出有一个或多个输出。算法的目的是为。算法的目的是为了求解,了求解,“解解”就是输出。就是输出。q没有输出的算法是没有意义的。没有输出的算法是没有意义的。(5)有效性有效性。算法中的每一个步骤都应当。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。能有效地执行,并得到确定的结果。2.2 算法的特性算法的特性编辑版68n对于一般最终用户来说对于一般最终用户来说:q他们并不需要在处理每一个问题时都要他们并不需要在处理每一个问题时都要自己设计算法和编写程序自己设计算法和编写程序q可以使用别人已设计好的现成算法和程可
30、以使用别人已设计好的现成算法和程序序q只需根据已知算法的要求给予必要的输只需根据已知算法的要求给予必要的输入,就能得到输出的结果入,就能得到输出的结果输入输入3个数个数黑箱子黑箱子3个数中最大数个数中最大数求求3个数的个数的最大数最大数2.2 算法的特性算法的特性编辑版69编辑版70n常用的方法有:常用的方法有:q自然语言自然语言q传统流程图传统流程图q结构化流程图结构化流程图q伪代码伪代码q2.3 算法的表示算法的表示编辑版71n2.1节节例子例子介绍的算法是用自然语言表示的介绍的算法是用自然语言表示的n用自然语言表示通俗易懂,但文字冗长,容易用自然语言表示通俗易懂,但文字冗长,容易出现歧义
31、性出现歧义性n用自然语言描述包含分支和循环的算法,不很用自然语言描述包含分支和循环的算法,不很方便方便n除了很简单的问题外,一般不用自然语言除了很简单的问题外,一般不用自然语言编辑版72用一些图形符号形象直观的表述算法,上表给出用一些图形符号形象直观的表述算法,上表给出了了ANSI 规定的程序流程图符号。规定的程序流程图符号。n流程图流程图是用一些图框来表示各种操作是用一些图框来表示各种操作n用图形表示算法,直观形象,易于理解用图形表示算法,直观形象,易于理解编辑版73x0YN一个入口一个入口两个出口两个出口编辑版74位置不够位置不够防止交叉防止交叉编辑版75 例例2.4 将例将例2.1的算法
32、用的算法用流程图表示。流程图表示。求求12345n如果需要将最后结果输如果需要将最后结果输出出:1t输出输出ti5开始开始2it*iti+1i结束结束NY编辑版76n通过以上几个例子可以看出流程图是表通过以上几个例子可以看出流程图是表示算法的较好的工具示算法的较好的工具n一个流程图包括以下几部分一个流程图包括以下几部分:(1)表示相应操作的框表示相应操作的框(2)带箭头的流程线带箭头的流程线(3)框内外必要的文字说明框内外必要的文字说明n流程线不要忘记画箭头,流程线不要忘记画箭头,否则否则难以判定难以判定各框的执行次序各框的执行次序编辑版77n特点:绘制简单,描述直观,之前广泛使用。特点:绘制
33、简单,描述直观,之前广泛使用。n缺点:缺点:q程序流程图不易表示算法或程序的层次结构。程序流程图不易表示算法或程序的层次结构。q用箭头表示的控制流可能引起随意的转移控制。用箭头表示的控制流可能引起随意的转移控制。q可能诱使人们过早地考虑局部程序的控制结构而忽可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构。视全局的程序结构。q不易表示数据结构和程序模块之间的关系。不易表示数据结构和程序模块之间的关系。编辑版78NS图表示法图表示法 1973 1973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提提出了一种新的流程图形式。在
34、这种流程图中,完出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的形框内,在该框内还可以包含其他的从属于它的框。框。这种流程图又称这种流程图又称NSNS结构化流程图(结构化流程图(N N和和S S是两位美国学者的英文姓名的第一个字母)。是两位美国学者的英文姓名的第一个字母)。这种流程图适于结构化程序设计,因此很受欢这种流程图适于结构化程序设计,因此很受欢迎。迎。编辑版79nN-S流程图用以下的流程图符号:ABABYNpA当当p1成立成立A直到直到p2成立成立顺序结构顺序结构选择
35、结构选择结构循环结构循环结构(当型)(当型)循环结构循环结构(直到型)(直到型)NS图表示法图表示法 编辑版80用伪码表示算法用伪码表示算法 伪代码是用介于自然语言和计算机语言伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图之间的文字和符号来描述算法。它不用图形符号,因此书写方便,格式紧凑,也比形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)较好懂,便于向计算机语言算法(即程序)过渡。过渡。编辑版81BEGIN(算法开始算法开始)1=iWhile ii1=i While i=80 and giiEND(算法结束)(算法结束)前例用伪代码表示算法如
36、下:编辑版82用计算机语言表示算法用计算机语言表示算法 n要完成一项工作,包括要完成一项工作,包括设计算法设计算法和和实现算法实现算法两个部分。两个部分。n设计算法的目的是为了实现算法。设计算法的目的是为了实现算法。n不仅要考虑如何设计一个算法,也要考虑如不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。何实现一个算法。编辑版83用用C语言程序实现前例如下语言程序实现前例如下#include/*打印出50名同学中成绩在80-90分者*/main()int i,g50,n50;for(i=0;i50;i+)/*输入50名同学的学号,成绩*/scanf(“%d,%d”,&ni,&gi);for
37、(i=0;i=80)&(gi=90)printf(“%6d,%3dn”,ni,gi);编辑版84编辑版852.4 结构化程序设计方法简介结构化程序设计方法简介 编辑版86顺序、分支和循环三种基本结构的共同特点:顺序、分支和循环三种基本结构的共同特点:(1)只有一个入口。只有一个入口。(2)只有一个出口。只有一个出口。(3)结构内的每一部分都有机会被执行到。也就是结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都有从入口到出口的路径说,对每一个框来说,都有从入口到出口的路径通过它。通过它。(4)结构内不存在结构内不存在“死循环死循环”(无终止的循环)。(无终止的循环)。编辑版87结构
38、化程序结构化程序 所谓结构化程序,就是仅仅使用顺序、选择、所谓结构化程序,就是仅仅使用顺序、选择、循环等三种基本结构所构造的程序。循环等三种基本结构所构造的程序。结构化程序设计方法结构化程序设计方法 结构化程序设计方法的基本思想是,把一个复杂结构化程序设计方法的基本思想是,把一个复杂问题的求解过程分阶段进行。每个阶段的问题都问题的求解过程分阶段进行。每个阶段的问题都控制在人们容易理解和处理的范围内。控制在人们容易理解和处理的范围内。编辑版882.4 本章要点小结本章要点小结编辑版89第三章第三章 数据描述与数据描述与 基本操作基本操作 编辑版90n3.1 基本数据类型基本数据类型n3.2 运算
39、符和表达式运算符和表达式n3.3 输入输出操作输入输出操作编辑版913.1 基本数据类型基本数据类型n3.1.1 C语言的数据类型语言的数据类型n3.1.2 常量和变量常量和变量n3.1.3 数据类型转换数据类型转换编辑版923.1.1 C3.1.1 C语言的数据类型语言的数据类型(一)什么是数据类型?(二)C语言的数据类型有哪些?编辑版93(一一)什么是数据类型?什么是数据类型?数据结构+算法=程序C语言中以“数据类型”形式存在对数据的描述对操作的描述编辑版94数据类型基本类型整型(有符号、无符号)字符型实型(浮点型)枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型单精度型双精度型
40、在程序中对用到的所有数据都必须指定其数据类型.?不同类型的数据,所占内存的字节数不同,对应的操作也不相同。(二二)C)C的数据类型的数据类型编辑版95整型数据整型数据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中定义为中定义为 _i
41、nt64编辑版962.整型变量的符号属性整型变量的符号属性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;整型数据编辑版97字符型数据字符型数据n字符是按其代码字符是按其代码(整数整数)形式存储的形式存
42、储的nC99把字符型数据作为整数类型的一种把字符型数据作为整数类型的一种n字符型数据在使用上有自己的特点字符型数据在使用上有自己的特点编辑版981.字符与字符代码字符与字符代码大多数系统采用大多数系统采用ASCII字符集字符集q字母:字母:A Z,a zq数字:数字:09q专门符号:专门符号:29个:个:!”#&()*等等q空格符:空格、水平制表符空格符:空格、水平制表符t、换行、换行n等等q不能显示的字符:不能显示的字符:空空(null)字符字符(以以0表示表示)、鸣铃鸣铃(以以a表示表示)、退格退格(以以b表示表示)、回车、回车(以以r表示表示)等等字符型数据编辑版99n字符字符1和整数和
43、整数1是不同的概念是不同的概念:q字符字符1只是代表一个形状为只是代表一个形状为1的符号,在的符号,在需要时按原样输出,在内存中以需要时按原样输出,在内存中以ASCII码形式码形式存储,占存储,占1个字节个字节q整数整数1是以整数存储方式是以整数存储方式(二进制补码方式二进制补码方式)存存储的,占储的,占2个或个或4个字节个字节字符型数据编辑版1002.字符变量字符变量n用类型符用类型符char定义字符变量定义字符变量q char c=?;系统把系统把“?”的的ASCII代码代码63赋给变量赋给变量cqprintf(“%d%cn”,c,c);q输出结果是:输出结果是:63?字符型数据编辑版10
44、1浮点型数据浮点型数据浮点型数据是用来表示具有小数点的实数浮点型数据是用来表示具有小数点的实数nfloat型型(单精度浮点型单精度浮点型)q编译系统为编译系统为float型变量分配型变量分配4个字节个字节q数值以规范化的二进制数指数形式存放数值以规范化的二进制数指数形式存放 编辑版102浮点型数据是用来表示具有小数点的实数浮点型数据是用来表示具有小数点的实数nfloat型型(单精度浮点型单精度浮点型)ndouble型型(双精度浮点型双精度浮点型)u编译系统为编译系统为double型变量分配型变量分配8个字节个字节u15位有效数字位有效数字浮点型数据编辑版103几种基本数据类型类型 符号关键字数
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为例:编辑版
46、104举例:数据溢出(举例:数据溢出(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天的时候,此计数器会溢出,引起死机编辑版105(一)常 量(二)变 量3.1.2 3.1.2 常量与变量常量与变量编辑版
47、106预备知识:预备知识: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 编辑版107n一个字节有多大?一个字节有多大?q 可以表示数字可以表示数字0255q 保存一个字符(英文字母、数字、符号),保存一个字符(英文字母、数字、符号),ASCII编码编码q 两个字节保存一个汉字两个字节保存一个汉字编辑版108预
48、备知识:二进制预备知识:二进制n世界上有世界上有(10)2种人,种人,1种人懂二进制,种人懂二进制,1种人种人不懂二进制不懂二进制n 一个位有多大?一个位有多大?q 只能是只能是“0”或者或者“1”,这叫二进制,这叫二进制n二进制诠释了计算机的哲学二进制诠释了计算机的哲学q 种类众多的复杂事物都是由若干种简单事物构成种类众多的复杂事物都是由若干种简单事物构成编辑版1091.常量常量:在程序运行过程中,其值在程序运行过程中,其值不能被改变的量不能被改变的量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 常量与变量编辑版110字符与字符串的区别有哪些?字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。编辑版1112.变量变量:在程序运行期间,变量
50、的值是可以改变的在程序运行期间,变量的值是可以改变的n变量必须变量必须先定义先定义,后使用后使用n定义定义变量变量时指定该变量的时指定该变量的名字名字和和类型类型n变量名变量名和和变量值变量值是是两个不同的概念两个不同的概念n变量名实际上是以一个名字代表的一个变量名实际上是以一个名字代表的一个存储地址存储地址n从变量中取值,实际上是通过变量名找到相应的内存从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据地址,从该存储单元中读取数据3.1.2 常量与变量编辑版112方式:1、定义变量的同时赋初值(也叫变量初始化)。格式:数据类型 变量名=初值,变量名2=初值2;2、通过