2024-2025-1 20241311 《计算机基础与程序设计》第5周学习总结
学期 2024-2025-1 学号 20241311 《计算机基础与程序设计》第5周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(2024-2025-1计算机基础与程序设计第五周作业) |
这个作业的目标 | <写上具体方面> |
作业正文 | ... 本博客链接 |
教材学习内容总结
"C语言程序设计第五版"第四章学习内容总结
算术运算、关系运算和逻辑运算
算术运算是数学中最基础的加减乘除求余等操作;关系运算是求两个或多个变量或表达式之间的关系;逻辑运算是将多个变量或表达式链接起来的逻辑关系。在C语言中,将数值为1作为真,为0作为假,系统将值为非0的变量或表达式作为真,否则假。
条件语句
条件语句是C语言中用于实现分支结构的关键字,主要包括if
、else if
和else
。通过这些关键字,可以根据不同的条件执行不同的代码块。例如,if (a == b)
表示如果a
等于b
,则执行if
后面的代码块。
循环语句
循环语句是C语言中用于实现循环结构的关键字,主要包括while
、do-while
和for
。通过这些关键字,可以重复执行一段代码,直到满足特定的条件为止。例如,while (a < b)
表示只要a
小于b
,就重复执行while
后面的代码块。
数组
数组是一种存储相同类型数据元素的集合。在C语言中,数组的声明方式为type arrayName[arraySize];
,其中type
是数组元素的数据类型,arrayName
是数组的名称,arraySize
是数组的大小。例如,int numbers[5];
声明了一个包含5个整数的数组。
函数
函数是一段具有特定功能的代码块,可以在程序的任何地方调用。在C语言中,函数的声明方式为returnType functionName(parameters);
,其中returnType
是函数返回值的数据类型,functionName
是函数的名称,parameters
是函数的参数列表。例如,int add(int a, int b);
声明了一个返回整数类型的函数add
,它接受两个整数参数。
结论
第四章的内容主要围绕着C语言的基本语法和控制结构展开,包括算术运算、关系运算、逻辑运算、条件语句、循环语句、数组和函数等。掌握这些基础知识对于理解和编写C语言程序至关重要。
计算机科学概论第七版第四章学习总结
在《计算机科学概论第七版》的第四章中,主要围绕“门和电路”这一核心主题展开,深入探讨了计算机底层如何通过控制电流来实现逻辑运算和数据处理。以下是对该章节学习内容的详细总结:
一、门的概念与类型
- 定义:门是对电信号执行基本运算的设备,它接受一个或多个输入信号,并生成一个输出信号。这些门是构成数字电路的基本单元。
- 类型:章节中详细介绍了六种基本类型的门,包括非门(NOT)、与门(AND)、或门(OR)、异或门(XOR)、与非门(NAND)、或非门(NOR)。每种门都有其特定的逻辑运算规则,这些规则是理解电路逻辑功能的基础。
二、布尔代数与逻辑运算
- 布尔代数:表示二值逻辑函数的数学表示法,是理解和设计数字电路的重要工具。它定义了基本的逻辑运算符(如AND、OR、NOT)以及它们之间的运算规则。
- 逻辑运算:通过布尔代数,可以描述门电路中的逻辑运算。例如,与门实现逻辑与运算,或门实现逻辑或运算,非门实现逻辑非运算。这些逻辑运算规则是电路设计和分析的基础。
三、电路与逻辑框图
- 电路:由互相关联的门组合而成,用于实现特定的逻辑函数。电路可以分为组合电路和时序电路两种类型。组合电路的输出仅由当前输入决定,而时序电路的输出则与输入和电路当前状态都有关。
- 逻辑框图:电路的图形化表示方法,每种类型的门在逻辑框图中都有其专用的符号。通过逻辑框图,可以直观地了解电路的结构和逻辑功能。
四、真值表与电路等价
- 真值表:列出了所有可能的输入值和对应的输出值的表。真值表是理解和验证电路逻辑功能的重要工具。通过真值表,可以直观地看到不同输入组合下电路的输出结果。
- 电路等价:如果两个电路对于所有可能的输入值组合都产生完全相同的输出,则称这两个电路等价。电路等价现象证明了布尔代数的一个重要属性——分配律。
五、加法器与多路复用器
- 加法器:对二进制值执行加法运算的电路。章节中介绍了半加器和全加器的概念及其工作原理。半加器用于计算两个一位数的和及进位,而全加器则考虑了进位输入,用于计算两个多位数的和。
- 多路复用器:使用输入控制信号决定用哪条输入数据线发送输出信号的电路。多路复用器在数据传输和信号处理中具有广泛应用。
六、集成电路与CPU
- 集成电路:又称芯片,是嵌入了多个门的硅片。集成电路的发展极大地提高了电路的集成度和性能。CPU(中央处理器)就是一种高度集成的电路,它由算术/逻辑单元、控制单元和寄存器等多个部件组成,是计算机的核心部件。
七、学习心得与体会
通过学习本章内容,我深刻理解了计算机底层如何通过控制电流来实现逻辑运算和数据处理。门电路和布尔代数作为数字电路的基础,对于理解计算机的工作原理至关重要。同时,我也掌握了电路分析的基本方法,包括逻辑框图、真值表和电路等价等概念。这些知识不仅有助于我深入理解计算机科学的基础理论,也为我将来从事相关领域的研究和工作打下了坚实的基础。
教材学习中的问题和解决过程(先问 AI)
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:算术运算、关系运算和逻辑运算在C语言中的优先级是如何定义的?
- 问题1解决方案:在C语言中,算术运算、关系运算和逻辑运算的优先级是根据C语言标准严格定义的,这些优先级决定了在一个复合表达式中不同运算符的计算顺序。优先级高的运算符会先于优先级低的运算符进行计算。以下是对这三种运算优先级的具体说明:
-
算术运算:
- 算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)等。
- 在C语言中,乘法、除法和取模运算符的优先级高于加法和减法运算符。这意味着在表达式中,先进行乘除运算,再进行加减运算。
- 同一优先级的算术运算符按照从左到右的顺序进行计算(除非使用括号改变运算顺序)。
-
关系运算:
- 关系运算符用于比较两个表达式的值,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等。
- 关系运算符的优先级低于算术运算符但高于逻辑运算符。这意味着在表达式中,先进行算术运算,再进行关系比较。
- 关系运算的结果是一个布尔值(在C语言中通常表示为0或1,其中0表示假,非0表示真)。
-
逻辑运算:
- 逻辑运算符包括逻辑非(!)、逻辑与(&&)和逻辑或(||)。
- 逻辑非运算符的优先级高于逻辑与和逻辑或运算符。这意味着在表达式中,先进行逻辑非运算,再进行逻辑与或逻辑或运算。
- 逻辑与运算符的优先级高于逻辑或运算符。这意味着在表达式中,先进行逻辑与运算,再进行逻辑或运算。
- 逻辑运算的结果同样是一个布尔值。
总结来说,C语言中算术运算的优先级最高,关系运算次之,逻辑运算最低。这种优先级顺序确保了表达式按照预期的数学和逻辑规则进行计算。需要注意的是,当表达式中包含多个运算符时,可以使用括号来显式指定运算顺序,这有助于编写更清晰、更易于理解的代码。
此外,还有一些特殊的运算符(如赋值运算符、逗号运算符等)具有不同的优先级和结合性,这些运算符的优先级和结合性也遵循C语言标准的规定。在实际编程中,了解和掌握运算符的优先级和结合性是非常重要的,它有助于编写出正确且高效的代码。
- 问题2:在C语言中,如何使用if语句和else语句来构建选择结构?
- 问题2解决方案:在C语言中,
if
语句和else
语句被用于构建选择结构,这种结构允许程序根据条件的真假来执行不同的代码块。以下是使用if
和else
语句构建选择结构的基本方法和示例:
基本语法
-
if语句:
if (condition) { // 当condition为真(非零)时执行的代码 }
-
if-else语句:
if (condition) { // 当condition为真时执行的代码 } else { // 当condition为假(零)时执行的代码 }
-
if-else if-else语句:
if (condition1) { // 当condition1为真时执行的代码 } else if (condition2) { // 当condition2为真,且condition1为假时执行的代码 } else { // 当condition1和condition2都为假时执行的代码 }
示例
以下是一个简单的示例,展示了如何使用if-else
语句来根据一个整数的值执行不同的代码块:
#include <stdio.h>
int main() {
int number;
printf("请输入一个整数:");
scanf("%d", &number);
if (number > 0) {
printf("您输入的数字是正数。\n");
} else if (number < 0) {
printf("您输入的数字是负数。\n");
} else {
printf("您输入的数字是零。\n");
}
return 0;
}
在这个示例中,程序首先提示用户输入一个整数,并使用scanf
函数读取用户的输入。然后,程序使用if-else if-else
结构来判断输入的数字是正数、负数还是零,并根据判断结果输出相应的消息。
注意事项
- 在
if
和else
语句中,条件表达式(如condition
)可以是任何能够计算为布尔值的表达式。在C语言中,布尔值通常表示为整数,其中0表示假,非0表示真。 else
和else if
子句是可选的。如果只需要在条件为真时执行代码,可以只使用if
语句;如果需要在条件为假时执行不同的代码,可以添加else
语句;如果需要处理多个条件,可以使用else if
语句来扩展选择结构。- 使用花括号
{}
来包围if
、else if
和else
子句中的代码块是良好的编程习惯,即使代码块中只有一条语句也是如此。这有助于保持代码的清晰性和可读性,并防止在添加新代码时出错。 - ...
基于AI的学习
我正在学习c语言程序设计中函数printf()的一般格式知识点请你以苏格拉底的方式对我进行提问一次一个问题·
Kimi(moonshot-v1-8k)
很好,让我们开始这个探索之旅。我的第一个问题是:
你能否告诉我,printf()函数在C语言中的主要目的是什么?
输出字符
Kimi(moonshot-v1-8k)
接近了,但printf()函数的能力比仅仅输出字符要广泛一些。它确实可以输出字符,但它的主要目的其实是格式化输出。那么,我的下一个问题:
你能描述一下printf()函数的一般格式是什么样的吗?
printf(格式控制字符串,输出值参数表)
Kimi(moonshot-v1-8k)
非常好,你已经抓住了printf()函数的基本结构。格式控制字符串和输出值参数表共同工作来决定输出的格式和内容。
现在,让我们更深入一些。我的下一个问题:
格式控制字符串中的格式说明符是如何指定输出的类型和格式的?你能给出一个具体的例子吗?
格式转化说明由%开始,并以转换字符结束,用于指定各输出值参数的输出格式
Kimi(moonshot-v1-8k)
正是如此,你已经很好地理解了格式说明符的基本构成。格式说明符以%开始,后跟一个或多个指定输出格式的字符,最后以一个转换字符结束,这个转换字符确定了参数的类型。
我的下一个问题:
在格式控制字符串中,除了格式说明符之外,还有哪些内容可以包含在其中?
一些其他想输出的字符
Kimi(moonshot-v1-8k)
正确,格式控制字符串中除了格式说明符之外,还可以包含其他你希望输出的字符,比如文字、空格、标点符号等。这些字符会按照原样输出,而格式说明符则会被替换为相应的变量值。
我的下一个问题:
如果格式控制字符串中既包含普通字符,也包含格式说明符,那么这些内容是如何协同工作的?
分别被识别显示
Kimi(moonshot-v1-8k)
是的,printf函数会识别格式控制字符串中的普通字符和格式说明符。普通字符会被直接输出,而格式说明符会指示printf函数按照指定的格式输出相应的参数值。
我的下一个问题:
当格式控制字符串包含多个格式说明符时,printf函数是如何匹配这些说明符与提供的参数的?
从左到右一一对应
Kimi(moonshot-v1-8k)
完全正确。在printf()函数中,格式说明符会从左到右与参数列表中的参数一一对应。第一个格式说明符对应第一个参数,第二个格式说明符对应第二个参数,以此类推。
我的下一个问题:
如果格式控制字符串中只有一个格式说明符,而参数列表中有多个参数,那么printf()函数会如何处理?
只输出一个参数
Kimi(moonshot-v1-8k)
实际上,如果格式控制字符串中只有一个格式说明符,printf()函数只会使用参数列表中的第一个参数,并忽略其余的参数。这是因为格式说明符指定了要输出的数据类型和格式,而printf()函数会按照这个说明符来处理相应的参数。
我的下一个问题:
如果格式控制字符串中有多个格式说明符,但参数列表中的参数不足以匹配这些说明符,会发生什么情况?
报错无法运行
Kimi(moonshot-v1-8k)
不完全是这样。在C语言中,如果格式控制字符串中有多个格式说明符,但提供的参数不足以匹配这些说明符,printf()函数不会报错或无法运行。相反,它会忽略那些没有匹配的格式说明符,并继续执行程序。
但是,这种情况下,未匹配的格式说明符会导致未定义行为(undefined behavior),因为它们没有对应的参数来填充。这可能会导致输出结果不正确或程序的其他部分出现问题。
代码调试中的问题和解决过程
- 问题1:给字符型变量赋值的时候出现错误
- 问题1解决方案:赋值时在变量后加[]
- 问题2:按位运算在c语言中的表示
- 问题2解决方案:按位或|按位与&按位异或^
- ...
代码托管
上周考试错题总结
无
其他(感悟、思考等,可选)
勤学苦练,多写多练
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 1000/1000 | 3/7 | 22/60 | |
第四周 | 1300/1300 | 2/9 | 30/90 | |
第五周 | 1300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:30小时
-
实际学习时间:30小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论(第七版)》
- ...