C语言-02 算法-程序的灵魂

1、程序=算法+数据结构

 
  在计算机科学中,程序是由算法和数据结构组成的。算法是解决问题的步骤,而数据结构则是存储和组织数据的方式。两者紧密结合,共同决定了程序的效率和功能。

2、什么是算法

 
  算法是指解决特定问题的一系列步骤或规则。它描述了如何从输入得到输出,并且必须在有限的步骤内完成。算法的关键在于正确性、效率和可维护性。

3、简单的算法举例

 
以计算两个数的最大公约数为例,经典的欧几里得算法步骤如下:

  • 1:给定两个正整数 ab
  • 2:如果 b 为 0,则 a 即为最大公约数。
  • 3:否则,计算 a % b 并将结果赋值给 b
  • 4:交换 ab 的值,重复步骤 2 和 3,直到 b 为 0。

4、算法的特性

 
一个好的算法应具有以下特性:

  • 有穷性:算法必须在有限的步骤内结束。
  • 确定性:算法的每一步骤必须明确、无歧义。
  • 输入:算法应有0个或多个输入。
  • 输出:算法应有一个或多个输出。
  • 可行性:算法的每一步骤都应是可行的,能够通过有限的操作实现。

5、怎样表示一个算法

5.1 用自然语言表示算法

 
  自然语言描述算法直观易懂,但容易产生歧义。适用于简单的算法描述,例如前述的欧几里得算法。

5.2 用流程图表示算法

 
  流程图通过图形表示算法的执行流程,每个步骤用方框或其他形状表示,流程用箭头连接。流程图清晰直观,适合表达算法的整体结构。
        在这里插入图片描述

5.3 三种基本结构和改进的流程图

 
流程图通常由三种基本结构构成:

  • 顺序结构:按步骤顺序执行。
  • 选择结构:根据条件执行不同分支。
  • 循环结构:重复执行某些步骤。

通过这些基本结构,可以绘制出更加复杂的流程图来表示复杂算法。

5.4 用N-S流程图表示算法

 
  Nassi-Shneiderman(N-S)流程图是另一种表示算法的方法。它使用嵌套矩形来表示算法的控制结构。N-S流程图比传统流程图更加结构化,更能体现程序设计的层次。
  示例:
 
在这里插入图片描述

5.5 用伪代码表示算法

 
  伪代码是一种介于自然语言和编程语言之间的表示方法。它没有固定的语法规则,更注重描述算法的逻辑步骤。伪代码简洁明了,便于转换成实际代码。例如,用于计算一个整数数组的最大值的伪代码:

Function FindMax(Array, n)
    max = Array[0]
    For i = 1 to n-1 Do
        If Array[i] > max Then
            max = Array[i]
        End If
    End For
    Return max
End Function

这个伪代码的功能是遍历一个数组 Array,并找到其中的最大值。n表示数组的元素数量,max用于存储当前找到的最大值。

5.6 用计算机语言表示算法

 
  算法可以用计算机语言来表示。这是最直接的表示方式,也就是将算法转换成可执行的程序代码。以C语言为例,实现上面的阶乘算法:

#include <stdio.h>

int FindMax(int array[], int n) {
    int max = array[0]; // 初始化最大值为数组的第一个元素

    for (int i = 1; i < n; i++) { // 从第二个元素开始遍历数组
        if (array[i] > max) { // 如果当前元素大于当前最大值
            max = array[i];   // 更新最大值
        }
    }

    return max; // 返回找到的最大值
}

int main() {
    int n;
    printf("Enter the number of elements: "); // 提示用户输入数组元素的数量
    scanf("%d", &n); // 获取用户输入的数组元素数量

    int array[n];
    printf("Enter the elements:\n"); // 提示用户输入数组元素
    for (int i = 0; i < n; i++) {
        scanf("%d", &array[i]); // 获取用户输入的数组元素
    }

    int max = FindMax(array, n); // 调用函数计算数组中的最大值
    printf("The maximum value is: %d\n", max); // 输出最大值

    return 0; // 程序结束
}

6、结构化程序设计方法

 
  结构化程序设计方法是指通过使用顺序、选择和循环三种基本结构,设计出清晰、易理解和维护的程序。C语言本身非常适合结构化程序设计,通过合理使用函数、循环和条件语句,可以编写出结构良好的代码。
 
举例:计算数组元素的平均值
 
  结构化程序设计的一个简单例子是计算数组中元素的平均值。该程序将输入一个整数数组,然后输出其平均值。

#include <stdio.h>

int main() {
    int n, i; // 声明整型变量 n 和 i
    double sum = 0.0, average; // 声明并初始化 sum 为 0.0,声明 average 变量

    printf("Enter the number of elements: "); // 提示用户输入元素数量
    scanf("%d", &n); // 获取用户输入的元素数量并存储在 n 中

    double array[n]; // 声明一个大小为 n 的 double 类型数组
    for (i = 0; i < n; i++) { // 循环遍历数组
        printf("Enter element %d: ", i + 1); // 提示用户输入第 i+1 个元素
        scanf("%lf", &array[i]); // 获取用户输入的元素并存储在数组中
        sum += array[i]; // 将输入的元素值累加到 sum
    }

    average = sum / n; // 计算平均值
    printf("Average = %.2lf\n", average); // 输出平均值,保留两位小数

    return 0; // 程序结束,返回 0 表示成功执行
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗大Lemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值