学期(2024-2025-1) 学号(20241311) 《计算机基础与程序设计》第2周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(如2024-2025-1计算机基础与程序设计第二周作业) |
这个作业的目标 | <写上具体方面> |
作业正文 | ... 本博客链接 |
教材学习内容总结
一、计算系统分层相关
在这一章中,对计算系统分层有了详细的描述。计算系统分层就像洋葱一样,从内向外依次包括信息层、硬件层、程序设计层、操作系统层、应用层、通信层等。这一结构有助于我们理解计算机系统的构成和各部分之间的关系,就如同构建大楼需要不同的结构层一样,计算机系统的各层共同协作来实现各种功能。这一概念的理解也有助于我们在后续学习中更好地把握计算机系统的运行原理等知识。 2
二、计算机硬件和软件的历史
早期历史
法国数学家Blaise Pascal制造了齿轮驱动机械机器,德国数学家Gottfried Wilhelm Von Leibniz制造了Leibniz机,还有Jacquard织布机等,这些都是早期计算工具的探索。英国的Charles Babbage发明的analytical engine分析机,而Ada.Lovelace伯爵夫人(第一名程序员)改进了分析机,这些成果为计算机的发展奠定了早期基础。此外,Alan M.Turing提出的图灵机也是计算机领域的重要概念,图灵奖也是计算机领域的最高奖。 2
各代计算机硬件特点
第一代:以vacuum tube真空管(存储信息)、磁带、穿孔卡片、行式打印机、磁带驱动器为主要特征。
第二代:出现了transistor晶体管(由John Bardeen,Walter H.Brattain,William B.Shockley发明),同时有即时存取存储器和磁盘。
第三代:IC集成电路的出现,摩尔定律(Gordon Moore提出)开始发挥影响力,并且有了终端(带有键盘和屏幕的输入/输出设备)。
第四代:大规模集成化integrated circuit、工作站、RISC、UNIX操作系统等是这一代的主要特点。同时还了解到并行计算、连网以及云计算等概念。 2
三、计算机用户转换的角色
计算机的发展过程中,计算机用户的角色也在不断发生转换。从早期仅能使用特定功能,到如今能够在更复杂多样的计算机系统中进行多种操作,用户角色从单纯的使用者逐渐向更多元化的角色转变,例如部分用户还能参与到软件开发、系统维护等工作中,但关于这部分在第一章可能只是做了概念性的引入,需要在后续学习中深入理解这种角色转换背后的技术推动因素以及对计算机科学发展的影响等。
一、《C语言程序设计(第五版)》第一章学习总结
(一)主要内容概括
- 计算机程序相关概念
- 程序是一组计算机所能识别和执行的指令,指令是程序的基本单位。计算机的一切操作由程序控制,它是计算机系统最基本的概念之一。 [1]
- 计算机语言
- 计算机语言分为低级语言(包括汇编语言和机器语言)和高级语言。
- 机器语言是计算机能直接识别和接受的二进制代码,工作方式为二进制,只能接受0和1组成的指令。
- 汇编语言是用英文字母和数字表示指令的符号语言,计算机不能直接识别,需要汇编程序将其转换为机器指令,一条符号语言指令一般对应一条机器指令。
- 高级语言则是用更接近自然语言和数学语言的方式编写程序。 [2]
- C语言的发展及其特点(部分涉及第一章内容)
- C语言有着广泛的应用领域,其发展历程反映了对高效、灵活编程需求的不断演进。
- 最简单的C语言程序
- 一个C语言程序必须有主函数main,主函数一般为int型,表示函数返回的是int型数据。例如:
#include <stdio.h>
int main()
{
printf("This is a C program.\n");
return 0;
}
- 这里
#include <stdio.h>
是编译预处理指令,int main()
定义主函数,printf
用于输出信息,return 0
表示函数执行完毕返回值为0。 [1]
- 运行C程序的步骤与方法(部分在第一章可能涉及概念性的介绍)
- 通常包括编写代码、编译、链接、运行等步骤,不过第一章可能主要是概念性提及,后续章节会详细讲解。
- 程序设计的任务(在第一章可能初步介绍)
- 程序设计不仅仅是编写代码,还包括分析问题、设计算法、编写程序、调试程序等一系列任务。
(二)重点知识理解
- 主函数的重要性
- 主函数是C语言程序的入口点,整个程序从主函数开始执行。理解主函数的结构(如函数定义、函数体的开始和结束标志)以及它的返回值类型是基础中的基础。
- 编译预处理指令
- 像
#include <stdio.h>
这样的编译预处理指令,虽然简单,但却是连接C语言标准输入输出库的关键,没有它就无法使用printf
等标准输入输出函数。
- 像
- 基本的输入输出函数概念
- 在第一章可能初步接触到
printf
函数,了解到它可以用于输出指定的信息,这是C语言实现与用户交互(输出结果方面)的重要方式。
- 在第一章可能初步接触到
(三)学习中的难点与解决方法
- 概念理解方面
- 难点:对于计算机程序、计算机语言的分类及其特点等概念,可能存在混淆。
- 解决方法:通过对比不同语言的示例代码,如机器语言的二进制表示、汇编语言的符号表示和C语言的高级语言表示,来加深对不同计算机语言特点的理解。同时,反复阅读教材中关于概念的阐述,结合实际生活中的计算机操作(如软件运行是程序控制的体现)来强化对程序概念的理解。
- C语言程序结构方面
- 难点:刚接触C语言时,可能对主函数的结构、编译预处理指令的作用理解不深。
- 解决方法:手动编写简单的C语言程序,如只包含一个主函数输出简单信息的程序,在编写过程中仔细体会主函数的各个组成部分的作用。对于编译预处理指令,可以查阅更多资料,了解如果缺少该指令会导致的编译错误情况,从而加深理解。
教材学习中的问题和解决过程(先问 AI)
Q:程序和软件有何不同?
A:程序与软件的不同
一、概念定义
- 程序:程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。它以某些程序设计语言编写,运行于某种目标结构体系上,为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据。在低级程序语言如机器语言、汇编语言中,程序是一组有序的指令序列及有关的数据;在高级程序语言中,程序通常是一组说明和语句。程序=数据结构 + 算法。
- 软件:软件是一系列按照特定顺序组织的计算机数据和指令的集合(软件 = 程序 + 文档)。软件一般被划分为系统软件、应用软件和介于这两者之间的中间件。软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。软件是用户和机器之间的接口,用户主要通过软件与电脑交流,它可以拓宽计算机系统的应用领域,放大硬件的功能。
二、组成部分
- 程序:主要是可被计算机识别和执行的指令代码,相对单纯地聚焦于执行任务的指令逻辑部分。例如,一个简单的计算两个数之和的程序,就是由实现加法运算的指令代码组成。
- 软件:除了包含程序部分,还涵盖了开发、使用和维护所需要的所有文档。以办公软件Office为例,它包含多个可运行程序,同时还有如用户手册、帮助文档等各类文档,这些都是软件的组成部分,而不仅仅是程序代码。
三、范围大小
- 程序:程序是软件的一个组成部分(子集),其范围小于软件。例如一个软件可能包含多个程序协同工作来实现复杂功能,像一款图像编辑软件可能有图像加载程序、图像处理程序、图像保存程序等多个程序组成,单独一个程序只是其中一部分功能的实现。
- 软件:软件是一个更广泛的概念,是程序以及相关文档等的集合体,涵盖了从系统软件(如操作系统)到应用软件(如办公软件、游戏软件等)等多种类型,还包括介于系统软件和应用软件之间的中间件等,是一个相对宏观的概念。
四、用户交互层面
- 程序:程序更侧重于底层的指令执行,很多时候用户可能不会直接接触到程序本身,特别是对于系统级程序。例如,操作系统中的某些驱动程序,用户在正常使用计算机时不会直接与之交互,而是通过软件层面间接使用。
- 软件:软件通常具有良好的用户界面,是为了方便用户完成特定功能而设计的。如各种手机APP,它们以直观的界面呈现给用户,用户可以方便地操作软件来满足自己的需求,如社交、娱乐、办公等。
Q:机器语言与程序语言有何不同?
A:一、机器语言
- 定义与本质
- 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,这种指令集称为机器码(machine code),是电脑的CPU可直接解读的数据。例如,一条指令就是一组有意义的二进制代码,像操作码字段和地址码字段,操作码(Operation Code,OP)用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。在机器语言中,所有的指令都是由0和1组成的二进制代码。这是计算机最基础的语言,计算机的实质就是对这些二进制代码进行运算,最终呈现出各种功能。机器语言具有灵活、直接执行和速度快等特点。不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。编写机器语言程序时,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义,并且手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态,这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。不过,当研制计算机的新型号时,尽管指令系统可以有较大的扩充,但仍保留了原来的全部指令,使软件向上兼容,即旧机型上的软件不加修改即可在新机器上运行。
- 举例
- 假设某计算机的一个加法指令在机器语言中的二进制表示可能是“00000101”(这里只是简单举例,实际情况因计算机型号而异),这串二进制代码就代表了CPU要执行加法操作的指令。
二、程序语言
- 概念范围
- 程序语言是一个更广泛的概念,它包含了机器语言,还包括汇编语言和高级语言等。程序语言是用于编写计算机程序的人造语言,目的是让计算机执行特定的任务。
- 不同类型程序语言的特点
- 汇编语言
- 定义与转换:汇编语言是一种用助记符表示的仍然面向机器的计算机语言,亦称符号语言。它是为了克服机器语言难读、难编、难记和易出错的缺点而产生的。人们用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码(如用ADD表示运算符号“+”的机器代码)。但是,计算机不能象用机器语言编写的程序一样直接识别和执行汇编语言编写的程序,必须通过预先放入计算机的“汇编程序”的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称源程序,运行时汇编程序要将源程序翻译成目标程序。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。不过,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程,并且基本保留了机器语言的灵活性,使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。例如,程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器指令,由计算机最终执行。
- 高级语言
- 特点与优势:高级语言是为了让编程更加方便、高效,尤其是对于非计算机专业人员。高级语言的语法和语义更接近人类的自然语言和数学表达式,例如Python、Java等。高级语言编写的程序不需要像汇编语言那样对硬件结构及其工作原理十分熟悉,它具有较高的通用性,可以在不同类型的计算机系统上运行(在满足相应的运行环境要求下)。编写程序时不需要处理底层的硬件细节,大大提高了编程效率。例如,在Python中,要实现两个数相加,只需要写“a + b”这样简单的表达式,而不需要像机器语言或汇编语言那样进行复杂的操作码和地址码的编写。高级语言的程序也需要通过编译器或者解释器转换为机器语言才能被计算机执行。在编译方式下,机器上运行的是与源程序等价的目标程序,编译程序和源程序都不参加目标程序的执行过程;而在解释方式下,解释程序和源程序要参与到程序的运行过程中,运行程序的控制权在解释程序。
- 汇编语言
基于AI的学习
我正在学习计算系统的知识点请你以苏格拉底的方式对我进行提问一次一个问题
Kimi(moonshot-v1-8k)
当然,让我们开始苏格拉底式的提问:
关于计算机系统的基本组成:你能描述一下计算机系统是由哪些基本部件组成的吗?
(等待你的回答后,我会继续提出下一个问题。)
计算机硬件和计算机软件
Kimi(moonshot-v1-8k)
很好,你已经提到了计算机硬件和计算机软件。那么,
关于计算机硬件:你能解释一下计算机硬件具体包括哪些部分,并且它们各自承担着什么样的功能吗?
(等待你的回答后,我会继续提出下一个问题。)
门和电路
Kimi(moonshot-v1-8k)
非常好,你已经提到了门和电路。那么,
关于门电路:在数字逻辑中,"门"通常指的是逻辑门。你能描述一下什么是逻辑门,以及它在计算机系统中扮演的角色吗?
(等待你的回答后,我会继续提出下一个问题。)
不知道你能回答一下吗
Kimi(moonshot-v1-8k)
当然可以。在计算机科学中,逻辑门(Logic Gates)是构建更复杂电路的基本构件。以下是逻辑门的一些基础知识:
定义:逻辑门是一种实现逻辑运算的电子设备,它接收一个或多个二进制输入信号,并根据预设的逻辑规则产生一个输出信号。
基本类型:有几种基本的逻辑门,包括:
与门(AND Gate):只有当所有输入都为1时,输出才为1。
或门(OR Gate):只要至少有一个输入为1,输出就为1。
非门(NOT Gate):反转输入信号,如果输入是1,输出就是0;如果输入是0,输出就是1。
异或门(XOR Gate):当输入的二进制数相异时,输出为1;相同时输出为0。
功能:逻辑门用于执行基本的逻辑运算,是构成复杂数字电路的基础。例如,它们可以用来构建算术逻辑单元(ALU),这是计算机处理器中执行算术和逻辑运算的部分。
应用:在计算机系统中,逻辑门用于构建各种电路,如内存、处理器、输入/输出接口等。
集成电路:随着技术的发展,大量的逻辑门可以集成到一个小型的芯片上,形成集成电路。这极大地缩小了电子设备的体积,并提高了计算速度。
我正在学习计算机的历史的知识点请你以苏格拉底的方式对我进行提问,一次一个问题
Kimi(moonshot-v1-8k)
当然,让我们开始探索计算机历史的学习。
早期计算工具:你能描述一下在电子计算机出现之前,人们是如何进行复杂计算的吗?
(等待你的回答后,我会继续提出下一个问题。)
用算盘等机械工具进行计算
Kimi(moonshot-v1-8k)
网络异常,请检查网络。
用算盘等机械工具进行计算
Kimi(moonshot-v1-8k)
请求参数格式错误
用算盘等机械工具进行计算
Kimi(moonshot-v1-8k)
很好,你提到了算盘和其他机械工具。那么,
算盘的历史:你能描述一下算盘的起源和它在计算历史上的重要性吗?
(等待你的回答后,我会继续提出下一个问题。)
不能
Kimi(moonshot-v1-8k)
没关系,我们来探讨一下。
算盘的起源:算盘最早是在哪个文明中出现的,它的出现大约在什么时期?
(等待你的回答后,我会继续提出下一个问题。)
华夏文明,具体什么时期我不清楚
Kimi(moonshot-v1-8k)
非常好,你已经提到了华夏文明。那么,
华夏文明中的算盘:你能描述一下算盘在华夏文明中是如何使用的,它在数学和商业中扮演了什么角色?
(等待你的回答后,我会继续提出下一个问题。)
请你回答一下
Kimi(moonshot-v1-8k)
当然,关于算盘在华夏文明中的作用:
起源:算盘最早起源于中国,大约在公元前200年左右,汉朝时期就已经有了算盘的记载。
使用方式:算盘是一种手动计算工具,由一个矩形框架和一系列可移动的珠子组成。使用者通过移动珠子来进行加减乘除等基本运算。
数学和商业中的作用:
数学:算盘使得复杂的数学运算变得更加简便和快速,提高了计算的效率。
商业:在商业交易中,算盘被广泛用于计算账目、价格和利润等,是商人和会计人员的重要工具。
文化影响:算盘的使用促进了数学教育的发展,并影响了东亚地区的计算方法。
技术演进:随着时间的推移,算盘的设计和使用方式也在不断改进,以适应更复杂的计算需求。
算盘是计算历史上的一个重要里程碑,它展示了人类如何通过创新来提高计算效率。如果你对算盘或其他计算工具有更多的问题,欢迎继续提问。
继续提问
Kimi(moonshot-v1-8k)
当然,让我们继续探讨计算机历史。
早期机械计算机:在算盘之后,你能描述一下早期的机械计算机是如何工作的吗?
(等待你的回答后,我会继续提出下一个问题。)
靠齿轮驱动
Kimi(moonshot-v1-8k)
非常好,你提到了齿轮驱动。那么,
查尔斯·巴贝奇:你能描述一下查尔斯·巴贝奇和他的差分机或分析机吗?他的工作对后来的计算机发展有何影响?
(等待你的回答后,我会继续提出下一个问题。)
设计太过复杂,当时的技术水平不能建造。第一次出现内存,使中间值不必再重新输入
Kimi(moonshot-v1-8k)
你的回答非常准确。查尔斯·巴贝奇的工作确实是计算机历史上的重要一步。
继电器和电子管:在巴贝奇的机械计算机之后,你能描述一下继电器和电子管是如何被用于计算设备的吗?
(等待你的回答后,我会继续提出下一个问题。)
不知道请你回答一下
Kimi(moonshot-v1-8k)
当然可以。
继电器:继电器是一种电子控制器件,它使用电磁原理来实现对电路的自动控制。在早期的计算机中,继电器被用来作为开关,控制电流的通断,从而实现逻辑运算。
电子管:电子管,也称为真空管,是一种在玻璃容器中通过加热阴极发射电子,并利用电场控制电子流向阳极的电子器件。在20世纪初到中期,电子管是构建电子计算机的主要组件之一,因为它们可以用来构建复杂的逻辑电路和存储设备。
内存的出现:巴贝奇在他的分析机设计中提出了“存储程序”的概念,这是现代计算机内存概念的雏形。内存使得计算机能够存储中间计算结果,而不必每次都重新输入数据,大大提高了计算效率。
继电器和电子管的使用标志着从机械计算向电子计算的转变,为现代计算机的发展奠定了基础。
三个原则:
- 切勿原封不动地接受生成式人工智能工具的输出;确保对其进行评估、完善和修改(或提示),以适应您的目标。
- 切勿将任何个人数据(自己、同学、老师等)或版权材料纳入到你的提示词中。这个可以说是保护个人隐私的最起码的举措。
- 所有人工智能生成工具都容易产生幻觉,因此会生成不准确或误导性的信息,要学会甄别信息真假
选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容
“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
核心是要求GPT:“请你以苏格拉底的方式对我进行提问”
然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”
GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
代码调试中的问题和解决过程
无
代码托管
无
上周考试错题总结
无
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论(第七版)》
- ...