无偿分享学习资料,需要的小伙伴评论区或私信dd。。。
无偿分享学习资料,需要的小伙伴评论区或私信dd。。。
无偿分享学习资料,需要的小伙伴评论区或私信dd。。。
完整资料如下:
1.一个程序主要包括以下两方面信息:程序=算法+数据结构
数据结构:对数据的描述。
算法:对操作的描述。
2.什么是算法?
为解决一个一个问题而采取的方法和步骤就是算法
3.计算机算法可分为两大类:数值运算算法、非数值运算算法
4.算法的特性:
有穷性:有限的操作步骤。
确定性:每一个步骤都应该是确定的,无二义性。
零个或多个输入
一个或多个输出
可行性:每一个步骤都是能有效执行的。
5.如何表示一个算法
-
自然语言
<!--使用自然自然表示算法通俗易懂,但是文字冗长,容易出现分歧,且含义往往不太严格,需要上下文判断。-->
-
流程图【传统流程图、结构化流程图、N-S流程图】
<!--流程图分为3种,传统流程图、结构化流程图和N-S流程图。传统流程图又称为“BS型算法”,是最早的流程图表算法方式,其难以阅读、修改,算法的可靠性与维护行不高,很难看清算法逻辑。为了解决传统流程图的弊端,人们规定了几种基本结构-顺序结构、选择结构、循环结构,就诞生了结构化流程图,结构化流程图表示的算法直观形象、易于理解,但是当算法比较复杂时,画起来比较费时且难以修改,也难以清楚的表达算法。N-S流程图是由结构化流程图演变而来,只是去掉了结构化流程图的流程线。-->
-
伪代码
<!--近似于高级语言的文字和符号来描述算法,书写方便自由,无严格语法规则,格式紧凑,修改方便,容易看懂,也便于向计算机语言过渡,但是编写的算法不如流程图直观,可能出现逻辑上的错误。一般begin表示开始,end表示结束,专业算法设计人员常采用伪代码描述算法。-->
-
程序设计语言
<!--顾名思义就是使用计算机语言来表示算法,优点当然是可以直接在计算机上运行,缺点就是语法严格。-->
6.一个结构化流程图应该包含以下三方面内容
- 表示相应操作的框
- 带箭头的流程线
- 框内外必要的文字说明
⚠️注意:
-
连接点:用于将画在不同地方的流程线连接起来
-
流程线:表示程序运行的方向,切记加箭头
7.三种基本结构:顺序结构、选择结构、循环结构(当型循环结构、直到型循环结构)
三种基本结构的共同点:只有一个入口与出口、结构内每个部分都有机会执行、不存在死循环。
⚠️注意:选择结构虽然有两个方向出口,但是最终只会执行一个方向,所以也是一个出口。
8.N-S流程图
2.24:顺序结构
2.25:选择结构
2.26:当型循环结构(分为for、while循环)
2.27:直到型循环结构
9.由三种基本结构组成的算法结构,可以解决任何复杂的问题。
10.如何保证得到结构化程序
自顶而下(自下而上)
逐步细化(逐步积累)
模块化设计
结构化编码
11.什么是结构化程序设计(模块化程序设计)
以模块设计为中心,将程序分成若干个独立的模块,每个独立的模块都使用三种基本结构构成的程序称为结构化程序。它的主要观点是
采用自顶向下、逐步求精的程序设计方法;使用3种根本控制结构构造程序,任何程序都可由顺序、选择、循环这3种根本控制结构构造 。
⚠️注意:结构化程序主要由三种基本结构构成,但并非包含三种基本结构的程序就是结构化程序,也不是必须包含三种基本结构。
12.什么是结构化算法
使用三种基本结构描述的算法就是结构化算法
典型算法
1.冒泡排序
int a[5],t;
printf("请输入五个数字:\n");
for(int i=0;i<5;i++){
scanf("%d",&a[i]);
}
printf("输入完成!\n\n");
for(int i=0;i<4;i++){ //外层循环:轮
for(int j=0;j<4-i;j++){ //内层循环:次
if(a[j]>a[j+1]){ //例如a0与a1比较,若a0大于a1,则互换位置,这样较大者放在第二位,接着
t=a[j],a[j]=a[j+1],a[j+1]=t; //和第三位比较,若大于第三位又互换位置,以此类推,将较大者移到最后面
}
}
}
printf("从小到达循序为:");
for(int i=0;i<5;i++){
printf("%d\t",a[i]);
}
2.斐波那契函数问题
//1.普通解法
#include<stdio.h>
int main()
{
int f1=1,f2=1,i;
for(i=1;i<=20;i++)
{
printf("%12d %12d",f1,f2);
if(i%2==0)printf("\n");
f1=f1+f2;
f2=f2+f1;
}
return 0;
}
//2.数组解法
#include<stdio.h>
int main()
{
int a[20]={1,1};
int i;
for(i=2;i<20;i++)
a[i]=a[i-2]+a[i-1];
for(i=0;i<20;i++)
{
if(i%3==0)printf("\n");
printf("%12d",a[i]);
}
return 0;
}
完整学习资料评论区或私信dd。。。