首页 > 编程语言 >2024-2025-1 20241319 《计算机基础与程序设计》第八周学习总结

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

时间:2024-11-17 19:29:23浏览次数:1  
标签:rows 20241319 int 2024 2025 算法 数组 array 指针

作业信息

这个作业属于哪个课程 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小时
改进情况:

标签:rows,20241319,int,2024,2025,算法,数组,array,指针
From: https://www.cnblogs.com/wchxx/p/18550964

相关文章

  • 2024-2025-1 20241327 《计算机基础与程序设计》第八周学习总结
    作业信息|2024-2025-1-计算机基础与程序设计)||--|-|2024-2025-1计算机基础与程序设计第八周作业)||快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题|作业正文|https://www.cnblogs.com/shr060414/p/18440575|教......
  • 2024-2025-1 20241316 《计算机基础与程序设计》第八周学习总结
    2024-2025-120241316《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程[2024-2025-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)这个作业要求在哪里2024-2025-1计算机基础与程序设计第八周作业(https://www.......
  • 20222323 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体......
  • 【星航计划】2024.11 Div. 3 题解
    2024--星航计划--十一月份--基础算法A.分段每一段连续的\(1\)之间是独立的,我们只需要关心一段连续的1的结果。可以证明对于一段连续的\(1\),最优策略是将其划分成多个单独的\(1\)以及可能余下的连续两个\(1\)。对于\(k\)个连续的\(1\),如果\(k\)是奇数,......
  • 学期2024-2025-1 学号20241317 《计算机基础与程序设计》第八周学习总结
    学期2024-2025-1学号20241317《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上具体......
  • 2024-2025-1 20241403 《计算机基础与程序设计》第八周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第八周作业)这个作业的目标功能......
  • 第十一届传感云和边缘计算系统国际会议 2025 11th International Conference on Senso
    重要信息官网:https://ais.cn/u/vEbMBz......
  • 20241023 模拟赛
    20241023模拟赛A.浇水考虑统计每个点被浇水了几次,容易用二维前缀和维护,最后如果这个点在对应颜色的矩阵里就扣除一个次数,最后有次数的就枯萎。B.藤养巴士赛时考虑树形dp,和树上差分解法殊途同归。设\(f_u\)表示,假设所有目标在\(u\)子树中的人都已经到了\(u\)子树中,......
  • 20241022 模拟赛
    20241022模拟赛A.枚举高手考虑dp,设\(f_{i,j}\)表示考虑到第\(i\)个数,和为\(j\)的答案,\(g_{i,j}\)表示方案数。考虑两种转移:一种是在原序列的末尾加上一个\(1\),一种是把现有的数一起加上\(1\),容易发现这样既能保证有序性又能不重不漏。时间复杂度\(O(nm)\)。最近总......
  • 20222320 2024-2025-1 《网络与系统攻防技术》实验6实验报告
    目录目录目录1.实验目标2.实验内容3.实验过程3.1前期渗透3.2Vsftpd源码包后门漏洞(21端口)3.3SambaMS-RPCShell命令注入漏洞(端口139)3.4JavaRMISERVER命令执行漏洞(1099端口)3.5PHPCGI参数执行注入漏洞(80端口)4.问题及解决方案5.学习感悟、思考等1.实验目标掌握metasploit的......