随风而动,随遇而安......
C语言算法-学习二
01/23
本文最后更新于
2022年08月13日,已超过
783天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
一个 程序 主要包括两个方面的信息:
对 数据的描述,在程序中要指定要到了哪些数据以及这些数据的类型和数据的组织形式。
- 这就是 数据结构(data structure)
对 操作的描述,即要求计算机进行 操作的步骤。
- 也就是 算法(algorithm)
一个程序除了 算法 和 数据结构 这两个要素外,还应当采用 结构化程序设计方法 进行程序设计,并用某一种 计算机语言 表示。
什么是算法
算法是为了解决问题而执行的一系列步骤。
计算机的算法可以分为两大类别:
数值运算算法
- 数值运算的目的是求数值解。
非数值运算算法
- 非数值运算用于事务管理领域(图书检索,人事管理等等)。
例子:
求1X2X3X4X5的值
- 可以用最原始的方法进行:
- 步骤1:先求1*2,得到结果2。
- 步骤2:将步骤1得到的乘积2再乘以3,得到结果6。
- 步骤3:将6再乘以4,得24。
- 步骤4:将24再乘以5,得120。
改进算法
- 设变量 a 为被乘数;
- 变量 i 为乘数;
- 用循环算法求结果;
算法步骤:
- S1:使a=1,或写成1→a;
- S2:使i=2,或写成2→i;
- S3:使a与i相乘,乘积仍放在变量a中,可表示为:a*i→a;
- S4:使i的值加1,即i+1→i;
- S5:如果i不大于5,返回重新执行S3;否则,算法结束;
- 最后a的值就是要求的结果 ;
算法的特性
- 有穷性。一个算法应该包含有限的操作步骤,而不能是无限的
- 确定性。算法的每一个步骤都应当是确定的,而不是含糊的、模棱两可的
- 有零个或多个输入。输入是指在执行算法时需要从外界取得的必要信息
- 有一个或多个输出。算法的目的是为了求解,“解”就是输出
- 有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果
怎么表示一个算法
常用的方法有:
- 自然语言
- 流程图
- NS图
- 伪代码
......
流程图表示算法
流程图是用一些图框来表示各种操作,
用图形表示算法,直观形象,易于理解。
三种基础结构和改进的流程图
一、顺序结构
二、选择结构
三、循环结构
- 当型循环结构
- 直到型循环结构
三种基本结构的共同特点:
- 只有一个入口
- 只有一个出口
- 结构内的每一部分都有机会被执行到
- 结构内不存在“死循环”
以上面的例子做流程图
NS图表示算法
以上面的例子做N-S图
用C语言表示算法
while循环
#include <stdio.h>
int main()
{
int a,i;
a = 1;
i = 2;
while(i <= 5)
{
a = a * i;
i = i + 1;
}
printf("%d\n",a);
return 0;
}
do while循环
#include <stdio.h>
int main()
{
int a,i;
a = 1;
i = 2;
do
{
a = a * i;
i = i + 1;
}while(i <= 5);
printf("%d\n",a);
return 0;
}
for循环
#include <stdio.h>
int main()
{
int a;
a = 1;
for (int i = 2; i <= 5; i++) {
a = a * i;
}
printf("%d\n",a);
return 0;
}
注意:上面的代码是计算到5的阶乘,因为受数据类型的限制
对于 int 型,13! 会溢出; 对于 long 型,21! 会溢出
100、1000的阶乘结果较大,int,long表示的数据范围有限,所以在表示大数运算的时候,应该采用数组存储。
对于 int 型,13! 会溢出; 对于 long 型,21! 会溢出
100、1000的阶乘结果较大,int,long表示的数据范围有限,所以在表示大数运算的时候,应该采用数组存储。
结构化程序设计方法
- 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。
结构化程序设计方法的基本思路是:
- 把一个复杂问题的求解过程分阶段进行
- 每个阶段处理的问题都控制在人们容易理解和处理的范围内
采取以下方法保证得到结构化的程序:
- 1.自顶向下
- 2.逐步细化
- 3.模块化设计
- 4.结构化编码
练习
练习
1、用流程图或N-S图表示以下算法。
输入x的值,按下列函数计算y的值并输出y的值。
答案
2、画出打印以下图案的算法流程图或N-S图
*
* *
* * *
* * * *
答案
流程图N-S图