C语言(三)程序的灵魂——算法

C语言小白报道!和老刘一起开始学习C语言吧!

引:一个程序主要包含两个方面:

Ⅰ,对数据的描述——这是数据结构。

Ⅱ,对操作的描述——这就是算法。

故:                                             算法+数据结构=程序

一、算法的特性

①有穷性     一个算法必须在执行有穷步后结束,且每一步都可在有穷时间内完成,不能无限地执行下去。

②确定性    算法每个步骤都得有确切定义,且每一个过程都不能有二义性。

③有零个或多个输入      例:

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);        -----多个输入

-----------------------------------------------分界----------------------------------------------------------------------------

main()

{        

        printf("Hello World!")

}                                                         ------0个输入

------以上两例引自《C语言从入门到精通》

④有一个或多个输出

⑤有效性      算法的每一个步骤都应当能够有效的执行,并得到确切的结果。

衡量一个算法的优劣一般看其正确性、可读性、健壮性和时间复杂度和空间复杂度,随着计算机硬件的发展,空间复杂度逐渐变得没有那么重要了。

二、如何表示一个算法

常用方法是:自然语言、传统流程图、结构化流程图、伪代码等

这里,我们着重学习流程图。

C语言(三)程序的灵魂——算法_第1张图片

用图表示的算法就是流程图。流程图是用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。

符号

美国国家标准化协会ANSI曾规定了一些常用的流程图符号,为世界各国程序工作者普遍采用。最常用的流程图符号见上图。

处理框(矩形框),表示一般的处理功能。

判断框(菱形框),表示对一个给定的条件进行判断,根据给定的条件是否成立决定如何执行其后的操作。它有一个入口,二个出口。输入输出框(平行四边形框)。

起止框(圆弧形框),表示流程开始或结束。

连接点(圆圈),用于将画在不同地方的流程线连接起来。用连接点,可以避免流程

线的交叉或过长,使流程图清晰。

流程线(指向线),表示流程的路径和方向。

注释框,是为了对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的人更好地理解流程图的作用。它不是流程图中必要的部分,不反映流程和操作。

程序框图表示程序内各步骤的内容以及它们的关系和执行的顺序。它说明了程序的逻辑结构。框图应该足够详细,以便可以按照它顺利地写出程序,而不必在编写时临时构思,甚至出现逻辑错误。流程图不仅可以指导编写程序,而且可以在调试程序中用来检查程序的正确性。如果框图是正确的而结果不对,则按照框图逐步检查程序是很容易发现其错误的。流程图还能作为程序说明书的一部分提供给别人,以便帮助别人理解你编写程序的思路和结构。

                                                                                            -----------------------------百度百科

  例:求1×2×3×4×5的算法用流程图表示

解:P: 表示被乘数 i: 表示乘数

C语言(三)程序的灵魂——算法_第2张图片

这个问题还比较简单,但是,需要判断的条件多起来,加上使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。

这是因为传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。

所以  三种基本结构和改进的流程图诞生了

三、三种基本结构

Ⅰ、顺序结构

Ⅱ、选择结构

Ⅲ、循环结构

    ①当型(while)循环结构

    ②直到型(until)循环结构

C语言(三)程序的灵魂——算法_第3张图片

C语言(三)程序的灵魂——算法_第4张图片

三种基本结构的特点:

只有一个入口

只有一个出口

结构内的每一部分都有机会被执行到

结构内不存在“死循环”

四、N-S流程图

C语言(三)程序的灵魂——算法_第5张图片

 例:求a和b的最大公约数。
任意输入a、b值,利用顺序结构、选择结构、循环结构求解 的最大化出数。

C语言(三)程序的灵魂——算法_第6张图片(流程图和N-S流程图对比)

五、关于伪代码

 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它可以直接自上而下地写下来。每一行(或几行)表示一个基本操作。不用图形符号,书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法(即程序)过渡。

小例:  求5!               

算法描述:

S1: 1=>p

S2: 2=>i

S3: p*i=>p

S4: i+1=>i

S5: 如果i≤5,则返回S3;否则结束

//实现
#include 
int main()
{
	int i,p;
	p=1;
	i=2;
	while(i<=5)
		{
			p=p*i;
			i=i+1;
		}
	printf(″%d\n″,p);
	return 0;
}

结构化程序设计方法

1、自顶向下

2、逐步细化

3、模块化设计 (划分子模块时要注意模块的独立性)

4、结构化编码

写在后面:初设算法,还勉强能理解些许,其实算法并不是如此轻松简单,我们才踏入算法学习的第一步,并没有深入学习各种类型的算法,一起加油吧!下一次,和老刘一起看看顺序结构设计吧!冲鸭!

你可能感兴趣的:(c语言,c语言)