C程序设计——算法

一个程序应要有两方面信息:

(1)对数据的描述。数据类型和数据组织形式。就是数据结构(data structure)。

(2)对操作的描述。计算机执行的步骤,就是算法(alogrithm)。

简单理解就是烹饪需要食材和烹饪方法,蔬菜是数据,包括调料,烹饪方法是算法,用来加工菜肴。

著名计算机科学家沃思(Nikiklaus Wirth)提出

算法+数据结构=程序 

编程除了数据结构和算法,其实还需要一种用于实现程序的计算机语言,以及程序设计方法。

2.1 什么是算法

算法,不要简单理解为计算的方法,它是为解决一个问题(或是一类问题)而采取的方法和步骤,就称为算法。比如打副本的方法,就可以理解为算法,又或是钢琴乐谱,按照乐谱就能弹奏特定的曲目。

算法是有比较的,例如100求和,有人从1开始逐个加到100,也有人(1+99)+(2+98)...+(49+51)+50+100计算,还有其他方法。 我们通常倾向采用简答且高效地算法。

计算机算法分为两大类别:数值运算算法非数值运算算法

数值运算:求解方程,函数定积分等

非数值运算:姓名排序、图书检索、人员管理等更为广泛的事务管理领域

随着技术发展,解决问题有很多现成的算法可以使用,但是学习者要掌握如何使用。

2.2 简单的算法举例

判断一个数是不是素数。素数,除了1和自身之外,不能被其他任何数整除。

判断n是否为素质,只要考虑n是否能被2~n-1整除即可。那么算法可以表示为:

S1:输入n的值                //S一般表示为step步骤的意思

S2:i=2(i作为除数)

S3:n被i除,得余数r

S4:如果r=0,表示n能被i整除,输出n“不是素数”,算法结束;否则执行S5

S5:i=i+1

S6:如果i<=n-1("<="表示小于等于),返回S3;否则输出n的值和“是素数”,程序结束。

2.3 算法的特性

(1)有穷性。算法包含有限的操作步骤。

(2)确定性。算法每一个步骤都应当是确定的。不能有二义性。

(3)有零个或多个输入。执行算法需要从外界取得必要的信息。

(4)有一个或多个输出。算法的目的是为了求解,没有结果是没有意义的。

(5)有效性。算法的每个步骤应该有效地执行,并得到确定的结果。

2.4 怎样表示一个算法

表示算法常用方法:自然语言、传统流程图、结构化流程图和伪代码。

2.4.1 用自然语言表示算法

自然语言表述容易出现歧义,有很多需要准确描述的细节,导致过于繁琐,一般不采用。

2.4.2 用流程图表示算法

直观易于理解,ANSI标准规定了常用流程图符号。菱形框表示判断,椭圆表示起止点,长方框表示处理,箭头表示流程线。

2.4.3 三种基本结构和改进的流程图

1.三种基本结构

(1)顺序结构

按个步骤执行

(2)选择结构。又称分支结构

需要进行条件判断,满足则执行对应条件。类似函数定义域和值域。

(3)循环结构。又称重复结构。

避免死循环,需要有循环跳出条件。

2.4.4 伪代码表示算法

伪代码(pseudo code)是用介于自然语言和计算机语言之间的文字和符号来描述算法。跟接近计算机代码,也便于阅读和修改。

    i = 1;
    t = 2;
    n = i + t
    输出n

2.4.6 用计算机语言表示算法

求两数(1和2)之和

#include<stdio.h>
int main()
{
    int i,t;
    i = 1;
    t = 2;
    n = i + t
    printf("%d\n",n);
    return 0;
} 

2.5 结构化程序设计方法

把复杂问题分解为容易处理的单元。

结构化程序设计方法

(1)自顶向下;

(2)逐步细化;

(3)模块化设计;

(4)结构化编码。

类似写文章,确定大纲后,分块编写,逐步细化。由抽象逐步到具体化。划分子模块,通常里面用函数实现,要注意模块的独立性,一个模块完成一个任务,这就是一种分而治之的思想。任务分解后子任务逐个完成。设计好一个结构化算法之后,还要善于进行结构化编码(coding),即使用计算机语言表示。

学习语言是掌握掌握工具,最终是服务于我们要实现的算法,所以关键在如何设计算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值