2024-2025-1 20241319 《计算机基础与程序设计》第六周学习总结

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06
这个作业的目标 Polya如何解决问题 简单类型与组合类型 复合数据结构 查找与排序算法 算法复杂度 递归 代码安全
作业正文 https://www.cnblogs.com/wchxx/p/18523221

教材学习内容总结

Polya如何解决问题

Polya提出了一个著名的问题解决框架,通常被称为“Polya的四步”:

  1. 理解问题:彻底理解问题是什么,需要解决什么。
  2. 制定计划:设计一个解决问题的方案,可能包括分解问题、寻找模式或使用已知的算法。
  3. 执行计划:实施计划,可能涉及计算、编程或其他形式的实验。
  4. 回顾:检查解决方案,确保它是正确的,并从中学习以改进未来的解决方案。

简单类型与组合类型

  • 简单类型(Primitive Types):包括整数、浮点数、字符、布尔值等,是不可再分的基本数据单元。
  • 组合类型(Composite Types):由简单类型组合而成,例如数组、结构体、类等,可以包含多个简单类型的数据,并进行复杂操作。

复合数据结构

  • 数组(Array):一组相同类型的元素集合。
  • 链表(Linked List):由节点组成的线性数据结构,每个节点包含数据和指向下一个节点的指针。
  • 栈(Stack):后进先出(LIFO)的数据结构。
  • 队列(Queue):先进先出(FIFO)的数据结构。
  • 树(Tree):由节点和边组成的层次结构,如二叉树、B树等。
  • 图(Graph):由节点和边组成的非线性数据结构,用于表示复杂的关系。

查找与排序算法

  • 查找算法
    • 线性查找(Linear Search):逐个检查每个元素,直到找到目标元素。
    • 二分查找(Binary Search):在有序数组中通过不断缩小查找范围来查找目标元素。
  • 排序算法
    • 冒泡排序(Bubble Sort):通过多次遍历数组,比较相邻元素并交换位置。
    • 选择排序(Selection Sort):每次选择最小(或最大)的元素放到已排序部分的末尾。
    • 插入排序(Insertion Sort):将未排序部分的元素逐个插入到已排序部分的正确位置。
    • 快速排序(Quick Sort):一种分治算法,通过选择一个基准值将数组分为两部分。

算法复杂度

算法复杂度分析涉及评估算法执行时间和空间需求的增长速率。常见的复杂度表示包括O(n)、O(n^2)、O(log n)等,它们描述了算法性能随输入规模增加的变化趋势。

递归

递归是一种在问题解决中自我引用的方法,它将问题分解为更小的子问题来解决。递归的关键要素包括:

  1. 基本情况:递归的终止条件。
  2. 递归步骤:将问题分解为更小的子问题,并递归解决这些子问题。

代码安全

保护代码安全的方法包括:

  1. 访问控制:限制对代码的访问。
  2. 加密:使用加密技术保护代码不被未授权访问。
  3. 安全协议:使用SSH、TLS等安全协议传输源代码。
  4. 代码混淆:将源代码转换为难以理解的形式,防止逆向工程。
  5. 安全审计:定期进行安全审计,检测和防止安全漏洞。
  6. 员工培训:提高员工对源代码安全性的意识。
    当然,让我们更详细地探讨C语言程序设计第五章中关于控制结构和函数的两个主要部分。

控制结构

控制结构是编程中用于控制程序执行流程的语句。在C语言中,控制结构包括条件语句和循环语句。

条件语句

  • if语句:用于在满足特定条件时执行代码块。
    if (condition) {
        // 条件为真时执行的代码
    }
    
  • else语句:与if配合使用,当if条件不满足时执行。
    if (condition) {
        // 条件为真时执行的代码
    } else {
        // 条件为假时执行的代码
    }
    
  • else if语句:允许你检查多个条件。
    if (condition1) {
        // 条件1为真时执行的代码
    } else if (condition2) {
        // 条件2为真时执行的代码
    } else {
        // 所有条件都不为真时执行的代码
    }
    
  • switch语句:用于根据一个变量的值执行不同的代码块。
    switch (variable) {
        case value1:
            // 当variable等于value1时执行的代码
            break;
        case value2:
            // 当variable等于value2时执行的代码
            break;
        default:
            // 没有匹配的case时执行的代码
    }
    

循环语句

  • for循环:用于在满足条件时重复执行代码块。
    for (initialization; condition; increment) {
        // 循环体
    }
    
  • while循环:在条件为真时重复执行代码块。
    while (condition) {
        // 循环体
    }
    
  • do-while循环:至少执行一次代码块,然后检查条件是否为真以决定是否继续循环。
    do {
        // 循环体
    } while (condition);
    
  • breakcontinue语句break用于立即退出循环,而continue用于跳过当前迭代的剩余部分,直接开始下一次迭代。

函数

函数是C语言中的基本构建块,允许你将代码封装成可重用的单元。

函数定义

  • 函数定义包括返回类型、函数名、参数列表和函数体。
    returnType functionName(parameterType parameterName, ...) {
        // 函数体
        return value; // 如果返回类型不是void
    }
    

函数调用

  • 函数调用涉及指定函数名和传递所需的参数。
    result = functionName(arg1, arg2, ...);
    

参数传递

  • 值传递:函数接收参数值的副本,对参数的修改不会影响原始变量。
  • 地址传递:函数接收参数的内存地址,允许函数直接修改原始变量。

递归函数

  • 递归函数是在其定义中调用自身的函数。
    int factorial(int n) {
        if (n == 0) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }
    

教材学习中的问题和解决过程

问题:编写的C语言程序在Windows和openeuler中的运行结果有差异
结果:询问AI,得到以下回答:
在C语言程序中,Windows和OpenEuler(Linux发行版)之间的运行结果差异可能是由于以下几个原因造成的:

  1. 编译器差异:Windows常用MSVC,而Linux常用GCC,它们对C语言标准的支持和实现可能不同。

  2. 系统调用和库函数:Windows和Linux的系统调用和库函数实现不同,影响程序的I/O和文件操作。

  3. 文件路径分隔符:Windows使用反斜杠(\),而Linux使用正斜杠(/)。

  4. 动态链接库:Windows使用DLL,Linux使用SO文件,影响共享库的加载。

为了减少差异,可以采用条件编译和使用标准库函数,避免平台特定的代码。
换用其它代码后问题解决。

基于AI的学习




计划学习时间:
2小时
实际学习时间:
2小时
改进情况:

posted @ 2024-11-03 14:02  20241319吴辰曦  阅读(4)  评论(0编辑  收藏  举报