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

news/2024/11/17 19:42:51/文章来源:https://www.cnblogs.com/wchxx/p/18550964

作业信息

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队项目冲刺第二天

课程 2024软件工程作业要求 团队作业4——项目冲刺作业目标 团队项目冲刺第二天团队会议合照燃尽图计划表格成员 已完成 下一步洪吉潮 用户注册与登录功能完善设计用户注册界面 用户注册与登录功能完善设计登录界面交互刘家辉 用户注册与登录功能完善实现邮箱注册功能及验证逻辑…

Scrum 冲刺博客-day5

一、每天会议 昨天完成的任务与今天计划完成任务成员 昨天已完成任务 今天计划完成任务董雯霖 活动信息页面 交流与反馈页面开发陈金星 首页页面 公告信息页面开发邱列圻 活动信息页面 debug李嘉远 活动信息页面 活动心得页面开发詹洛熙 配合测试 首页页面测试、活动信息页面测…

941. 有效的山脉数组

题目 自己写的 class Solution { public:bool validMountainArray(vector<int>& arr) {int l = 0, r = 1;bool up = true, change = false;if (arr.size() < 3)return false;if (arr[r] < arr[l])up = false;while (r < arr.size()){if (up){if (arr[r] <…

团队项目冲刺--Day4

每天举行站立式会议昨天已完成的工作成员 任务徐嘉炜 组织会议,说明项目进度,指导项目发展陈祥意 参与会议,简要讲述应用程序测试的各个模块林楦 参与会议,讲述有关功能界面的UI开发陈大锴 参与会议,协调开发技术与实际需求,记录需求蔡家显 参与会议,讲述测试时的注意事…

团队项目冲刺-day2

每天举行站立式会议 昨天已完成的工作成员 任务徐嘉炜 组织会议,说明项目进度,指导项目发展陈祥意 参与会议,简要讲述应用程序测试的各个模块林楦 参与会议,讲述有关功能界面的UI开发陈大锴 参与会议,协调开发技术与实际需求,记录需求蔡家显 参与会议,讲述测试时的注意事…

一文读懂maven

一、什么是mavenmaven是一个项目管理工具,通过pom.xml文件的配置获取jar包不用手动的去添加jar包就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包 就…

浅析注意力(Attention)机制

Attention顾名思义,说明这项机制是模仿人脑的注意力机制建立的,我们不妨从这个角度展开理解 2.1 人脑的注意力机制 人脑的注意力机制,就是将有限的注意力资源分配到当前关注的任务,或关注的目标之上,暂时忽略其他不重要的因素,这是人类利用有限的注意力资源从大量信息中快…

HBase架构与基础命令

HBase架构与基础命令 一、了解HBase 官方文档:https://hbase.apache.org/1.1 HBase概述HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据(底层是字节数组做存储的) HBase是Hadoop的生态系统之一,是建立在…

Blender 效果制作:制作起伏不平的路面

前置准备正常纹理贴图,置换贴图,法线贴图,粗糙贴图方法一首先用UV坐标,纹理贴图,法线贴图,粗糙贴图构建材质将网格细分多一点,并采用置换修改器,置换修改器使用置换贴图获得成图方法二首先用UV坐标,纹理贴图,法线贴图,粗糙贴图构建材质细分网格将【置换】改成“置换…

团队作业4-第5篇Scrum博客

团队作业4-第5篇Scrum博客 1 站立式会议 1.1 会议照片1.2 会议内容 昨天已完成的工作:已初步完成数据库记录的备份、恢复和退出功能及账目记录的增删改功能今天计划完成的工作项目模块 需要实现的功能 负责人 预计用时主界面模块 右键实现增删改功能 黄锐 2h主界面模块 报告界…

PCFN

import torch import torch.nn as nn import torch.nn.functional as Fclass PCFN(nn.Module):使用带有GELU的激活函数的1*1卷积对扩展的隐藏空间进行跨信道交互。 然后将隐藏特征分割成两块 对其中一块使用3*3卷积核GELU激活函数 编码局部上下文将处理后的结果和另一块合并def…

Linux 内核如何装载和启动一个可执行程序

张晓攀+原创作品转载请注明出处+《Linux内核分析》MOOC课程https://mooc.study.163.com/course/1000029000 实验七——Linux 内核如何装载和启动一个可执行程序 一、实验过程 1.从github上下载相关代码2.然后用test_exec.c 替换test.c,再重新编译生成根文件系统3.启动调试内核…