一个程序主要包括以下两个方面的信息:
1)对数据的描述.在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构(data structure).
2)对操作的描述.即要求计算机进行操作的步骤,也就是算法(algorithm).
算法+数据结构=程序
算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法.
为解决一个问题而采取的方法和步骤,就称为"算法".
例题1.判定2000-2500年中每一年是否为闰年,并将结果输出.
设year为被检测的年份.算法可表示:
s1:2000->year
s2:若year不能被4整除,则输出year的值和"不是闰年".然后转到s6,检查下一个年份.
s3:若year能被4整除,不能被100带队,则输出year的值和"是闰年".然后转到s6.
s4:若year能被400整除,输出year的值和”是闰年”,然后转到s6.
s5:输出year的值和"不是闰年"
s6:year+1->year
s7:当year<=2500时,转到s2继续执行,否则算法停止.
若用sign代表当前处理的项前面的数值符号,term代表当前项的值.sum表示当前各项的累加和,deno是当前项的分母,本例算法可写为:
s1:sign=1
s2:sum=1
s3:deno=2
s4:sign=(-1)*sign
s5:term=sign*(1/deno)
s6:sum=sum+term
s7:deno=deno+1
s8:若deno<=100返回s4,否则算法结束.
例题3.给出一个大于或等于3的正整数,判断它是不是一个素数.
解题思路:所谓素数(prime),是指除了1和该数本身之外,不能被其他任何整数整除的数.例如,13是素数,因为它不能被2,3,4,....,12整除.
判断一个数n(n>=3)是否为素数的方法是很简单的 :将n作为被除数,将2~n-1各个整数先后作为除数,如果都不能被整除,则n为素数.
算法可以表示如下:
s1:输入n的值
s2:i=2(i作为除数)
s3:n被i除,得余数r
s4:如果r=0,表示n能被i整除,则输出n"不是素数",算法结束;否则执行s5
s5:i+1->i
s6:如果i<=n-1,返回s3;否则输出n的值以及"是素数",然后结束.
实际上,n不必被2~n-1的整数除,只须被2~n/2间整数除即可,甚至只须被2~n之间的整数除即可.
s6步骤可改为:
s6:如果i<=n,返回s3,否则算法结束.
2.3 算法的特性
1)有穷性
2)确定性
3)有零个或多个输入
4)有一个或多个输出
5)有效性
2.4 怎样表示一个算法
2.4.1 用自然语言表示算法
2.4.2 用流程图表示算法
图2.3中菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立决定执行其后的操作.它有一个入口,两个出口.
连接点(小圆圈)是用于将画在不同地方的流程线连接起来.
一个流程图包括以下几个 部分:
1)表示相应操作的框.2)带箭头的流程线.3)框内外必要的文字说明
注意:流程线不要忘记画箭头,因为它是反映流程的先后的.
2.4.3 三种基本结构和改进的流程图
1.传统流程图的弊端
2.三种基本结构:
1)顺序结构.
2)选择结构.
3)循环结构.
又称重复结构,即反复执行某一部分的操作.有两类循环结构:1.当型(while型)循环结构.2.直到型(until型)循环结构
2.4.4 用N-S流程图表示算法
2.4.5 用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法.
用伪代码写算法并无固定的,严格的语法规则,可以用英文,也可以中英文混用.只要把意思表达清楚,便于书写和阅读即可,书写的格式要写成清晰易读的形式.
2.4.6 用计算机语言表示算法
4.将求5!用C语言表示
#include <stdio.h> #include <stdlib.h> int main() { int i,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf("%d\n",t); return 0; }
5.上面试题2用C语言表示
#include <stdio.h> #include <stdlib.h> int main() { int sign=1; double deno=2.0,sum=1.0,term; while(deno<=100) { sign=-sign; term=sign/deno; sum=sum+term; deno=deno+1; } printf("%f\n",sum); return 0; }
2.5 结构化程序设计方法
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都空缺在人们容易理解和处理的范围内.
具体说,采用以下方法来保证得到结构化的程序:
1)自顶向下;
2)逐步细化;
3)模块化设计;
4)结构化编码.
6.将100~200之间的素数输出.
7.求两个数m和n的最大公约数.
原文:http://www.cnblogs.com/sunshinegirl-7/p/5003451.html