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

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08
这个作业的目标 功能设计与面向对象设计 面向对象设计过程 面向对象语言三要素 汇编、编译、解释、执行
作业正文 https://www.cnblogs.com/wchxx/p/18550964

教材学习内容总结

功能设计与面向对象设计

功能设计

  • 功能设计主要关注于系统的功能需求,即系统应该做什么。它涉及到确定系统需要实现的功能和操作,以及这些功能如何满足用户的需求。
  • 功能设计通常包括用例分析、功能模块划分、接口定义等。
  • 它强调的是“做什么”,而不是“怎么做”。

面向对象设计

  • 面向对象设计(OOD)是一种软件设计范式,它使用对象来设计系统。对象是数据和操作数据的方法的封装。
  • 面向对象设计强调的是“怎么做”,即如何通过对象之间的交互来实现系统的功能。
  • 它包括类的设计、继承、封装和多态等概念的应用。

面向对象设计过程

  1. 需求分析:确定系统的需求,包括功能性和非功能性需求。
  2. 概念性设计:定义系统的高层次结构,包括主要的类和对象。
  3. 详细设计:细化概念性设计,定义类的具体属性和方法。
  4. 实现:根据设计文档编写代码。
  5. 测试:确保代码符合设计要求,并且能够正确执行。
  6. 维护:对系统进行必要的更新和修复。

面向对象语言三要素

  1. 封装:将数据(属性)和操作数据的方法(行为)封装在对象中,隐藏内部实现细节。
  2. 继承:允许新类(子类)继承现有类(父类)的属性和方法,减少代码重复。
  3. 多态:允许不同类的对象对同一消息做出响应,即同一个接口可以被不同的对象以不同的方式实现。

汇编、编译、解释、执行

汇编

  • 汇编语言是一种低级编程语言,它比机器码更易于人类阅读和编写。
  • 汇编器(Assembler)将汇编语言代码转换成机器码。

编译

  • 编译是一种将高级编程语言代码转换成机器码的过程。
  • 编译器(Compiler)执行这一过程,它通常包括词法分析、语法分析、语义分析和代码生成等步骤。

解释

  • 解释是一种执行源代码的方式,解释器(Interpreter)在运行时逐行读取和执行代码,不需要事先编译成机器码。
  • 解释执行通常比编译执行慢,因为它缺少编译代码的优化。

执行

  • 执行是指计算机硬件运行机器码的过程。
  • 执行可以是直接在硬件上运行编译后的机器码,也可以是通过解释器运行解释后的代码。

数组

  1. 数组定义

    • 数组是一种数据结构,用于存储相同类型的多个元素。
    • 在C语言中,数组可以是一维或多维的。
  2. 数组声明

    • 一维数组声明:type arrayName[size];
    • 多维数组声明:type arrayName[size1][size2]...;
  3. 数组初始化

    • 静态初始化:在声明时初始化,如int arr[] = {1, 2, 3};
    • 动态初始化:声明后使用循环或赋值语句初始化。
  4. 数组访问

    • 通过索引访问数组元素,索引从0开始。
  5. 数组大小

    • 数组的大小在声明时确定,且不可改变。
  6. 指针与数组

    • 数组名可以作为指向数组首元素的指针使用。
  7. 多维数组

    • 多维数组可以看作是数组的数组,访问时需要多个索引。
  8. 数组作为函数参数

    • 数组可以作为参数传递给函数,通常是通过指针。

算法基础

  1. 算法概念

    • 算法是解决问题的明确步骤集合。
  2. 算法特性

    • 输入:一个或多个输入值或数据集合。
    • 输出:一个或多个输出值或数据集合。
    • 确定性:算法的每一步都必须有明确的定义。
    • 有限性:算法必须在有限的步骤后结束。
    • 可行性:算法的每一步都必须足够基本,以至于可以准确地执行。
  3. 算法复杂度

    • 时间复杂度:算法执行所需的时间。
    • 空间复杂度:算法执行所需的存储空间。
  4. 基本算法结构

    • 顺序结构:按顺序执行指令。
    • 选择结构:基于条件选择执行不同的代码块。
    • 循环结构:重复执行一段代码直到满足特定条件。
  5. 排序算法

    • 冒泡排序、选择排序、插入排序、快速排序等。
  6. 搜索算法

    • 线性搜索、二分搜索等。
  7. 递归

    • 递归是一种算法设计技巧,函数直接或间接地调用自身。
  8. 算法设计原则

    • 抽象:忽略细节,关注主要问题。
    • 模式识别:识别问题中的通用模式。
    • 递归思维:将问题分解为更小的子问题。
  9. 算法分析

    • 分析算法的效率,包括时间复杂度和空间复杂度。

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

问题:二维数组如何用指针传递?
解答:

方法1:传递指向数组首元素的指针

当有一个二维数组 array[row][col] 时,可以传递一个指向数组首元素的指针,即 array[0] 的地址。在函数中,需要知道数组的列数,以便正确地访问数组元素。

#include <stdio.h>

void printArray(int *array, int rows, int cols) {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            printf("%d ", array[i * cols + j]);
        }
        printf("\n");
    }
}

int main() {
    int array[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int rows = 3, cols = 4;
    printArray((int *)array, rows, cols);
    return 0;
}

在这个例子中,printArray 函数接受一个指向 int 类型的指针 array,以及行数 rows 和列数 cols。在函数内部,我们通过计算 i * cols + j 来访问二维数组的元素。

方法2:传递指向数组第一行首元素的指针

另一种方法是传递一个指向数组第一行首元素的指针,即 array[0] 的地址。这种方法在函数内部不需要知道数组的列数,因为可以通过指针运算来获取。

#include <stdio.h>

void printArray(int (*array)[4], int rows) {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < 4; ++j) {
            printf("%d ", array[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int array[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int rows = 3;
    printArray(array, rows);
    return 0;
}

在这个例子中,printArray 函数接受一个指向包含4个整数的数组的指针 array,以及行数 rows。这里,array 被声明为 int (*array)[4],表示一个指向有4个整数的数组的指针。在函数内部,我们可以直接使用二维数组的语法 array[i][j] 来访问元素。

两种方法都可以有效地将二维数组传递给函数。第一种方法更灵活,因为它可以在不知道列数的情况下处理不同大小的二维数组;而第二种方法在语法上更接近于传统的二维数组访问方式。

基于AI的学习







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

posted @ 2024-11-17 19:39  20241319吴辰曦  阅读(2)  评论(0编辑  收藏  举报