2024-2025-1 20241322《计算机基础与程序设计》第八周学习总结
2024-2025-1 20241322 《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |
这个作业的目标 | 功能设计与面向对象设计面向对象设计过程面向对象语言三要素汇编、编译、解释、执行 |
作业正文 | https://www.cnblogs.com/qiangedaming/p/18548070 |
教材学习内容总结
计算机科学概论第7版第9章:面向对象设计与高级程序设计语言
1. 面向对象编程(OOP)概念
- 对象:现实世界中事物的抽象,包含数据(属性)和行为(方法)。
- 类:对象的蓝图,定义了对象的属性和方法。
- 封装:将数据和操作数据的方法组合在一起,并隐藏内部实现细节。
- 继承:创建新类,继承现有类的属性和方法,并添加或修改它们。
- 多态:不同类的对象对同一消息做出响应,每个对象根据自己的实现来响应。
2. 类和对象
- 定义类,包括属性和方法。
- 对象的创建和使用,以及如何通过方法操作对象的属性。
3. 高级编程语言特性
- 自动内存管理、异常处理、泛型编程等特性。
- 这些特性如何提高编程效率和程序的健壮性。
4. 设计原则
- 面向对象设计的原则,如单一职责原则、开闭原则、里氏替换原则等。
- 这些原则帮助开发者创建可维护、可扩展和可重用的代码。
5. UML(统一建模语言)
- UML图,用于可视化软件设计的工具。
- 类图、对象图、用例图等UML图的类型和用途。
6. 面向对象分析与设计(OOAD)
- 使用面向对象的方法分析问题和设计软件系统。
- OOAD的步骤和技巧。
7. 案例研究
- 展示如何在实际项目中应用面向对象的概念。
8. 编程语言比较
- 对比支持面向对象编程的语言,如Java、C++、Python等。
- 讨论这些语言在面向对象特性支持方面的差异。
9. 面向对象编程的挑战
- 讨论面向对象编程可能面临的挑战,如过度设计、性能问题等。
10. 未来趋势
- 探讨面向对象编程和高级编程语言的未来发展趋势。
C语言程序设计第5版第7章:函数与模块化程序设计
一、函数的基本概念与用法
-
函数的定义
函数是C语言中用于实现特定功能的模块化单元,包括函数名、参数列表和函数体。 -
函数的调用
通过函数名及其参数列表来调用函数,执行其定义的功能。 -
函数的参数传递与返回值
函数通过参数接收输入数据,并通过返回值向调用者返回处理结果。
二、函数的递归与复用
-
递归函数
递归函数是一种直接或间接调用自身的函数,常用于解决可以分解为相似子问题的问题,例如阶乘计算、斐波那契数列等。 -
函数复用
通过编写通用的函数,可以在不同的程序中重复使用,提高编程效率。
三、模块化程序设计
-
模块化程序设计的思想
模块化程序设计体现了“分而治之”的思想,将大问题分解为小问题,再逐步求精,最终完成整个程序的设计。 -
函数在模块化设计中的作用
函数是模块化程序设计的基本单元,通过函数封装实现信息隐藏,使得程序结构更加清晰,易于调试和维护。 -
程序的结构
一个C程序可以由一个或多个源程序文件组成,每个源程序文件又可以由一个或多个函数组成,这种结构有助于实现模块化设计。
四、变量的作用域与存储类型
-
变量的作用域
根据变量在程序中定义的位置和方式,变量的作用域可以分为全局作用域和局部作用域。全局变量在整个程序中都可以访问,而局部变量只在定义它的函数或代码块中有效。 -
变量的存储类型
C语言中的变量根据其存储方式可以分为自动变量、静态变量、寄存器变量等。这些存储类型决定了变量的存储位置和生命周期。
基于AI的学习
教材学习中的问题和解决过程
- 问题1:在C语言中,如果你有一个整型数组int arr[10];,并且你已经为数组的前5个元素赋了值(例如arr[0] = 1; arr[1] = 2; ... arr[4] = 5;),那么数组剩下的5个元素(arr[5]到arr[9])在没有显式赋值的情况下,它们的值是什么?为什么?
- 问题1解决方案:
C语言中数组未初始化元素的值
在C语言中,当你声明一个数组但没有为所有元素显式赋值时,未赋值的元素将包含未定义的值。这意味着这些元素的值是不确定的,可能包含任何数据,这些数据取决于程序运行时的内存状态或之前的内存使用情况。
示例
假设你有一个整型数组 int arr[10];
并为前5个元素赋值:
int arr[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
在这种情况下,数组剩下的5个元素(arr[5]到arr[9])将包含未定义的值。
未定义行为
未初始化的局部变量(包括数组元素)在C语言中会导致未定义行为。未定义行为意味着程序的行为是不可预测的,它可能表现为任何方式,包括但不限于:
• 使用未初始化的值进行计算可能导致不正确的结果。
• 未初始化的值可能包含敏感信息,如密码或密钥,从而构成安全风险。
• 程序可能会崩溃或产生不可预料的行为。
初始化
为了避免未定义行为,最好总是显式地初始化你的数组元素。你可以通过以下几种方式之一来初始化数组:
1. 在声明时初始化
【c】
int arr[10] = {0}; // 将所有元素初始化为0
2. 显式地为每个元素赋值:
【c】
int arr[10];
for (int i = 0; i < 10; i++) {
arr[i] = 0; // 将所有元素初始化为0
}
3. 为部分元素赋值,其余元素自动初始化为0(仅当使用指定初始化器时):
【c】
int arr[10] = {1, 2, 3, 4, 5}; // 未指定的元素将自动初始化为0
注意:这种方法仅当使用指定初始化器(即在大括号中列出一些但不是全部元素的值)时有效。如果省略了大括号中的某些值,但大括号本身存在,则未指定的元素将自动初始化为0。但是,如果完全省略了大括号(如上面的第一个示例所示),则未初始化的元素将包含未定义的值。
总之,为了避免潜在的问题和错误,最好总是显式地初始化你的数组元素。
---
## 上周考试错题总结
- 错题:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包}括1,不包括B本身)之和等于A,则A和B称为亲密数。求10000以内的亲密数。
- 错因:不能理清正确的循环嵌套关系,导致程序无法运行,也无法得出正确结果。
##感悟
要想学好编程,练习必不可少,在练习中更正错误更加必要。
## 学习进度条
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 000/000 | 2/2 | 07/07 | |
| 第二周 | 000/000 | 1/3 | 07/14 | |
| 第三周 | 000/000 | 1/4 | 07/21 | |
| 第四周 | 050/050 | 1/5 | 07/28 | |
| 第五周 | 050/100 | 1/6 | 07/35 | |
| 第六周 | 070/170 | 1/7 | 07/42 | |
| 第七周 | 080/250 | 1/8 | 07/49 | |
| 第八周 | 100/350 | 1/9 | 07/56 | |