学期(2023-2024-1) 学号(20231414) 《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(2023-2024-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(2023-2024-1计算机基础与程序设计第八周作业) |
这个作业的目标 | <写上具体方面>功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行 |
作业正文 | ... 本博客链接https://i.cnblogs.com/posts/edit |
教材学习内容总结
《计算机科学概论》
1,面向对象对象和对象类,域(field)
2、设计方法:集体讨论、过滤、场景、责任算法
3、翻译过程:
编译器
- 解释器
- 字节码
4、程序设计语言范例:
命令式范例 - 声明式范例
5、高级程序设计语言功能性:
布尔表达式 - 数据归类
- 输入\输出结构
- 控制结构
6、面向对象语言的功能性:
封装 - 类
《C语言程序设计》
函数,变量的作用域和生存期以及模板化程序设计
教材学习中的问题和解决过程
《计算机科学概论》
- 问题1:Lisp语言是什么
- 问题1解决方案:Lisp(List Processing)是一种编程语言,最初由约翰·麦卡锡(John McCarthy)在1958年设计。它是第一个以表达式为基础的编程语言,也是第一个具有垃圾回收机制的编程语言之一。Lisp语言具有强大的元编程能力,允许程序在运行时操作和改变程序的结构。Lisp语言的语法简单,基本单位是S表达式(S-expression),由括号包围的列表和原子构成。Lisp语言在人工智能、自然语言处理、机器学习等领域得到了广泛应用,它的方言和变种也包括了Common Lisp、Scheme、Clojure等。
- 问题2:逻辑编程语言的语法
- 问题2解决方案:逻辑编程语言是一种基于逻辑推理的编程范式,最著名的逻辑编程语言是Prolog。逻辑编程语言的语法和传统的命令式编程语言有很大的不同,它使用逻辑规则和事实来描述问题领域,并通过逻辑推理来求解问题。
逻辑编程语言的语法包括以下几个重要的部分:
-
事实(Facts):事实是逻辑编程语言中的基本单位,它描述了问题领域中的已知信息。事实通常使用特定的语法表示,例如在Prolog中,一个事实可以是像这样的:likes(john, mary)。这表示了"约翰喜欢玛丽"这个事实。
-
规则(Rules):规则描述了问题领域中的逻辑关系和推理规则。规则通常由一个头部和一个体部组成,头部表示结论,体部表示前提。例如在Prolog中,一个规则可以是像这样的:happy(X) :- likes(X, ice_cream)。这表示了"如果某人喜欢冰淇淋,那么他就会感到快乐"这个规则。
-
查询(Queries):在逻辑编程语言中,可以提出查询来求解问题。查询通常使用特定的语法表示,例如在Prolog中,一个查询可以是像这样的:?- likes(john, mary)。这表示了"约翰是否喜欢玛丽"这个查询。
逻辑编程语言的语法通过这些基本元素来描述问题领域中的信息和逻辑关系,通过逻辑推理来求解问题。逻辑编程语言的语法和传统的命令式编程语言有很大的不同,它更加接近自然语言的表达方式,更加注重描述问题的逻辑关系和推理过程。
- 问题3:保留字的例子有哪些
- 问题3解决方案:不同的编程语言有不同的保留字,这些保留字在编程语言中有特殊的含义,不能被用作标识符或变量名。
以下是几种编程语言中的一些常见的保留字的例子:
-
Python中的保留字:
- if
- else
- while
- for
- def
- class
- True
- False
- None
-
C语言中的保留字:
- if
- else
- while
- for
- int
- char
- float
- double
- return
-
Java中的保留字:
- if
- else
- while
- for
- class
- interface
- extends
- implements
- return
这些保留字在相应的编程语言中有特殊的含义,不能被用作变量名或标识符。在编写程序时,需要避免使用这些保留字作为变量名或标识符,以免引起语法错误。
- 问题3:多态的例子
- 问题3解决方案:
一个经典的多态的例子是动物的继承体系,比如定义一个抽象的Animal类,然后派生出Dog类和Cat类。这些类都有一个makeSound方法,但是每个类的makeSound方法的实现是不同的,这就展现了多态的特性。
下面是一个简单的Python示例:
class Animal:
def makeSound(self):
pass
class Dog(Animal):
def makeSound(self):
print("汪汪汪")
class Cat(Animal):
def makeSound(self):
print("喵喵喵")
def animal_sound(animal):
animal.makeSound()
dog = Dog()
cat = Cat()
animal_sound(dog) # 输出:汪汪汪
animal_sound(cat) # 输出:喵喵喵
在这个例子中,Animal是一个抽象类,它定义了makeSound方法,但没有具体的实现。然后,Dog和Cat类分别继承自Animal类,并且分别实现了makeSound方法。当调用animal_sound函数时,传入不同的Animal对象,会根据对象的实际类型来调用相应的makeSound方法,这就展现了多态的特性。
《C语言程序设计》
- 问题1:条件编译中#igdef和#if的区别
- 问题1解决方案:条件编译中,#ifdef 和 #if 都是用来判断一个宏是否被定义的指令,但是它们有一些区别。
-
ifdef 指令用于判断一个宏是否被定义,如果该宏已经被定义,则编译下面的代码块,否则忽略该代码块。
例如:
#ifdef DEBUG // debug code #endif
-
if 指令用于判断一个表达式的值是否为真,如果表达式为真,则编译下面的代码块,否则忽略该代码块。
例如:
#if DEBUG == 1 // debug code #endif
总的来说,#ifdef 用于检查宏是否被定义,而 #if 用于检查表达式的值。
- 问题2:#ifdef和#if define区别
- 问题2解决方案:#ifdef 是一个预处理指令,用于检查一个宏是否已经被定义。如果该宏已经被定义,则编译下面的代码块,否则忽略该代码块。
示例:
#ifdef DEBUG
// debug code
#endif
上面的代码会检查宏 DEBUG 是否已经被定义,如果已经定义,则编译 debug code,否则忽略。
而 #if defined 是用来检查一个宏是否已经被定义,其用法为:
#if defined(DEBUG)
// debug code
#endif
这两种方式的效果是一样的,都是用来检查宏是否被定义,只是语法上稍有不同。通常情况下,两者可以互换使用。
基于AI的学习
代码调试中的问题和解决过程
- 问题1:梯形法则是什么
- 问题1解决方案:梯形法则(Trapezoidal Rule)是数值积分中的一种方法,用于计算函数在给定区间上的定积分。其基本思想是将积分区间分成若干个小区间,然后在每个小区间上用梯形面积来近似代替曲线下的面积,最终将这些梯形面积加起来即可得到近似的积分值。
具体来说,梯形法则将积分区间 $[a,b]$ 分成 $n$ 个小区间,每个小区间的长度为 $h=(b-a)/n$,则积分近似值为:
$$
\int_a^b f(x)dx \approx \frac{h}{2} \left[f(a) + 2f(a+h) + 2f(a+2h) + \cdots + 2f(a+(n-1)h) + f(b)\right]
$$
其中,$f(x)$ 是需要积分的函数。可以看到,梯形法则的本质就是将积分区间分成若干个小区间,然后在每个小区间上用梯形面积来近似代替曲线下的面积,最终将这些梯形面积加起来即可得到近似的积分值。
上周考试错题总结
- 错题1及原因,理解情况
单选题
1 分
简单
Which level provides a view that deals with the underlying data structure used to manage the data?
A.
Implementation level
B.
Logical level
C.
Array level
D.
Linked level
E.
Application level
正确答案是A,实现层是用来提供处理用于管理数据的底层数据结构的视图
- 错题2及原因,理解情况
Which of the following is made up of a set of nodes called vertices and a set of lines called edges (or arcs)?
A.
List
B.
Stack
C.
Graph
D.
Binary search tree
E.
Linked structure
正确答案是C,图是由一组称为顶点的节点和一组称为边的直线组成的 - 错题3及原因,理解情况
判断题
1 分
简单
Parameters are the identifiers listed in parentheses beside a subprogram name.
正确答案: 正确,参数是子程序名称旁边的括号中列出的标识符
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
-
计划学习时间:7小时
-
实际学习时间:10小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论》
- ...