【算法-程序的灵魂#谭浩强配套】(适合专升本、考研)

无偿分享学习资料,需要的小伙伴评论区或私信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.冒泡排序

cpp 复制代码
    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.斐波那契函数问题

cpp 复制代码
//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。。。

相关推荐
就是有点傻1 小时前
C#中面试的常见问题007
面试·c#·wpf
周杰伦fans3 小时前
Java与C#
java·开发语言·c#
三天不学习3 小时前
C#.Net筑基-类型系统
c#·.net
csdn_aspnet4 小时前
C# 程序来计算三角形的面积(Program to find area of a triangle)
算法·c#
xcLeigh5 小时前
C# Winform贪吃蛇小游戏源码
开发语言·c#
.NET快速开发框架6 小时前
一文搞懂flex(弹性盒布局)
c#·.netcore·web前端·开发技术·rdif·rdiframework.net
呆呆小雅6 小时前
C# 结构体
android·java·c#
生财6 小时前
获取字 short WORD 上指定的位是否有效
java·服务器·c#
呆呆小雅6 小时前
C# 封装
java·开发语言·c#
就是有点傻8 小时前
C#中面试的常见问题006
开发语言·面试·c#·wpf