1、1第第1 1章章 语言概述语言概述本章主要介绍本章主要介绍C语言程序的结构和书写,语言程序的结构和书写,以及以及Turbo C V2.0的基本操作。的基本操作。2本章内容本章内容1.1 C语言的发展简史语言的发展简史1.2 C语言的特点语言的特点1.3 简单的简单的C程序介绍程序介绍1.4 Turbo C V2.0的基本操作的基本操作1.5 程序设计与算法程序设计与算法1.6 如何学习本课程如何学习本课程31.1 C语言的发展简史语言的发展简史1.1.C C语言诞生的语言诞生的历史背景历史背景2.C2.C语言的语言的诞生及发展诞生及发展3.3.在微机上使用的语言编译系统有在微机上使用的语言编译
2、系统有Microsoft CMicrosoft C、Turbo C Turbo C、Borland CBorland C等。虽然它等。虽然它们的基本部分都是相同的,但还是有一些差异,们的基本部分都是相同的,但还是有一些差异,所以请大家注意自己所使用的编译系统的特点所以请大家注意自己所使用的编译系统的特点和规定(参阅相应的手册)。和规定(参阅相应的手册)。本课程选定的上机环境是本课程选定的上机环境是TC V2.0TC V2.0。4C语言诞生的历史背景语言诞生的历史背景 在在C语言诞生以前,系统软件主要是用语言诞生以前,系统软件主要是用汇编汇编语言语言编写的。由于汇编语言程序依赖于计算机硬编写的。
3、由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有是汇编语言的优势),于是人们盼望有一种兼有汇编语言汇编语言和和高级语言高级语言特性的新语言。特性的新语言。56许多著名的系统软件许多著名的系统软件,如如DBASE PLUS、DBASE 都是由都是由C 语言编写的。到上世纪语言编写的。到上世纪90年代,年代,C已经成为计算机专业学生的已经成为计算机专业学生的首选教学语言首选教学语言,并成,并成为一代程序员主要
4、工作语言。为一代程序员主要工作语言。90年代中期,随着年代中期,随着PC的普及和的普及和C+等面向对象等面向对象语言的出现,人们渐渐把视线转移到语言的出现,人们渐渐把视线转移到PC应用软件应用软件上,上,程序员们也开始习惯用面向对象这种更高级方式思程序员们也开始习惯用面向对象这种更高级方式思考和解决问题。大家对考和解决问题。大家对C强大的强大的底层控制底层控制能力失去能力失去兴趣,因为那些复杂的代码已经可以交给编译器去兴趣,因为那些复杂的代码已经可以交给编译器去实现,底层的操作已经完全可以交给实现,底层的操作已经完全可以交给类库类库和操作系和操作系统统API去进行,去进行,C语言逐渐失去了主流
5、编程语言的位语言逐渐失去了主流编程语言的位置。置。7进入进入21世纪,随着世纪,随着个人电子消费产品个人电子消费产品和和开源软开源软件件的流行,的流行,C语言再次焕发生机。由于语言再次焕发生机。由于C在底层控制在底层控制和性能方面的优势,使之成为芯片级开发(嵌入式)和性能方面的优势,使之成为芯片级开发(嵌入式)和和Linux平台开发的首先语言;在通信、网络协议、平台开发的首先语言;在通信、网络协议、破解、破解、3D引擎、操作系统、驱动、单片机、手机、引擎、操作系统、驱动、单片机、手机、PDA、多媒体处理、实时控制等领域,、多媒体处理、实时控制等领域,C正在用一正在用一行行代码证明它从行行代码证
6、明它从应用级应用级开发到开发到系统级系统级开发的强大开发的强大和高效。和高效。8C语言的诞生及其发展语言的诞生及其发展 语言是语言是贝尔实验室贝尔实验室于上世纪于上世纪70年代初研制年代初研制出来的,后来又被多次改进,并出现了多种版本。出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(年代初,美国国家标准化协会(ANSI),根),根据语言问世以来各种版本对语言的发展和扩据语言问世以来各种版本对语言的发展和扩充,制定了充,制定了ANSI C标准(标准(1989年再次做了修年再次做了修订)。订)。本课程以本课程以ANSI C新标准来介绍。新标准来介绍。91.2 语言程序的
7、特点语言程序的特点C语言同时具有汇编语言和高级语言的优势。语言同时具有汇编语言和高级语言的优势。(1)语言简洁、紧凑,使用方便、灵活)语言简洁、紧凑,使用方便、灵活(共只有(共只有32个关键字,个关键字,9种控制语句)。种控制语句)。(2)运算符极其丰富。)运算符极其丰富。(3)数据结构丰富,具有现代化语言的各)数据结构丰富,具有现代化语言的各种数据结构。种数据结构。(4)具有结构化的控制语句,用函数实现)具有结构化的控制语句,用函数实现程序的模块化。程序的模块化。程序演示程序演示1程序演示程序演示2程序文本程序文本1程序文本程序文本210(5)语法限制不太严格,程序设计自由度)语法限制不太严
8、格,程序设计自由度大,所以,程序员应仔细检查程序保证其正确大,所以,程序员应仔细检查程序保证其正确性,而不要过分依赖性,而不要过分依赖C编译系统去查错。编译系统去查错。如:对数组下标越界不作检查,整型数据如:对数组下标越界不作检查,整型数据与字符型数据可以通用。与字符型数据可以通用。11(6)C语言允许直接访问物理地址,能进语言允许直接访问物理地址,能进行位(行位(bit)操作,能实现汇编语言的大部分功)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。能,可以直接对硬件进行操作。所以,所以,C语言兼有高级语言和低级语言的特语言兼有高级语言和低级语言的特点,又称为点,又称为“中级语言中
9、级语言”,既可用来编写应用软,既可用来编写应用软件,又可用来编写系统软件。对操作系统和系统件,又可用来编写系统软件。对操作系统和系统实用程序以及需要对硬件进行操作的场合,用实用程序以及需要对硬件进行操作的场合,用C明显优越于其他高级语言。明显优越于其他高级语言。12(7)生成的目标代码质量高,程序执行效)生成的目标代码质量高,程序执行效率高。率高。(8)可移植性好(较之汇编语言),基本)可移植性好(较之汇编语言),基本上不作修改就能用于各种型号的计算机和各种操上不作修改就能用于各种型号的计算机和各种操作系统。作系统。以上现在还不能深刻理解,待本课程学完相以上现在还不能深刻理解,待本课程学完相信
10、大家就会有比较深的体会。信大家就会有比较深的体会。131.3 简单的简单的C程序介绍程序介绍1.简单简单C程序程序举例举例 2.通过以上例子,可以总结出:通过以上例子,可以总结出:(1)C程序是由函数程序是由函数构成构成的。的。(2)一个函数由函数的一个函数由函数的说明部分说明部分(函数首部)和(函数首部)和函函数体数体组成。组成。(3)一个一个C程序总是从程序总是从main函数开始函数开始执行执行。14(4)程序行的书写格式自由,既允许程序行的书写格式自由,既允许1行内写几条行内写几条语句,也允许语句,也允许1条语句分写在几行上。条语句分写在几行上。(5)所有语句都必须以分号所有语句都必须以
11、分号“;”结束,函数的最结束,函数的最后一个语句也不例外。后一个语句也不例外。(6)C语言本身没有语言本身没有I/O语句,语句,I/O实行实行“函数函数化化”。(7)可用可用/*/对对C程序中的任何部分作注释。程序中的任何部分作注释。“/*”和和“*/”必须成对使用,且必须成对使用,且“/”和和“*”、以及、以及“*”和和“/”之间不能有空格,否则都出错。之间不能有空格,否则都出错。3.程序的书写技巧程序的书写技巧15程序的书写技巧程序的书写技巧技巧:技巧:在源程序中,很多符号都是在源程序中,很多符号都是成对匹配成对匹配出现的,为出现的,为避免遗漏必须配对使用的符号,例如注释符号、避免遗漏必须
12、配对使用的符号,例如注释符号、函数体的起止标识符(花括号)、圆括号等等,函数体的起止标识符(花括号)、圆括号等等,在输入时,可连续输入这些起止标识符,然后再在输入时,可连续输入这些起止标识符,然后再在其中在其中进行插入进行插入来完成内容的编辑。在起止标识来完成内容的编辑。在起止标识符嵌套时,以及相距较远时,这样做更有必要。符嵌套时,以及相距较远时,这样做更有必要。16C程序是由函数构成的程序是由函数构成的1.一个一个C源程序至少包含一个函数(源程序至少包含一个函数(main函数),也可以函数),也可以包含一个包含一个main函数和若干其它函数。因此,函数是函数和若干其它函数。因此,函数是C程程
13、序的基本单位。序的基本单位。2.main()函数的作用,相当于其它高级语言中的主程序;函数的作用,相当于其它高级语言中的主程序;其它函数的作用,相当于子程序。其它函数的作用,相当于子程序。3.main函数由程序员自己定义,函数由程序员自己定义,main函数中使用的函数函数中使用的函数可以使自己编写的(如可以使自己编写的(如max案例中的函数),也可以是案例中的函数),也可以是系统提供的(库函数,如系统提供的(库函数,如printf函数、函数、scanf函数)。函数)。4.C的函数库十分丰富,可参见课本的附录了解。的函数库十分丰富,可参见课本的附录了解。Return17函数的说明部分(函数首部)
14、函数的说明部分(函数首部)例如,案例例如,案例1.2中的函数中的函数max(),其函数说明各部分如下所示。,其函数说明各部分如下所示。函数类型函数类型 函数名函数名 函数参数表函数参数表 int max (int x,int y )Return18函数体函数体在函数说明部分的下面、大括号(必须配对使用)在函数说明部分的下面、大括号(必须配对使用)内的部分。内的部分。函数体的构成:函数体的构成:(1)说明部分)说明部分说明语句部分由变量定义、变量说明等组成。说明语句部分由变量定义、变量说明等组成。(2)可执行语句部分)可执行语句部分 一般由若干条可执行语句构成。一般由若干条可执行语句构成。案例案
15、例1.2的的main()函数体如下所示。函数体如下所示。19main()int n1,n2;变量定义部分变量定义部分 printf(“Input the first number:”);scanf(“%d”,&n1);printf(“Input the second number:”);可执行语句部分可执行语句部分 函数体函数体 scanf(“%d”,&n2);printf(“max=%dn”,max(n1,n2);Return20程序的执行程序的执行 一个语言程序,总是从一个语言程序,总是从main()函数开始执行,函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,而不论其在程序中的
16、位置。当主函数执行完毕时,亦即程序执行完毕。亦即程序执行完毕。Return21 一个完整的语言程序,是由一个一个完整的语言程序,是由一个main()函数(主函数(主函数)和若干个其它函数结合而成的,或仅由一个函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。函数构成。例1.1 仅由仅由main()函数构成的语言程序。函数构成的语言程序。main()printf(“This is a C program.n”);程序演示程序演示程序运行结果:程序运行结果:This is a C program.22案例1.2 由由main()函数和函数和1个其它函数个其它函数max()构成的语言
17、程序。构成的语言程序。int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);main()int num1,num2,c;printf(“Input the first integer number:”);scanf(“%d”,&num1);printf(“Input the second integer number:”);scanf(“%d”,&num2);c=max(num1,num2);printf(“max=%dn”,c);程序演示程序演示23改写改写案例案例1.2,交换,交换main()函数和函数和max()函数的前后位置,函数
18、的前后位置,源程序略。源程序略。程序演示程序演示程序运行情况:程序运行情况:Input the first integer number:6 Input the second integer number:9 max=9说明:说明:C语言程序总是从语言程序总是从main()函数开始执行,而不论函数开始执行,而不论main函数在整个程序中的位置如何。函数在整个程序中的位置如何。241.4 Turbo C V2.0的基本操作1.运行一个语言程序的一般过程运行一个语言程序的一般过程 2.TC的启动、退出与命令菜单的启动、退出与命令菜单 3.编辑并保存一个语言源程序编辑并保存一个语言源程序 4.编译、
19、连接编译、连接单个源程序文件单个源程序文件 5.运行与查看结果运行与查看结果 6.编辑下一个新的源程序编辑下一个新的源程序 251.运行一个语言程序的一般过程运行一个语言程序的一般过程 urbo 是一个集源程序编辑、编译、连接、运行是一个集源程序编辑、编译、连接、运行与调试于一体、与调试于一体、用菜单驱动的集成软件环境。用菜单驱动的集成软件环境。运行一个语言程序的一般过程:运行一个语言程序的一般过程:(1)启动)启动TC,进入,进入TC集成环境。集成环境。(2)编辑(或修改)源程序,源程序文件后缀一般为)编辑(或修改)源程序,源程序文件后缀一般为*.c,注意文件的保存。,注意文件的保存。(3)
20、编译。由编译程序将源程序编译成机器指令程序,)编译。由编译程序将源程序编译成机器指令程序,即目标程序。目标程序的文件名与相应的源程序同名,但即目标程序。目标程序的文件名与相应的源程序同名,但后缀为后缀为*.obj。如果编译成功,可进行下一步操作;否则,返回(如果编译成功,可进行下一步操作;否则,返回(2)修改源程序,再重新编译,直至编译成功。修改源程序,再重新编译,直至编译成功。26(4)连接。将目标程序和库函数或其它目标程序连接)连接。将目标程序和库函数或其它目标程序连接成了可执行的文件,文件名与相应的源程序同名,后缀为成了可执行的文件,文件名与相应的源程序同名,后缀为*.exe。如果连接成
21、功,则可进行下一步操作;否则,根据系如果连接成功,则可进行下一步操作;否则,根据系统的错误提示,进行相应修改,再重新连接,直至连接成统的错误提示,进行相应修改,再重新连接,直至连接成功。功。(5)运行。通过观察程序运行结果,验证程序的正确)运行。通过观察程序运行结果,验证程序的正确性。如果出现逻辑错误,则必须返回(性。如果出现逻辑错误,则必须返回(2)修改源程序,)修改源程序,再重新编译、连接和运行,直至程序正确。再重新编译、连接和运行,直至程序正确。(6)退出)退出TC集成环境,结束本次程序运行。集成环境,结束本次程序运行。272.TC的启动、退出与命令菜单的启动、退出与命令菜单(1)启动启
22、动Turbo C(2)命令菜单的)命令菜单的使用使用(3)退出退出Turbo C28启动Turbo C启动启动Turbo C:tc 画面演示画面演示(1)启动)启动Turbo C后,其主菜单条横向排列在屏幕顶端,后,其主菜单条横向排列在屏幕顶端,并被激活,其中并被激活,其中File菜单成为当前项。菜单成为当前项。(2)主菜单的下面,是)主菜单的下面,是Edit(编辑)窗口和(编辑)窗口和Message(消(消息)窗口。两个窗口中,顶端横线为双线显示的,表示该息)窗口。两个窗口中,顶端横线为双线显示的,表示该窗口是活动窗口。窗口是活动窗口。29(3)编辑窗口的顶端为状态行,其中:)编辑窗口的顶端
23、为状态行,其中:Line 1 Col 1:显示光标所在的行号和列号,即光标位:显示光标所在的行号和列号,即光标位置。置。Insert:表示编辑状态处于:表示编辑状态处于“插入插入”。当处于。当处于“改写改写”状状态时,此处为空白。态时,此处为空白。D:NONAME.C:显示当前正在编辑的文件名。显示为:显示当前正在编辑的文件名。显示为“NONAME.C”时,表示用户尚未给文件命名。时,表示用户尚未给文件命名。(4)屏幕底端是)屏幕底端是7个功能键的说明,以及个功能键的说明,以及Num Lock键的键的状态(显示状态(显示“NUM”时,表示处于时,表示处于“数字键数字键”状态;空白,状态;空白,
24、表示表示“控制键控制键”状态)。状态)。30命令菜单的使用命令菜单的使用(1)按下功能键)按下功能键F10,激活主菜单。如果主菜单已经被激,激活主菜单。如果主菜单已经被激活,则直接转下一步。活,则直接转下一步。(2)用左、右方向键移动光带,定位于需要的主项上,然)用左、右方向键移动光带,定位于需要的主项上,然后再按回车键,打开其子菜单。后再按回车键,打开其子菜单。(3)用上、下方向键移动光带,定位于需要的子项上,回)用上、下方向键移动光带,定位于需要的子项上,回车即可。执行完选定的功能后,系统自动关闭菜单。车即可。执行完选定的功能后,系统自动关闭菜单。注意:菜单激活后,又不使用,可再按:菜单激
25、活后,又不使用,可再按F10Esc键关键关闭,返回原来状态。闭,返回原来状态。31退出Turbo C退出退出TC有两种方法:有两种方法:(1)菜单法:)菜单法:File|Quit先选择先选择File主项,再选择并执行主项,再选择并执行Quit子项子项(2)快捷键法:)快捷键法:Alt+“X”先按下先按下Alt键并保持,再按字母键,然后同时放开键并保持,再按字母键,然后同时放开323.编辑并保存一个语言源程序(1)激活主菜单,选择并执行)激活主菜单,选择并执行File|Load项(快捷键键:项(快捷键键:F3)。)。(2)在)在“Load File Name”窗口,输入源窗口,输入源程序文件名。
26、程序文件名。文件名的输入文件名的输入有两种方法:直接输有两种方法:直接输入和选择输入。入和选择输入。(3)常用编辑操作33文件名的输入文件名的输入1)直接输入)直接输入按照文件名的组成字符串,逐个字符输入即可。按照文件名的组成字符串,逐个字符输入即可。a.如果是已经存在的文件,系统就在编辑窗口显示该文件的内容,如果是已经存在的文件,系统就在编辑窗口显示该文件的内容,可供编辑、修改。如果是新文件,则给出一个空白编辑窗口,可供编辑、修改。如果是新文件,则给出一个空白编辑窗口,可供输入新的源程序。可供输入新的源程序。b.如果该文件不在当前目录下,则需要冠以路径名和(或)盘符。如果该文件不在当前目录下
27、,则需要冠以路径名和(或)盘符。2)选择输入(仅适用于已经存在的源程序文件)选择输入(仅适用于已经存在的源程序文件)a.回车,打开当前目录下后缀为回车,打开当前目录下后缀为.的所有文件的文件名窗口。的所有文件的文件名窗口。b.用上、下、左、右方向键,将光标定位于所需的文件名上。用上、下、左、右方向键,将光标定位于所需的文件名上。b.按回车键。按回车键。34常用编辑操作常用编辑操作(1)在编辑源程序过程中,随时都可以按)在编辑源程序过程中,随时都可以按F2键(或键(或File|Save),将当前编辑的文件存盘,然后继续编辑。这是一个良),将当前编辑的文件存盘,然后继续编辑。这是一个良好的习惯!好
28、的习惯!(2)关于帮助:)关于帮助:在任何窗口下,按在任何窗口下,按F1键激活活动窗口(或状态)的帮助:键激活活动窗口(或状态)的帮助:35在任何窗口下,按在任何窗口下,按F1键激活活动窗口(或状态)的帮助:键激活活动窗口(或状态)的帮助:下一页下一页PageDown,返回上一页,返回上一页PageUp关闭在线帮助、返回原窗口(或状态)关闭在线帮助、返回原窗口(或状态)Esc返回前一个在线帮助屏返回前一个在线帮助屏Alt+F1(无论在线帮助是否被激(无论在线帮助是否被激活)活)返回在线帮助索引返回在线帮助索引F1:激活在线帮助后,再按:激活在线帮助后,再按F1,则返,则返回在线帮助索引,以便查
29、询其它类别在线帮助信息。回在线帮助索引,以便查询其它类别在线帮助信息。查询库函数的在线帮助信息查询库函数的在线帮助信息F1:将光标移到需要查询函:将光标移到需要查询函数名的首字符上,然后键入数名的首字符上,然后键入F1,即可获得该库函数的在线帮,即可获得该库函数的在线帮助信息。助信息。注:为简化描述,用:为简化描述,用“”代表代表“Ctrl”键。键。Fn就是就是Ctrl+Fn,下同。,下同。36 4.编译、连接编译、连接单个源程序文件单个源程序文件 选择并执行选择并执行Compile|Make EXE File项(快捷项(快捷键:键:F9),则),则TC将自动完成对当前正在编辑的源程序文将自动
30、完成对当前正在编辑的源程序文件的编译、连接,并生成可执行文件。件的编译、连接,并生成可执行文件。如果源程序有语法错误,系统将在屏幕中央的如果源程序有语法错误,系统将在屏幕中央的“Compiling”(编译)窗口底端提示(编译)窗口底端提示“Error:Press any key”(错误:按任意键)。(错误:按任意键)。此时,按空格键,屏幕下端的此时,按空格键,屏幕下端的“Message”(消(消息)窗口被激活,息)窗口被激活,显示出错(或警告)信息,光带停在显示出错(或警告)信息,光带停在第一条消息上。这时第一条消息上。这时“Edit”(编辑)窗口中也有一条光(编辑)窗口中也有一条光带,它总是
31、停在编译错误在源代码中的相应位置。带,它总是停在编译错误在源代码中的相应位置。注意:当用上、下键移动消息窗口中的光带时,编:当用上、下键移动消息窗口中的光带时,编辑窗口中的光带也随之移动,始终跟踪源代码中的错误辑窗口中的光带也随之移动,始终跟踪源代码中的错误位置!位置!37 5.运行与查看结果运行与查看结果(1)运行当前正在编辑的源程序文件)运行当前正在编辑的源程序文件 选择并执行选择并执行Run|Run项(快捷键:项(快捷键:F9),程),程序运行结束后,序运行结束后,仍返回到编辑窗口。仍返回到编辑窗口。当你认为自己的源程序不会有编译、连接错误时,当你认为自己的源程序不会有编译、连接错误时,
32、也可直接运行(即跳过对源程序的编译、连接步骤)。也可直接运行(即跳过对源程序的编译、连接步骤)。这时,这时,TC将一次完成从编译、连接到运行的全过程。将一次完成从编译、连接到运行的全过程。(2)查看运行结果)查看运行结果 选择并执行选择并执行Run|User Screen项(快捷键:项(快捷键:Alt+F5)。查看完毕后,按任一键返回编辑窗口。)。查看完毕后,按任一键返回编辑窗口。如果发现逻辑错误,则可在返回编辑窗口后,进行如果发现逻辑错误,则可在返回编辑窗口后,进行修改;然后再重新编译、连接、运行,直至正确为止。修改;然后再重新编译、连接、运行,直至正确为止。38 6.编辑下一个新的源程序编
33、辑下一个新的源程序 选择并执行选择并执行File|New项即可。项即可。如果屏幕提示如下确认信息:如果屏幕提示如下确认信息:NONAME.C not saved.Save?(Y/N)如果需要保存当前正在编辑的源程序,则键入如果需要保存当前正在编辑的源程序,则键入“”,进,进入操作(入操作(1);否则,键入;否则,键入“”(不保存),跳转到(不保存),跳转到(2)。)。(1)系统提示换名:)系统提示换名:NONAME.C 直接输入你给源程序文件起的名字即可。直接输入你给源程序文件起的名字即可。(2)系统给出一个空白的编辑窗口,可以开始编辑下一个)系统给出一个空白的编辑窗口,可以开始编辑下一个新的
34、源程序。新的源程序。391.5 程序设计与算法程序设计与算法1.程序程序 2.算法算法 3.结构化程序设计结构化程序设计 4.C语言程序设计的主要过程语言程序设计的主要过程 40程序程序 程序(程序(program)是为解决特定问题而用)是为解决特定问题而用计算机语言编写的命令序列的集合。计算机语言编写的命令序列的集合。执行程序时,由程序控制计算机完成相应的执行程序时,由程序控制计算机完成相应的操作,得到相应的结果。程序应包括:操作,得到相应的结果。程序应包括:对数据的描述:数据的类型,数据的组织形式对数据的描述:数据的类型,数据的组织形式(数据结构数据结构,做什么),做什么)对操作的描述:操
35、作步骤(对操作的描述:操作步骤(算法算法,怎么做),怎么做)所以:数据结构所以:数据结构+算法算法=程序(沃思)程序(沃思)41算法算法l定义:为了解决一个问题而采用的方法和步骤称定义:为了解决一个问题而采用的方法和步骤称为算法。为算法。l同一问题,有不同的解题方法和步骤;我们关心同一问题,有不同的解题方法和步骤;我们关心的仅限于计算机能执行的算法。的仅限于计算机能执行的算法。l计算机算法的分类:计算机算法的分类:数值运算算法数值运算算法 非数值运算算法非数值运算算法42算法的特性算法的特性l有穷性:有限的操作步骤(合理的范围之内)有穷性:有限的操作步骤(合理的范围之内)l确定性:每一步都应当
36、是确定的,不应含糊不清确定性:每一步都应当是确定的,不应含糊不清l可行性:每一步应当正确的执行,得到确定的结果可行性:每一步应当正确的执行,得到确定的结果 l有零个或多个输入有零个或多个输入l有一个或多个输出:算法的目的是为了求解有一个或多个输出:算法的目的是为了求解 “解解”就是输出就是输出 没有输出的算法是没有意义的没有输出的算法是没有意义的43算法举例算法举例判断整数判断整数n n是否为素数是否为素数素数:除了素数:除了1 1和该数本身,不能被其它任何整数整除和该数本身,不能被其它任何整数整除的数。的数。S1S1:输入输入n n的值。的值。S2S2:i=2:i=2S3S3:r=n%i:r
37、=n%iS4S4:若若r=0r=0,输出,输出“n n不是素数不是素数”,算法结束。,算法结束。否则,继续否则,继续S5S5。S5S5:i=i+1:i=i+1S6S6:若若i=n-1i=n-1,返回,返回S3S3;否则,输出否则,输出“n n是素数是素数”,算法结束。,算法结束。44(判断素数算法的改进)(判断素数算法的改进)S1S1:输入输入n n的值。的值。S2S2:i=2:i=2,flag=1flag=1S3S3:r=n%i:r=n%iS4S4:若若r=0r=0,flag=0flag=0S5S5:i=i+1:i=i+1S6S6:若若i=n-1i=n-1并且并且flag=1flag=1,返
38、回,返回S3S3;否则,继续否则,继续S7S7。S7S7:若若flag=1flag=1,输出,输出“是素数是素数”;否则,输出否则,输出“不是素数不是素数”,算法结束。,算法结束。45课后思考题课后思考题设计一算法,判断任意设计一算法,判断任意3 3位数位数n n是否为水仙花数。是否为水仙花数。定义:水仙花数是指一个定义:水仙花数是指一个 n 位数位数(n3),它的,它的每个位上的数字的每个位上的数字的 n 次幂之和等于它本身。(例次幂之和等于它本身。(例如:如:13+53+33=153)46结构化程序设计结构化程序设计结构化程序设计的实质是控制编程的复杂性。结构化程序设计的实质是控制编程的复
39、杂性。其基本思想是像搭积木一样,只要有几种简单的结其基本思想是像搭积木一样,只要有几种简单的结构即可构成任意复杂的程序。构即可构成任意复杂的程序。三种基本结构三种基本结构顺序结构顺序结构 选择结构选择结构 循环结构循环结构47顺序结构顺序结构先先A,后,后B顺序执行顺序执行 A B ab48选择结构选择结构必有一个判断框必有一个判断框选择的执行选择的执行A或或B之一之一A,B中可有一个是空的中可有一个是空的 成立成立 条件条件 不成立不成立 A Bab49循环结构循环结构当型循环结构当型循环结构 A 条件条件直到型循环结构直到型循环结构 A 条件条件不成立不成立不成立不成立成立成立成立成立aa
40、bb50传统流程图的表示传统流程图的表示 起止框起止框 I/OI/O框框 判断框判断框 处理框处理框 流程线流程线 连接点连接点(避免流程线交叉或过长,使流程图清晰)(避免流程线交叉或过长,使流程图清晰)注释框注释框(不是必要部分)(不是必要部分)51三种基本结构的三种基本结构的N-SN-S流程图流程图注:注:A A,B B可以是一个简单的操作,也可以是可以是一个简单的操作,也可以是3 3个基本结构之一。个基本结构之一。A B条件条件不成立不成立成立成立当条件成立当条件成立直到条件成立直到条件成立 A A B A52结构化程序设计方法结构化程序设计方法三种基本结构构成的程序必然是结构化的程序;
41、结构化三种基本结构构成的程序必然是结构化的程序;结构化程序设计方法强调程序设计风格和程序结构的规范化;结构程序设计方法强调程序设计风格和程序结构的规范化;结构化程序设计方法提倡清晰的结构。化程序设计方法提倡清晰的结构。基本思路基本思路:复杂问题的求解过程可分阶段进行:复杂问题的求解过程可分阶段进行具体采用以下方法:具体采用以下方法:自顶向下自顶向下,逐步细化逐步细化,模块化设计模块化设计(程序复杂时,更有必要),(程序复杂时,更有必要),结构化编码结构化编码(用高级语言语句(用高级语言语句正确的实现三种基本结构)正确的实现三种基本结构)53C语言程序设计的主要过程语言程序设计的主要过程 提出并分析问题提出并分析问题 设计设计算法算法(画出算法流程)(画出算法流程)编写程序编写程序 编译调试程序编译调试程序541.6 如何学习本课程如何学习本课程学习的内容:学习的内容:C语言的语法规则语言的语法规则 程序设计基本技术程序设计基本技术“先读先读(读程序),(读程序),再模仿再模仿,再实战再实战”上机环节的重要性上机环节的重要性