一个程序应包括以下两个方面的内容:
-
对数据的描述
a.编写的程序中指定【数据的类型】和数据的组织形式,即数据结构
-
对操作的描述(算法)
a.数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
著名计算机科学家沃思提出了一个公式:
数据结构 + 算法 = 程序
故一名程序设计人员应具备:
- 算法(解决“做什么”和“怎么做”的问题)
- 数据结构
- 程序设计方法(结构化程序设计)
- 语言工具
算法:做任何事情都要有的一定步骤
分类:数值运算算法 / 非数值运算算法
数值运算算法:求数值解 例如:求方程的根
非数值运算算法:事务管理领域,图书检索
简单算法举例
- 求1×2×3×4×5
步骤1:1×2,得到结果2
步骤2:将步骤1得到的乘积结果在×3,得到结果
步骤3,依次类推…
虽然可以得出结果,但是如果有一万个数,就得相同的方式×以一万遍。
可以设两个变量:
- 一个变量代表被乘数
- 一个变量代表乘数
不另设变量存放乘积结果,而直接将每一步的乘积放在被乘数变量中。
设p为被乘数,i为乘数
S1:使p=1
S2:使i=2
S3:使pi,乘积仍放在变量p中,可表示为:pi=p
S4:使i的数值加1,即i+1=i
S5:如果i不大于5,返回重新执行步骤S3,以及S4,S5;否则算法结束。
最后得到p的数值就是5!的值。
算法的特性
- 有穷性(合理的范围内)
- 确定性(算法的每一个步骤都应该是清晰确定的,新手很容易犯这个错误)
- 有零个或者多个输入(外界获取的输入信息 / 内部设定的常量)
- 有一个或者多个输出
- 有效性(算法的每一个步骤都应当能有效的执行)
表示算法
- 自然语言表达
- 流程图表示
*目的是提高算法的质量,限制箭头的随意使用
-
-N-S流程图表示算法
伪代码
原因:算法比较复杂,需要反复修改时
- 例如:打印x的绝对值
if x is positive then
print x
else
print -x
也可以用汉字描述
若x为正
输出x
否则
输出-x
也可以中英文混用
if x 为正
print x
else
print -x
(关键字用英语表示,其他可用汉字)
(原则便于书写和阅读即可)
例如前面的例子,求1×2×3×4×5
伪代码:
- 开始
- 置t的初始值为1
- 置i的初始值为2
- 当i<=5,执行下面操作
- 使t=t*i
- 使i=i+1
- {循环体到此结束}
- 输出t的值
- 结束
也可以写成以下的形式
begin // 算法开始
1=t
2=i
while i 《 5
{
t*i=t
i+1=i
}
print t
end //算法结束
本次算法采用 当型循环(第3行到第5行是一个当型循环)
while意思为“当”
实现代码
#include<stdio.h>
void main()
{
int i,t; //先定义数据类型
t=1; //赋值
i=2;
while(i<5)
{
t=t*i;
i=i+1;
}
printf("%d\n",t);
scanf("%d",&t);
}