版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 C语言概述本章要求:(1)C语句概述;(2)程序的三种基本结构;(3)赋值语句;(4)数据的输入与输出。教学重点:1. C语言的特点。2. C语言的编程环境。教学难点:掌握编程环境的使用方法教学方法:采用多媒体教学的方法进行讲授,学生在教师指导下通过计算机进行操作练习。课时数:4(讲授2节课,上机练习2节课)1.1 C语言的发展及特点1.1.1 C语言的发展过程1、C语言是国际上流行的、很有发展前途的计算机高级语言。C语言适合于作为“系统描述语言”。它既可以用来编写系统软件,也可以用来编写应用程序。以前操作系统等系统软件主要采用汇编语言编写。汇编语言依赖于计算机硬件,程序的可读性、可移
2、植性都比较差。为了提高可读性和可移植性,人们希望采用高级语言编写这些软件,但是一般的高级语言难以实现汇编语言的某些操作,特别是针对硬件的一些操作(如:内存地址的读写-直接硬件、二进制位的操作)。人们设法寻找一种既具有一般高级语言特性,又具有低级语言特性的语言,C语言就在这种情况下应运而生。2、C语言的发展见下图:ALGOL60 - CPL - BCPC - B - C - 标准C - ANSI C - ISO Cl ALGOL60:一种面向问题的高级语言。ALGOL60离硬件较远,不适合编写系统程序。l CPL(Combined Programming language,组合编程语言):CPL
3、是一种在ALGOL60基础上更接近硬件的一种语言。CPL规模大,实现困难。l BCPL(Basic Combined Programming language,基本的组合编程语言):BCPL是对CPL进行简化后的一种语言。l B语言:是对BCPL进一步简化所得到的一种很简单接近硬件的语言。B语言取BCPL语言的第一个字母。B语言精练、接近硬件,但过于简单,数据无类型。B语言诞生后,Unix开始用B语言改写。l C语言:是在B语言基础上增加数据类型而设计出的一种语言。C语言取BCPL的第二个字母。C语言诞生后,Unix很快用C语言改写,并被移植到其它计算机系统。l 标准C 、ANSI C、ISO
4、 C:C语言的标准化。注:最初Unix操作系统是采用汇编语言编写的,B语言版本的Unix是第一个用高级语言编写的Unix。在C语言诞生后,Unix很快用C语言改写,C语言良好的可移植性很快使Unix从PDP计算机移植到其它计算机平台,随着Unix的广泛应用,C语言也得到推广。从此C语言和Unix像一对孪生兄弟,在发展中相辅相成,Unix和C很快风靡全球。3、从C语言的发展历史可以看出,C语言是一种既具有一般高级语言特性(ALGOL60带来的高级语言特性),又具有低级语言特性(BCPL带来的接近硬件的低级语言特性)的程序设计语言。C语言从一开始就是用于编写大型、复杂系统软件的,当然C语言也可以用
5、来编写一般的应用程序。也就是说:C语言是程序员的语言!IBM PC微机DOS、Windows平台上常见的C语言版本有:l Borland公司:Turbo C,Turbo C+,Borland C+C+ Builder(Windows版本)l Microsoft公司:Microsoft CVisual C+(Windows版本)1.1.2 C语言的特点C语言是从“组合编程语言”CPL发展而来,C语言既具有一般高级语言特性(ALGOL60带来的高级语言特性),又具有低级语言特性(BCPL带来的接近硬件的低级语言特性)。C语言具有下面特点(其中1-6属于高级语言特性,7,8属于低级语言特性)1、 C
6、语言的语言成分简洁,紧凑,书写形式自由例:将C语言程序段与实现同样功能的PASCAL语言程序段进行比较。C语言PASCAL语言含义说明1BEGINEND复合语句(或:语句块)PASCAL显得罗嗦2if(e)S;IF(e)THEN S;条件语句PASCAL至少多了一个THEN关键词3int i;VAR i:INTEGER定义i为整型变量PASCAL至少多了一个VAR关键词4int a10;VAR a:ARRAY1.10 OF INTEGER定义a为整型一维数组,10个元素PASCAL多了VAR、ARRAY、OF等关键词5int f();FUNCTION f():INTEGER定义f为返回值为整型
7、的函数PASCAL至少多了一个FUNCTION关键词6int *p;VAR p:INTEGER定义p为指向整型变量的指针变量PASCAL至少多了一个VAR关键词7i+=2;i:=i+2赋值语句C中如果将一个变量与另外一个操作数运算后赋值给原来的变量,使用复合的运算符可以不要重复书写此变量。C形式上更加简洁。8I+I=I+1I自增1C定义了常用的自增1、自减1运算符。形式上显得相当简洁2、 C语言拥有丰富的数据类型C语言具有整型、实型、字符型、数组类型、指针类型、结构体类型、共同体类型等数据类型。能方便地构造更加复杂的数据结构(如:使用指针构造链表、树、栈)。3、 C语言的运算符丰富、功能更强大
8、例如:(1) C语言具有复合的赋值运算符“+-*/%=”(加等、减等、乘等、除等) ,“=”“=”(右移等、左移等),“&|=”(与等、或等、非等)。x+=5等价于x=x+5(2) C语言有条件运算符“?:”可代替简单的if/else语句。如果需要表示:“如果x小于或等于0,y为0;否则y为1”可以采用:y=x=0?0:1;如果用一般的程序设计语言表示就应该像下面这样表示:if(xy)z=x; else z=y; return z; /* 将z值返回,通过max带回调用处 */* max函数体结束 */说明:输入两个整数,计算两者较大的数,并输出。1、 本程序包括两个函数。其中主函数main仍
9、然是整个程序执行的起点。函数max计算两数中较大的数。2、 主函数main调用scanf函数获得两个整数,存入a,b两个变量,然后调用函数max获得两个数字中较大的值,并赋给变量c。最后输出变量c的值(结果)。3、 int max(int x,int y)是函数max的函数头,函数max的函数头表明此函数获得两个整数,返回一个整数。4、 函数max同样也用将函数体括起来。max的函数体是函数max的具体实现。从参数表获得数据,处理后得到结果z,然后将z返回调用函数main。5、 本例还表明函数除了调用库函数外,还可以调用用户自己定义,编制的函数。1.2.2 C程序结构综合上述三个例子,我们对C
10、语言程序的基本组成和形式(程序结构)有了一个初步了解:1、 C程序由函数构成(C是函数式的语言,函数是C程序的基本单位)(以例1.3说明)l 一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。函数是C程序的基本单位。l 被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。C是函数式的语言,程序的全部工作都是由各个函数完成。编写C程序就是编写一个个函数。l C函数库非常丰富,ANSI C提供100多个库函数,Turbo C提供300多个库函数。2、 main函数(主函数)是每个程序执行的起始点(以例1.3说明)一个C程序总是从main函数开
11、始执行,而不论main函数在程序中的位置。可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其它函数之间。3、 一个函数由函数首部和函数体两部分组成(以例1.3的max函数说明)(1)函数首部:一个函数的第一行。返回值类型 函数名(函数参数类型1 函数参数名1,函数参数类型2,函数参数名2)注意:函数可以没有参数,但是后面的一对()不能省略,这是格式的规定。(2)函数体:函数首部下用一对括起来的部分。如果函数体内有多个,最外层是函数体的范围。函数体一般包括声明部分、执行部分两部分。 声明部分:在这部分定义本函数所使用的变量。 执行部分:由若干条语句组成命令序列(可以在其
12、中调用其它函数)。4、 C程序书写格式自由l 一行可以写几个语句,一个语句也可以写在多行上。l C程序没有行号,也没有FORTRAN,COBOL那样严格规定书写格式(语句必须从某一列开始)。l 每条语句的最后必须有一个分号“;”表示语句的结束。5、 可以使用/* */对C程序中的任何部分作注释注释可以提高程序可读性,使用注释是编程人员的良好习惯。实践中,l 编写好的程序往往需要修改、完善,事实上没有一个应用系统是不需要修改、完善的。很多人会发现自己编写的程序在经历了一些时间以后,由于缺乏必要的文档、必要的注释,最后连自己都很难再读懂。需要花费大量时间重新思考、理解原来的程序。这浪费了大量的时间
13、。如果一开始编程就对程序进行注释,刚开始麻烦一些,但日后可以节省大量的时间。l 一个实际的系统往往是多人合作开发,程序文档、注释是其中重要的交流工具。6、 C语言本身不提供输入/输出语句,输入/输出的操作是通过调用库函数(scanf,printf)完成。输入/输出操作涉及具体计算机硬件,把输入/输出操作放在函数中处理,可以简化C语言和C的编译系统,便于C语言在各种计算机上实现。不同的计算机系统需要对函数库中的函数做不同的处理,以便实现同样或类似的功能。不同的计算机系统除了提供函数库中的标准函数外,还按照硬件的情况提供一些专门的函数。因此不同计算机系统提供的函数数量、功能会有一定差异。1.3 算
14、法及其描述1.3.1算法及其表示方法1、 算法:为解决一个问题而采取的方法和步骤称为“算法”。对于同一个问题可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而言,应当选择简单的、运算步骤少的,既运算快、内存开销小的算法(算法的时空效率)。2、 算法的5大特性(1) 有穷性:一个算法应当包含有限的步骤,而不能是无限的步骤;同时一个算法应当在执行一定数量的步骤后,算法结束,不能死循环。事实上“有穷性”往往指“在合理的范围之内”的有限步骤。如果让计算机执行一个历时1000年才结束的算法,算法尽管有穷,但超过了合理的限度,人们也不认为此算法是有用的。(2) 确定性算法中的每一个步骤都应
15、当是确定的,而不是含糊的、摸棱两可的。也就是说不应当产生歧义。特别是算法用自然语言描述时应当注意这点。例如:“将成绩优秀的同学名单打印输出”就是有歧义的。“成绩优秀”是要求每门课程都90分以上,还是平均成绩在90分以上?不明确,有歧义,不适合描述算法步骤。(3) 有0个或多个输入(即:可以没有输入,也可以有输入)所谓输入是指算法执行时从外界获取必要信息。(外界是相对算法本身的,输入可以是人工键盘输入的数据,也可以是程序其它部分传递给算法的数据)例如:例如:不需要输入任何信息,就可以计算出5!;(0个输入)例如:输入一个正整数n,然后判断n是否为素数;(1个输入)例如:如果要计算两个整数的最大公
16、约数,则需要输入2个整数m,n。(2个输入)(4) 有1个或多个输出(即算法必须得到结果)算法的输出:算法得到的结果。算法必须有结果,没有结果的算法没有意义。(结果可以是显示在屏幕上的,也可以是将结果数据传递给程序的其它部分)(5) 有效性算法的每个步骤都应当能有效执行,并能得到确定的结果。例如:b=0,则执行a/b是不能有效执行的。3、 算法的表示方法为了表示一个算法,可以用不同的方法。常用的算法表示方法:自然语言,传统流程图,结构化流程图(N-S流程图),伪代码、计算机语言等。(重点:传统流程图,N-S流程图)(1) 用自然语言表示算法算法可以用自然语言描述的。自然语言就是人们日常使用的语
17、言,可以是汉语、英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现歧义。自然语言表示的含义往往不太严格,要根据上下文才能准确判断其含义。此外,用自然语言描述分支和循环的算法,不是很直观。因此,除了简单问题,一般不采用自然语言描述算法。(2) 用流程图表示算法流程图表示算法:用一些图框表示各种操作,用箭头表示算法流程。用图形表示算法直观形象,易于理解。美国标准化协会ANSI规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用。l 起止框:表示算法的开始和结束。一般内部只写“开始”或“结束”。l 处理框:表示算法的某个处理步骤,一般内部常常填写赋值操作。l 输入输出框:表示算法请求
18、输入输入需要的数据或算法将某些结果输出。一般内部常常填写“输入”,“打印/显示”l 菱形框(判断框):作用主要是对一个给定条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。它有一个入口,两个出口。l 连接点:用于将画在不同地方的流程线连接起来。同一个编号的点是相互连接在一起的,实际上同一编号的点是同一个点,只是画不下才分开画。使用连接点,还可以避免流程线的交叉或过长,使流程图更加清晰。l 注释框:注释框不是流程图中必须的部分,不反映流程和操作,它只是对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的人更好地理解流程图的作用。流程图是表示算法的较好的工具。流程图包括以下几个部
19、分:表示相应操作的框,带箭头的流程线,框内、框外必要的文字说明。注意:流程线一定不要忘记箭头,因为它反应流程执行的先后次序。传统流程图采用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程转来转去,使流程图变得毫无规律。人们对这种流程图进行改进,规定几种基本的结构,然后由这些基本结构按一定规律组成算法结构,整个算法结构是由上而下地将各个基本结构顺序排列起来。这样可以在一定程度上,提高算法的质量。三种基本结构,有以下共同点:l 只有一个入口:不得从结构外随意转入结构中某点。l 只有一个出口:不得从结构内某个位置随意转出(跳出)。l 结构中的每一部分都有机会被执
20、行到。(没有“死语句”)l 结构内不存在“死循环”(无终止的循环)已经证明:由三种基本结构顺序组成的算法结构,可以解决任何复杂问题。由基本结构组成的算法属于“结构化”算法。用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑关系,因此得到广泛使用。每一个程序编制人员都应当熟练掌握流程图,会看会画。(软件专业水平、资格考试也用这种流程图表示)。绘制流程图可以使用Visio 3,4等流程图设计工具。(3) 用N-S流程图表示算法(盒图)既然基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属于多余的了。美国学者I.Nassi,B.Shneiderman提出了一种新的
21、流程图N-S流程图。这种流程图中,完全去掉了带箭头的流程线。每种结构用一个矩形框表示。N-S流程图的流程图符号:l 顺序结构:先执行A操作,再执行B操作。l 选择结构:当p条件成立,执行A操作,当p条件不成立,执行B操作。A,B操作允许空操作,即什么都不做。注意选择结构是一个整体,代表一个基本结构。l 循环结构:a)当型循环:当条件p成立时,反复执行A操作,直到p条件不成立为止。当型循环先判断,再决定是否执行循环体,所以在条件p一次都不满足时,循环体A可能一次都不执行。b)直到型循环:当条件p不成立时,反复执行A操作,直到p条件成立为止。直到型循环先执行循环体A,然后再判断条件p,所以循环体至
22、少执行一次。一般情况循环算法既可以用当型循环,也可以用直到型循环实现(可以实现等价算法)。循环结构也是一个整体,同样也代表一个基本结构。注意:三种结构中的A、B框可以是一个简单的操作,也可以是3个基本结构之一。也就是说基本结构可以嵌套。N-S流程图表示算法的优点:(未找到计算机绘盒图的工具,smartdraw)l 比文字描述更加直观、形象,易于理解;l 比传统的流程图紧凑易画;l 废除流程线,整个算法结构是由各个基本结构按顺序组成。N-S流程图的上下顺序就是执行时的顺序。N-S图表示的算法都是结构化的算法。(4) 用伪代码表示算法(常常用于算法设计)用传统流程图、N-S图表示算法,直观易懂,但
23、绘制比较麻烦,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的,因此,流程图适合表示算法,但在设计算法过程中使用不是很理想。为了设计算法方便,常使用伪代码工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡。(5) 用计算机语言表示算法用计算机语言表示算法实际上就是实际的程序。用计算机语言表示算法必须严格遵守所使用的语言的语法规则。1.3.2结构化程序设计结构化算法或程序由三种基本结构顺序组成:1、 顺序结构2、 选择结构3、 循环结构在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构中
24、。可以用改进流程图,或N-S图表示。1.3.3算法设计举例例1:计算1x2x3x4x5。(即5!)解:算法1:直接写出算式S1: result=1x2x3x4x5很简单,一步就完成了。但是考虑一下如果要计算100!,是否写都写得累死了。算法2:考虑到1x2x3x4x5可以改写为:(1x2)x3)x4)x5),S1:p1=1x2S2: p2=p1x3S3: p3=p2x4S4: p4=p3x5 结果在p4里。考虑计算100!,同样此算法也一样麻烦,要写99步。本算法同样不适合编程。但是可以从本算法看出一个规律。即:每一步都是两个数相乘,乘数总是比上一步乘数增加1后参与本次乘法运算,被乘数总是上一
25、步乘法运算的乘积。可以考虑用一个变量i存放乘数,一个变量p存放上一步的乘积。那么每一步都可以写成:pxi,然后让pxi的乘积存入p,即:每一步都是p=pxi。也就是说p既代表被乘数又代表乘积。这样可以得到算法3。算法3:S0: p=1,i=2S1: p=pxi, i=i+1S2: p=pxi, i=i+1S3: p=pxi, i=i+1S4: p=pxi, i=i+1从算法3表面上看与算法2差不多,如果要计算100!,同样要写99步。但是从算法3可以看出S1-S4步骤实际上是一样的,也就是说S1-S4同样的操作重复做了4次。计算机对同样的操作可以用循环完成,循环是计算机工作的强项(计算机高速度
26、运算)。算法4就是在算法3的基础上采用循环功能的算法实现。算法4:S0: p=1,i=2S1: p=pxi, i=i+1S2: 如果i小于或等于5,返回重新执行步骤S1及S2;否则,算法结束,此时p中的值就是5!的值。显然算法4简洁,通用性好。如果要计算100!只要将S2中的循环判断条件改为:“i小于或等于100”,算法其余部分不需要做任何修改。如果要计算1x3x5x7x9x11,只要将S0:“i=2”修改为“i=3”,S1:“i=i+1”修改为“i=i+2”, 循环判断条件改为:“i小于或等于11”即可。从本例可以看出,同样的问题,算法实现可以不同。同一问题的不同的算法在算法通用性、算法的简
27、洁程度上有较大的差异。计算机处理有规律的事情比较方便,尽量考虑将算法某个部分统一,以便采用循环处理。求5!的算法(传统流程图表示)求5!的算法(N-S流程图表示)p=1i=2p=p*ii5例2: 对于一个大于或者等于3的正整数,判断它是不是一个素数。(素数,是指除了1和该数本身之外,不能被其它任何整数整除的数)(疑问?1,2是否是素数)解:分析:根据素数定义,对于一个3的正整数n,如果n只能被1,n整除,那么n是素数;也就是素数必须满足两个条件:1、 是3的正整数2、 只能被1和自身整除(被1和自身是肯定可以整除的),不能被其它2-(n-1)的正整数整除(全部不能整除)。反过来理解:任何3的正
28、整数n,如果能够被2-(n-1)的任何一个正整数整除,那么它一定不是素数。假设给定的正整数n,根据题意,判断一个正整数是否素数,可以用n作为被除数,分别将2,3,4n-1各个正整数作为除数,如果有任何一个可以整除,那么n不是素数,如果全部都不能整除,那么n是素数。算法:S0: 输入nS1: i=2S2: n被i除得到余数rS3: 如果余数r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则继续执行S4S4: i=i+1S5: 如果in-1,返回执行S2,否则打印n“是素数”,算法结束。实际上,n不必被2到(n-1)的整数除,只需要被2到n/2之间的整数除即可,甚至只需被2到sqrt(n)之间的整数除即可。判断素数算法(N-S流程图表示)输入ni=2,w=0r=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 孵化器市场发展预测和趋势分析
- 小学科学《拧螺丝钉的学问》说课稿
- 标志设计学习通超星期末考试答案章节答案2024年
- 口腔修复学(第二期)学习通超星期末考试答案章节答案2024年
- 大型工业企业售电代理服务方案
- 布卡罩袍产业深度调研及未来发展现状趋势
- 供热管网工程施工质量控制方案
- 课外阅读资源整合方案
- 国开(内蒙古)2024年《矿井测量#》形考答案
- 医疗物联网(IoMT)行业相关项目经营管理报告
- 2024年国家公务员考试行测真题卷行政执法答案和解析
- 《驼鹿消防员的一天》课件
- 人教版高一上册中外历史纲要(一)知识点
- 管线工程测量施工方案(雨污分流管网工程)
- 上海链家房地产经纪公司人员激励机制存在的问题与对策分析
- 医院基本建设存在的问题及对策
- 农机修理工培训大纲
- 钻井操作简答题资料
- 临床护理PBL教学(PPT课件)(精选干货)
- 新视野第三册网测习题和答案资料
- 新时代企业战略管理制度转变与创新
评论
0/150
提交评论