1、中北大学电子与计算机科学技术学院C+程序设计基础 乔志会1 利用计算机解决实际问题的步骤利用计算机解决实际问题的步骤2 算法的概念算法的概念3 结构化程序设计结构化程序设计本章内容本章内容4 C+语句语句5 C+的输入与输出的输入与输出6 顺序结构程序设计顺序结构程序设计中北大学电子与计算机科学技术学院C+程序设计基础 乔志会1 利用计算机解决实际问题的步骤算法分析算法分析最有效的方法最有效的方法问题问题选择实现语言选择实现语言运行程序运行程序分析、论证分析、论证算法流程算法流程结束结束测试程序测试程序中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念一、算法的概念一、算法
2、的概念程序程序对数据的描述:在程序中要指定数据的类型和数据对数据的描述:在程序中要指定数据的类型和数据 的组织形式,即数据结构的组织形式,即数据结构对操作的描述:即操作步骤,也就是算法对操作的描述:即操作步骤,也就是算法算法:为解决一个问题而采取的方法和步骤,称为算法:为解决一个问题而采取的方法和步骤,称为“算法算法”它是程序设计的它是程序设计的灵魂灵魂,是解决,是解决“做什么做什么”和和“怎么做怎么做”的的 问题,处理的对象是数据问题,处理的对象是数据中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念二、算法的特性二、算法的特性1、有穷性、有穷性2、确定性、确定性3、有效
3、性、有效性/可行性可行性4、有零个或多个输入、有零个或多个输入5、有一个或多个输出、有一个或多个输出中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念三、算法的表示三、算法的表示自然语言表示法自然语言表示法传统流程图表示法传统流程图表示法NS结构化流程图结构化流程图伪代码伪代码PAD图等图等中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念三、算法的表示三、算法的表示1、自然语言表示法、自然语言表示法例:对于一个大于等于例:对于一个大于等于3的正整数,判断其是否素数的正整数,判断其是否素数算法如下:算法如下:S1:输入:输入n的值的值S2:i2作为除数作
4、为除数S3:n被被i除,得余数除,得余数rS4:如果:如果r0,表示,表示n能被能被i整除,则打印整除,则打印“不是素数不是素数”,算法结束;,算法结束;否则,继续下一步否则,继续下一步S5:i1iS6:如果:如果in1,返回执行,返回执行S3;否则,打印;否则,打印“是素数是素数”,算法结束,算法结束中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念三、算法的表示三、算法的表示2、传统流程图表示法、传统流程图表示法起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流向线流向线连接点连接点中北大学电子与计算机科学技术学院C+程序设计基础 乔志会出口出口1
5、出口出口2传统流程图表示前例传统流程图表示前例中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念三、算法的表示三、算法的表示3、算法的三种基本结构、算法的三种基本结构Bohra和和Jacopini提出了以下三种基本结构:提出了以下三种基本结构:顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构用这三种基本结构作为表示一个良好算法的基本单用这三种基本结构作为表示一个良好算法的基本单元。元。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会顺序结构顺序结构选择结构选择结构三种基本结构三种基本结构中北大学电子与计算机科学技术学院C+程序设计基础 乔志会当型当型(Whi
6、le型型)循环循环 直到型直到型(Until型型)循环循环 三种基本结构中北大学电子与计算机科学技术学院C+程序设计基础 乔志会三种基本结构的共同特点:三种基本结构的共同特点:2 算法的概念三、算法的表示三、算法的表示3、算法的三种基本结构、算法的三种基本结构(1)(1)只有一个入口;只有一个入口;(2)(2)只有一个出口;(只有一个出口;(请注意:请注意:一个菱形判断框有一个菱形判断框有两个出口,而一个选择结构只有一个出口。不两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。)要将菱形框的出口和选择结构的出口混淆。)(3)(3)结构内的每一部分都有机会被执行到;结
7、构内的每一部分都有机会被执行到;(4)(4)结构内不存在结构内不存在“死循环死循环”(无终止的循环无终止的循环)。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会一个出口一个出口出口出口1出口出口2中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2 算法的概念三、算法的表示三、算法的表示3、NS结构化流程图结构化流程图 1973 1973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提出了提出了一种新的流程图形式。在这种流程图中,完全去一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框掉
8、了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种或者说,由一些基本的框组成一个大的框。这种流程图又称流程图又称N-SN-S结构化流程图结构化流程图 。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会 N-SN-S流程图用以下的流程图符号:流程图用以下的流程图符号:(1)顺序结构(2)选择结构(3)直到型循环(3)当型循环中北大学电子与计算机科学技术学院C+程序设计基础 乔志会中北大学电子与计算机科学技术学院C+程序设计基础 乔志会N-S图表示算法的优点图表示算法的优点
9、比文字描述直观、形象、比文字描述直观、形象、易于理解;比传统易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成整个算法结构是由各个基本结构按顺序组成的,的,N-S流程图中的上下顺序就是执行时的流程图中的上下顺序就是执行时的顺序。用顺序。用N-S图表示的算法都是结构化的算图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。而只能自上而下地顺序执行。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会3 结构化程序设计 一个结构化程序一个结
10、构化程序 就是用高级语言表示的结构化就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修的程序,这种程序便于编写、便于阅读、便于修改和维护。改和维护。结构化程序设计强调程序设计风格和程序结构的结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。规范化,提倡清晰的结构。结构化程序设计方法的基本思路是:把一个复杂结构化程序设计方法的基本思路是:把一个复杂问题的求解过程问题的求解过程 分阶段进行,每个阶段处理的分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。问题都控制在
11、人们容易理解和处理的范围内。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会结构化程序设计方法结构化程序设计方法采取以下方法来保证得到结构化的程序:采取以下方法来保证得到结构化的程序:自顶向下;自顶向下;逐步细化;逐步细化;模块化设计;模块化设计;结构化编码。结构化编码。两种不同的方法:两种不同的方法:自顶向下,逐步细化;自顶向下,逐步细化;自下而上,逐步积累。自下而上,逐步积累。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会自顶向下,逐步细化方法的优点:自顶向下,逐步细化方法的优点:考虑周全,结构清晰,层次分明,作考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发
12、现某一部者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改,只需找分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分出该部分修改有关段落即可,与其它部分无关。我们提倡用这种方法设计程序。这无关。我们提倡用这种方法设计程序。这就是用工程的方法设计程序。就是用工程的方法设计程序。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会模块设计的方法:模块设计的方法:模块化设计的思想实际上是一种模块化设计的思想实际上是一种“分而治之分而治之”的思想,的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单把一个大任务分为若干个子任务,每一个子任务就相对简单了。
13、了。在拿到一个程序模块以后,根据程序模块的功能将它划在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。以划分为更小的模块。这个过程采用自顶向下方法来实现。子模块一般不超过子模块一般不超过5050行行 划分子模块时应注意模块的独立性,即:使一个模块完划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。成一项功能,耦合性愈少愈好。中北大学电子与计算机科学技术学院C+程序设计基础 乔志会4 C+语句语句一、语句的概念一、语句
14、的概念C+语句用来向计算机系统发出操作指令,它都语句用来向计算机系统发出操作指令,它都是用来完成一定操作任务的。是用来完成一定操作任务的。二、二、C+语句的分类语句的分类声明语句声明语句执行语句执行语句空语句空语句复合语句复合语句中北大学电子与计算机科学技术学院C+程序设计基础 乔志会二、二、C+语句的分类语句的分类1、声明语句、声明语句对变量及其它对象的定义,可以出现在函数中的任对变量及其它对象的定义,可以出现在函数中的任何行,也可放在函数外何行,也可放在函数外如:如:int a,b;2、执行语句、执行语句通知计算机完成一定的操作通知计算机完成一定的操作包括控制语句、函数和流调用语句、表达式
15、语句包括控制语句、函数和流调用语句、表达式语句2、执行语句、执行语句中北大学电子与计算机科学技术学院C+程序设计基础 乔志会(1)控制语句控制语句 完成一定的控制功能完成一定的控制功能if()else 条件条件for()、while()、do while()循环循环continue 、break 结束循环结束循环switch 多分支选择语句多分支选择语句goto 跳转语句跳转语句return 从函数返回语句从函数返回语句二、二、C+语句的分类语句的分类2、执行语句、执行语句中北大学电子与计算机科学技术学院C+程序设计基础 乔志会(2)函数和流对象调用语句函数和流对象调用语句 由一次函数调用加一
16、个分号构成一条语句由一次函数调用加一个分号构成一条语句 例例 max(a,b);coutxendl;(3)表达式语句表达式语句 由一个表达式加一个分号构成一条语句,但构由一个表达式加一个分号构成一条语句,但构 成的语句应该有意义,最典型的为成的语句应该有意义,最典型的为赋值语句赋值语句 a=3 表达式表达式 a=3;赋值语句赋值语句 i+1 表达式表达式 i+1;表达式语句表达式语句 无实际意义无实际意义二、二、C+语句的分类语句的分类2、执行语句、执行语句中北大学电子与计算机科学技术学院C+程序设计基础 乔志会3、空语句、空语句只有一个分号的语句,什么也不做只有一个分号的语句,什么也不做主要
17、用来完善程序的结构,有时用来做被转向点或主要用来完善程序的结构,有时用来做被转向点或循环语句中的循环体循环语句中的循环体4、复合语句、复合语句用用 把一些语句括起来成为复合语句把一些语句括起来成为复合语句例例 P49二、二、C+语句的分类语句的分类中北大学电子与计算机科学技术学院C+程序设计基础 乔志会5 数据输出与输入数据输出与输入不论不论C语言还是语言还是C+,输入与输出都不是,输入与输出都不是其语言中的正式组成部分,如需使用其语言中的正式组成部分,如需使用C中中的输入输出函数或的输入输出函数或C+中的输入输出流,中的输入输出流,都必须用预处理命令将头文件包含到本文都必须用预处理命令将头文
18、件包含到本文件中件中如:如:#include#include 中北大学电子与计算机科学技术学院C+程序设计基础 乔志会一、输入流与输出流一、输入流与输出流1、一般格式:、一般格式:cout表达式表达式1表达式表达式2变量变量1变量变量2变量变量n;说明说明(1)cout可分写成若干行可分写成若干行coutThis is a simple C+program.endl;coutThis isa C+program.endl;coutThis is;cout a C+;cout program.;cout endl;中北大学电子与计算机科学技术学院C+程序设计基础 乔志会(2)不能用一个插入运算符
19、)不能用一个插入运算符“abcd;cinabcd;cina;cin b;cin c;cin d;中北大学电子与计算机科学技术学院C+程序设计基础 乔志会(5)cin输入时系统会根据变量的类型从输入流中输入时系统会根据变量的类型从输入流中提取相应长度的字节提取相应长度的字节char c1,c2;int a;float b;cinc1c2ab;输入输入:1234 56.78用用cin语句得不到空格和回车字符语句得不到空格和回车字符中北大学电子与计算机科学技术学院C+程序设计基础 乔志会2、输入输出流的控制符、输入输出流的控制符 P53 表表3.1 如使用控制符,还需在程序开头加如使用控制符,还需在
20、程序开头加#include 一、输入流与输出流一、输入流与输出流例:例:输出双精度输出双精度 输出整数输出整数 例例3.1中北大学电子与计算机科学技术学院C+程序设计基础 乔志会二、二、getchar和和putchar1、字符格式输出函数、字符格式输出函数 putchar()功能:向终端输出一个字符功能:向终端输出一个字符形式:形式:putchar(参数参数)参数:可以为常量,也可以为变量,还可以是参数:可以为常量,也可以为变量,还可以是任意整型表达式,参数的值代表的是某字符对任意整型表达式,参数的值代表的是某字符对应的应的ASCII码值码值,也可输出转义字符也可输出转义字符使用时需加头文件使
21、用时需加头文件#include 例例 P55 例例3.2中北大学电子与计算机科学技术学院C+程序设计基础 乔志会二、二、getchar和和putchar2、字符格式输入函数、字符格式输入函数 getchar()功能:从终端输入一个字符功能:从终端输入一个字符形式:形式:getchar()无参数,函数的值就是从输入设备得到的字符,无参数,函数的值就是从输入设备得到的字符,得到的字符可以赋给一个字符变量或整型变量;得到的字符可以赋给一个字符变量或整型变量;也可以不赋给任何变量,作为表达式的一部分也可以不赋给任何变量,作为表达式的一部分使用时需加头文件使用时需加头文件#include 例例 P56
22、P56 例例3.33.3中北大学电子与计算机科学技术学院C+程序设计基础 乔志会三、三、scanf和和printf1、输出函数、输出函数 printf()功能:向终端输出若干个任意类型的数据功能:向终端输出若干个任意类型的数据格式:格式:printf(格式控制,输出表列格式控制,输出表列)输出表列:需要输出的数据,可以是表达式输出表列:需要输出的数据,可以是表达式格式控制:用双引号括起来的字符串(包括格格式控制:用双引号括起来的字符串(包括格式说明、普通字符)式说明、普通字符)格式说明:由格式说明:由“”和格式字符组成,将输出和格式字符组成,将输出的数据转换为指定的格式输出的数据转换为指定的格
23、式输出普通字符:需要原样输出的字符普通字符:需要原样输出的字符中北大学电子与计算机科学技术学院C+程序设计基础 乔志会三、三、scanf和和printf2、据输入函数、据输入函数 scanf()功能:从输入设备向计算机输入任意类型的数据功能:从输入设备向计算机输入任意类型的数据到相应的变量中到相应的变量中格式:格式:scanf(格式控制,地址表列格式控制,地址表列)格式控制:同格式控制:同printf(),普通字符需原样输入(),普通字符需原样输入地址表列:由若干个地址组成的表列,可以是变地址表列:由若干个地址组成的表列,可以是变量的地址,或字符串的首地址量的地址,或字符串的首地址例例 P57 例例3.4中北大学电子与计算机科学技术学院C+程序设计基础 乔志会6 顺序结构程序设计开始输入a,b,c计算x1,x2输出x1,x2结束例例3.5 3.5 求一元二次方程求一元二次方程ax2+bx+c=0(b2-4ac0)的根的根中北大学电子与计算机科学技术学院C+程序设计基础 乔志会3 顺序结构程序设计例5.19 将任意小写字母,转换为对应的大写字母并输出。输入CCC32输出C开始结束中北大学电子与计算机科学技术学院C+程序设计基础 乔志会本章结束作业:P85 2、3、4、5