算法设计基础:程序流程图与流程控制

需积分: 13 1 下载量 20 浏览量 更新于2024-08-20 收藏 369KB PPT 举报
"程序流程图方式-c算法设计基础" 在计算机科学中,算法设计是解决问题的核心环节,而程序流程图是一种直观的表示算法的方法。它通过图形的方式展示算法的执行流程,使得程序员和非程序员都能理解算法的工作原理。在本章节中,我们将深入探讨程序流程图在描述算法中的应用。 首先,程序流程图由一系列结点和有向边组成,结点代表算法中的操作,有向边则表示操作的执行顺序。流程图中包含了各种控制结构,如顺序结构、选择结构(条件判断)、循环结构等,这些结构构成了算法的基本骨架。 1. **顺序结构**:这是最简单的结构,按照从上至下的顺序执行每一个操作。在流程图中,通常用直线连接的结点来表示。 2. **选择结构(条件判断)**:包括“是”和“否”的分支,依据某个条件的真假来决定执行哪个分支。流程图中,条件结点通常用菱形表示,两个分支用箭头连接。 3. **循环结构**:分为“当型循环”和“直到型循环”。在流程图中,循环结构通常用矩形框表示,有进入和退出的箭头。当型循环(如while循环)在满足特定条件时执行,而直到型循环(如do-while循环)先执行一次,然后检查条件是否满足继续执行。 例如,判断一个大于或等于3的正整数是否为素数的算法,可以使用流程图表示: - 开始:初始化变量,如输入n值,i赋值为2。 - 顺序结构:执行i<=n-1的判断。 - 条件判断:检查n模i的余数是否为0。 - 循环结构:根据条件结果选择分支,若余数为0,输出“n不是素数”并结束;否则,i加1,返回条件判断。 - 如果循环结束(i=n-1),输出“n是素数”。 在描述算法时,除了程序流程图,还有其他方式,比如自然语言、伪代码和N/S盒图。自然语言方式直接用日常语言描述,但可能因为语言的歧义导致理解困难。伪代码介于自然语言和编程语言之间,更易于理解且接近实际代码。N/S盒图(Structured Flowchart)是一种结构化的流程图,用盒子表示处理步骤,箭头表示控制流,更强调程序的结构化。 学习算法设计基础,目标是掌握不同算法描述方式,理解结构化算法设计原则,能够进行算法复杂性分析,并对分治与递归等基本设计策略有所了解。这不仅有助于编写高效的代码,也有利于算法思维的培养。
2018-05-11 上传
1. 实验内容 1、定义一个右线性正规文法,示例如(仅供参考) G[S]:S→aU|bV| U→bV|aQ V→aU|bQ Q→aQ|bQ|e 实验前要考虑清楚用哪种数据结构存储上述文法。 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”。 K:=S; c:=getchar; while ceof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 2. 实验设计分析 2.1 实验设计思路 根据实验指导书和书本上的相关知识,实现算法。 2.2 实验算法 (1)输入正规文法。RG到FA (2)将NFA化为DFA (3)输入一个字符串判断是否符合文法。 ①最开始记A为开始状态a为第一个字符。 ②然后A经过字符a到达下一个状态记为B,A状态指向B状态,a指向字符串的下一个字符。 ③循环②步直到B状态为终态时停止则该字符串符合该文法或a指向最后一个字符时都没到终态停止则该字符窜不符合该文法。 2.3 实验流程 ①预习实验,实验前阅读实验指导书和阅读书本。 ②通过书本了解判断文法的原理。首先在纸上模拟文法的判断过程。 ③上机实现模拟过程。 ④调试程序,知道能得到预期的结果。 2.4 实验的基本技术设计方案 (用到哪些技术,包括编译原理中,程序设计中,离散数学中等的哪些技术) ①java的基础语法。 ②数据结构里的结构体及简单算法。 ③编译原理的理论知识。 ④运用了java里的一些集合类。 2.5 数据结构 class edge { char PriorityState; char ch; char NextState; edge(char p,char c, char n){ PriorityState = p; ch = c; NextState = n; } @Override public String toString() { return "edge [PriorityState=" + PriorityState + ", ch=" + ch + ", NextState=" + NextState + "]"; } } 2.6 实验输入输出 2.7 实验设计语言 Java语言。 3. 实验主要源代码及分析说明
2013-12-03 上传
Java 程序设计: 一.DFA.java 为 DFA.java 中的 DFA 类实现成员函数 boolean recongnizeString(int move[][], int accept_state[], String word),函数功能和参数说明如下。 函数功能:如果 word 被 move 和 accept_state 所代表的 DFA 识别,则返回 true,否 则返回 false. 参数说明: 1) move[][]是状态迁移函数,move 的每一行代表一个状态,每一列代表一个输入符 号,第 0 列代表’a’,第 1 列代表’b’,……,依此类推. 例如:move ={{1,0}, {1,2}, …},则表示此 DFA 在状态 0 时,当输入为’a’时,迁移到状态 1,当输入为’b’ 时迁移到状态 0;而 DFA 在状态 1 时,当输入为’a’时,迁移到状态 1,当输入为’b’ 时迁移到状态 2. 注意:默认状态0是DFA的初始状态. 2) accept_state[]是接受状态的集合,如 accept_state[] = {2, 3},则表示状态 2 和状态 3 是接受状态. 3) word 是待识别的字符串. 注意事项: 1) 字符串 word 的长度在1到50之间. 2) move 的状态数在1到50之间,输入符号数在1到26之间. 3) 只须实现 recognizeString 函数,注意不要修改 DFA.java 文件中其它部分的内容(如 果修改了,请在提交之前改回来),更不要修改 recognizeString 的函数名,参数和 返回类型. 但可以为 DFA 类添加新的成员变量和成员函数. 4) DFA.in 文件是整个程序的输入文件,在本地机器上调试或测试程序时,可以修改 DFA.in 中的内容(用 Editplus 或记事本都可以打开修改),但遵照 DFA.in 的文件格 式. DFA.in 的格式示例如下: 4 2 ----DFA有4个状态,2个输入符号 1 0 ----接下来的 4 行 2 列代表状态迁移函数 1 2 1 3 1 0 3 ----这一行代表接收状态,若有多个用空格隔开 aaabb ----接下来的每行代表一个待识别的字符串 abbab abbaaabb abbb # ----‘#’号代表待识别的字符串到此结束 1 3 ----新的 DFA 开始,格式同上一个 DFA 0 0 0 0 cacba # 0 0 ----两个 0 代表所有输入的结束 5) 当 DFA.in 内容如 4) 时,屏幕应输出 YES NO YES NO YES