2024-2025-1学号20241309《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第八周作业 |
这个作业的目标 | |
作业正文 | 2024-2025-1学号20241309《计算机基础与程序设计》第八周学习总结 |
教材学习内容总结
《计算机科学概论》第九章:
一、功能设计与面向对象设计
功能设计:
侧重于将系统或程序要实现的功能进行分解和规划。它主要关注的是要完成哪些具体的任务、操作,以及这些任务之间的逻辑顺序和数据流向等。比如设计一个计算器程序,功能设计阶段会明确要实现加、减、乘、除等运算功能,以及如何处理输入输出数据以完成这些运算。
通常以过程式的思维方式为主,将整个程序看作是一系列按顺序执行的步骤和函数调用的集合,重点在于对数据进行处理以达成预期的功能目标。
面向对象设计:
是一种以对象为核心的设计方法。把现实世界中的事物抽象成对象,每个对象都有自己的属性(数据)和行为(方法)。例如,在设计一个学生管理系统时,会把学生抽象成对象,学生对象有学号、姓名、年龄等属性,以及选课、查询成绩等行为。
强调对象之间的交互和协作来实现系统的整体功能。通过封装、继承和多态等机制,使得代码更加模块化、可维护和可扩展。比如不同类型的学生(本科生、研究生等)可以通过继承学生类来共享一些通用属性和行为,并添加各自特有的属性和行为。
二、面向对象设计过程
问题分析:
深入理解要解决的实际问题,明确系统的需求和边界。确定系统需要处理哪些数据,要实现哪些功能,以及与外部环境的交互关系等。
识别对象和类:
根据问题分析的结果,从现实世界或问题域中抽象出对象,并归纳成类。找出具有相似属性和行为的对象集合,将其定义为一个类。比如在电商系统中,识别出用户类、商品类、订单类等,用户类的对象具有用户名、密码、收货地址等属性,以及登录、注册等行为。
确定对象的属性和行为:
对于每个识别出的类,进一步明确其对象的具体属性和行为。属性是对象所具有的数据特征,行为是对象能够执行的操作。如商品类的属性可能包括商品名称、价格、库存等,行为可能有更新库存、显示商品信息等。
建立对象之间的关系:
分析各类对象之间的关联、依赖、聚合、继承等关系。比如订单类和用户类之间存在关联关系(一个订单对应一个用户),商品类和订单类之间可能存在聚合关系(一个订单可以包含多个商品),不同类型的用户类(如普通用户和管理员用户)之间可能存在继承关系。
设计类的层次结构:
通过继承机制构建类的层次结构,将具有共性的类组织在一起,形成父类和子类的关系。子类可以继承父类的属性和行为,并可根据自身需要进行扩展和修改。例如,在图形绘制系统中,可将所有图形抽象为一个图形类作为父类,然后三角形类、矩形类等作为子类继承图形类的基本属性和行为(如坐标位置、绘制方法等),并添加各自特有的属性和行为(如三角形的三条边长度、矩形的长和宽等)。
实现和测试:
根据设计好的类和对象关系,使用面向对象编程语言进行代码实现。然后对实现的代码进行测试,包括单元测试、集成测试等,以确保程序能够正确实现预期的功能,并且在不同场景下运行稳定。
三、面向对象语言三要素
封装:
是指将数据和操作数据的方法包装在一起,形成一个相对独立的单元,也就是对象。对外界隐藏对象内部的实现细节,只提供必要的接口供其他对象访问和使用。例如,在一个银行账户类中,账户余额是内部数据,存款、取款等操作方法与账户余额相关联,通过封装,外界只能通过调用存款、取款等公开接口来影响账户余额,而无法直接访问和修改账户余额的具体数值。
继承:
允许一个类(子类)继承另一个类(父类)的属性和行为。子类可以在继承的基础上添加自己特有的属性和行为,或者修改继承自父类的某些属性和行为。比如,在动物分类体系中,哺乳动物类可以继承动物类的基本属性和行为(如呼吸、进食等),然后猫类作为哺乳动物类的子类又可以继承哺乳动物类的属性和行为,并添加自己特有的属性和行为(如会捉老鼠、发出喵喵声等)。
多态:
指同一个行为(方法)在不同的对象中有不同的表现形式。具体来说,当一个父类的方法被多个子类继承后,在不同子类中该方法可以有不同的实现方式,并且在调用该方法时,会根据对象的实际类型来决定采用哪种实现方式。例如,在图形绘制系统中,有一个绘制图形的方法,对于三角形类对象,该方法会按照三角形的特点来绘制;对于矩形类对象,该方法会按照矩形的特点来绘制,虽然都是调用同一个绘制图形的方法,但实际执行的效果不同。
四、汇编、编译、解释、执行
汇编:
汇编语言是一种低级程序设计语言,它与机器语言较为接近,使用助记符来代替机器语言的二进制指令。汇编过程是将用汇编语言编写的程序转换为机器语言程序的过程。例如,一条汇编指令 “MOV AX, 10”(将数值 10 移动到寄存器 AX 中),经过汇编后会变成对应的二进制机器指令序列,以便计算机能够直接执行。汇编语言通常用于对硬件进行精细控制,如编写设备驱动程序等,因为它可以更直接地与计算机硬件打交道。
编译:
编译是将高级程序设计语言(如 C、Java 等)编写的源程序转换为目标机器语言程序的过程。编译程序(编译器)会对源程序进行词法分析、句法分析、语义分析等一系列复杂的分析工作,然后生成目标机器语言程序(对于可移植的高级语言,可能会先生成中间代码,再进一步转换为目标机器语言)。例如,将一个用 C 语言编写的程序通过 C 编译器编译后,会得到一个可以在特定操作系统和计算机硬件上运行的可执行文件。编译的特点是一次性将整个源程序转换为目标程序,执行时不需要源程序本身,通常执行速度较快。
解释:
解释是将高级程序设计语言编写的源程序逐行进行解释执行的过程。解释程序(解释器)会读取源程序的一行,进行分析并执行相应的操作,然后再读取下一行继续执行。例如,Python 就是一种解释型语言,当运行一个 Python 程序时,解释器会逐行读取并执行程序中的代码。解释的特点是不需要将源程序全部转换成目标机器语言,而是边解释边执行,所以执行速度通常比编译型语言慢,但具有较好的灵活性和可修改性,适合于快速开发和调试。
执行:
执行是指计算机按照程序所规定的指令和逻辑顺序运行程序的过程。对于编译型语言,执行的是已经编译好的目标机器语言程序;对于解释型语言,执行的是正在被解释器逐行解释的源程序。在执行过程中,计算机的 CPU 会根据程序中的指令从内存中读取数据,进行各种运算和操作,并将结果存储回内存或输出到外部设备等。执行的结果就是实现了程序所预期的功能,比如一个计算器程序执行后会输出正确的计算结果,一个图像绘制程序执行后会呈现出所绘制的图像等。
《C语言程序设计》第七章:
一、函数的概念与作用
定义:函数是一段可以重复使用的代码,用于完成特定的任务。它将一个较大的程序分解为若干个相对独立的小模块,使得程序结构更加清晰,易于理解、维护和扩展。
作用:
提高代码的复用性,避免重复编写相同功能的代码。
便于程序的模块化设计,将复杂的程序按照功能划分为不同的函数模块,各模块可独立开发、测试。
二、函数的定义与调用
定义
函数定义的一般形式包括函数头和函数体。函数头包含函数类型(返回值类型)、函数名、参数列表(形式参数);函数体则是用花括号括起来的一系列语句,用于实现函数的具体功能。
调用
函数调用就是在程序的其他地方使用已经定义好的函数。通过函数名及对应的实际参数来调用函数,实际参数的值会传递给形式参数。
三、函数的参数传递
值传递:
是 C 语言中函数参数传递的主要方式。在值传递时,将实际参数的值复制一份传递给形式参数。函数内部对形式参数的修改不会影响到实际参数的值。
地址传递:
也称为引用传递(在 C 语言中通过指针实现类似引用传递的效果)。是将实际参数的地址传递给形式参数,函数内部通过该地址可以直接访问和修改实际参数的值。
四、函数的返回值
函数可以返回一个值给调用者,返回值的类型在函数定义时通过函数类型指定。
如果函数不需要返回值,可以将函数类型定义为void。
五、函数的嵌套调用与递归调用
嵌套调用
指在一个函数的定义或调用过程中又调用了其他函数。可以将复杂的功能进一步分解为多个函数的依次调用实现。#####递归调用
是指一个函数在它的函数体内部直接或间接地调用了它自己。递归调用通常用于解决具有递归性质的问题,如阶乘、斐波那契数列等。
六、局部变量与全局变量
局部变量
定义在函数内部的变量称为局部变量,它的作用域仅限于定义它的函数内部。不同函数中的局部变量可以同名,相互之间没有影响。
全局变量
定义在函数外部的变量称为全局变量,它的作用域从定义点开始到整个源文件结束(如果没有其他限制条件)。全局变量可以被多个函数访问和使用,但过多使用全局变量可能会导致程序结构混乱、可维护性差等问题。
七、变量的存储类别
C 语言中有多种变量的存储类别,主要包括自动变量(auto)、静态变量(static)、寄存器变量(register)和外部变量(extern)。
自动变量(auto):
是最常见的变量存储类别,定义在函数内部的局部变量默认就是自动变量。它的存储单元在函数调用时分配,函数结束时释放,其值在每次函数调用时可能不同。
静态变量(static):
定义在函数内部的静态变量,其存储单元在程序运行期间一直保留,即使函数结束也不会释放。它的值在函数多次调用间保持不变(第一次调用时初始化,之后不再重新初始化)。
寄存器变量(register):
建议编译器将其存储在寄存器中,以提高访问速度。但实际上是否能存储在寄存器中由编译器决定。一般用于频繁访问的局部变量。
外部变量(extern):
用于在多个源文件中共享变量。当一个源文件中的函数需要访问另一个源文件中的全局变量时,可以通过 extern 声明来实现。
八、模块化程序设计
利用函数进行模块化程序设计的原则:
将程序按照功能划分成多个相对独立的模块(函数),每个模块完成特定的任务。
模块之间通过参数传递和返回值进行数据交换,尽量减少模块之间的直接耦合,提高程序的可维护性和可扩展性。
例如,设计一个学生成绩管理系统,可以将输入学生成绩、计算平均分、排序成绩等功能分别封装成不同的函数,通过合理的参数传递和返回值机制实现整个系统的运行。
通过以上总结,可以看出第七章围绕函数的定义、调用、参数传递、返回值等方面展开,介绍了函数在 C 语言程序设计中的重要作用以及如何利用函数实现模块化程序设计。
教材学习中的问题和解决过程
问题1:不理解函数声明中的形式参量的意义;
问题1解决过程:通过询问AI,明白函数声明中的形式参量就是调用函数时括号中的量,只不过其作用域只在函数内部。
问题2:调用函数的过程中总是出错;
问题2解决过程:通过与书上的代码对比,发现没有返回值。
基于AI的学习
上周考试错题总结
1.捕鱼和分鱼。ABCDE五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三竿,A第一个醒来,将鱼分为5份,把多余的1条鱼扔掉,拿走自己的1份。B第二个本来,也将鱼分5份,把多余的1条鱼扔掉,拿走自己的1份。CDE依次醒来,也按同样的方法拿鱼。问他们合伙至少捕了多少条鱼?
**输出格式要求:"Total number of fish catched=%d\n"
2. 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则A和B称为亲密数。求10000以内的亲密数。
**输出格式要求:"(%4d,%4d)\n"
3. 请按如下函数原型编写计算1~n之间的所有素数之和的程序。
int IsPrime(int x)
在主函数中调用该函数计算,并输出1~n之间的所有素数之和
**要求输入提示信息为:无
**要求输入格式为: "%d"
**要求输出格式为:"%d"
程序运行示例如下:
10
17
总结:对编程中的基本问题和语句应用不到位,对问题的处理复杂,练习过少导致考试中熟练度低,出现错误。
其他(感悟、思考等,可选)
学习编程的过程中单纯的依靠看书是不行的,必须多加练习,不断上机操作,调试程序,发现错误才能进步。