学期(2024-2025-1) 学号(20241311) 《计算机基础与程序设计》第3周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(2024-2025-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)) |
---|---|
这个作业要求在哪里 | <作业要求的链接>((https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276)) |
这个作业的目标 | <写上具体方面> |
|作业正文|... 本博客链接 |
教材学习内容总结
《C语言程序设计(第五版)第二章学习总结》
一、数据类型相关
(一)基本类型
- 整型:可用来表示整数,包括正整数、负整数和零。在C语言中,整型常量可以用十进制、八进制和十六进制表示。例如十进制的
10
,八进制的012
(在C语言中以0
开头表示八进制数),十六进制的0xA
(以0x
或0X
开头表示十六进制数)。整型变量则用于保存整数的值。 - 字符型:字符常量指单个字符,是用一对单引号括起的字符来表示,例如
'a'
。字符型变量的值是字符常量,即单引号引起来的单个字符。 - 浮点型(实型):实型常量即实数,又称为浮点数,用于表示带有小数部分的数值。
(二)构造类型
- 数组类型:是一组相同类型元素的集合。例如定义一个整型数组
int arr[5];
,它可以用来存储5个整数类型的数据。 - 结构体类型:可以将不同类型的数据组合在一起。例如定义一个表示学生信息的结构体:
struct student {
char name[20];
int age;
float score;
};
- 共用体类型:允许不同类型的数据共享同一段内存空间。
- 枚举类型:是一种用户自定义的数据类型,用于定义一组有限的命名常量。例如:
enum color {
RED,
GREEN,
BLUE
};
(三)指针类型
指针是C语言中一种特殊且具有重要作用的数据类型。它存储的是变量的地址,可以通过指针间接访问变量的值。例如int *p;
定义了一个指向整型变量的指针p
。
二、常量相关
(一)直接常量
- 整型常量:如上述提到的各种表示形式的整数。
- 实型常量:像
3.14
、-0.5
等浮点数。 - 字符型常量:单个字符,如
'A'
、'9'
等。 - 字符串常量:由一对双引号括起来的零个或多个字符序列,例如
"Hello"
、""
(空字符串)。
(二)符号常量
可以用一个标识符来表示一个常量,这就是符号常量。使用符号常量有很多好处: - 增加程序的可读性:例如
#define PI 3.14
,在程序中使用PI
比直接使用3.14
更能清晰地表达该常量的意义是圆周率。 - 提高程序的可维护性:如果需要修改常量的值,只需要在定义符号常量的地方修改即可,而不需要在程序中所有使用该常量的地方修改。
- 简化程序代码:避免在程序中多次书写复杂的常量值。
- 方便数组的定义:例如
#define MAX_SIZE 100
,定义数组int arr[MAX_SIZE];
就很方便。
三、变量相关
(一)变量的定义
要使用变量,首先需要定义变量的类型。例如int num;
定义了一个整型变量num
,char ch;
定义了一个字符型变量ch
等。变量定义的目的是告诉编译器为变量分配合适的内存空间。
(二)变量的初始化
变量可以在定义的同时进行初始化,即将一个初始值赋给变量。例如int num = 10;
在定义num
这个整型变量的同时将其初始化为10
。
(三)变量的使用
定义和初始化后的变量就可以在程序中使用,例如参与各种运算、作为函数的参数传递等。
四、运算符和表达式相关
(一)赋值运算符和表达式
- 简单赋值运算符:
=
是最简单的赋值运算符,它的作用是将一个数值赋给一个变量。例如int a = 5;
。 - 复合赋值运算符:在简单赋值运算符前面加上算术运算符就构成复合赋值运算符,如
+=
、-=
、*=
、/=
和%=
等。例如a += 3;
等价于a = a + 3;
。赋值表达式是由赋值运算符将一个变量和一个表达式连接起来的式子所组成的,在C语言中,赋值语句属于表达式语句。
(二)算术运算符和算术表达式 - 基本的算术运算符:包括加(
+
)、减(-
)、乘(*
)、除(/
)和求余(%
)等运算。需要注意的是,整数除法可能会舍去小数部分。例如5 / 2
的结果是2
。 - 自增、自减运算符:
++
和--
是C语言中特殊的运算符。++
表示自增1,--
表示自减1。它们可以前置(如++i
)或后置(如i++
),前置和后置的区别在于表达式求值的顺序不同。 - 算术运算符的优先级和结合性:C语言规定了运算符的优先级和结合性,单目运算符是右结合的,双目算术运算符是左结合的。例如在表达式
2 + 3 * 4
中,先计算乘法3 * 4 = 12
,再计算加法2 + 12 = 14
。算术表达式是由算术运算符、运算对象和括号连接起来的式子,运算对象可以是常量、变量和函数等。
(三)逗号运算符与逗号表达式
C语言中逗号也是一种运算符,称为逗号运算符,其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式。例如(a = 3, b = 4, a + b)
,逗号表达式的值是最后一个表达式的值,在这里是7
。
计算机科学概论第七版第二章学习总结
一、主要学习内容
(一)二进制数值相关 - 了解到在计算机科学中数字具有极其重要的地位,计算机中的所有信息都是以二进制形式表示的。这是计算机信息存储和处理的基础,二进制的0和1可以组合表示各种数据,如字符、图像、声音等信息。通过与其他进制对比,能更深刻地理解二进制的特性和在计算机中的独特意义。
(二)记数系统相关知识 - 学习了各种进制之间的关系,如二进制、十进制、十六进制等。不同进制有着不同的运算逻辑,了解它们之间的转换规则等内容。例如,十进制转二进制可以通过除2取余的方法;二进制转十六进制可以每4位一组进行转换等,这些转换在计算机底层运算、数据表示等方面有着重要意义。
(三)计算系统分层 - 计算机系统像洋葱一样由许多层构成,第二章的学习有助于进一步理解内部的分层重点是让计算机运转。信息层是其中的一部分,与其他层如硬件层、程序设计层等相互配合,不同的层各自承担着不同的功能,共同构成了计算机系统的整体架构,这些分层结构有助于对计算机整体的运行机制有更清晰的认识。
二、学习收获
(一)知识理解方面
- 对信息表示的理解加深
- 明确了二进制在计算机信息表示中的核心地位,认识到计算机的所有操作都是基于二进制的0和1进行的。无论是简单的文本字符,还是复杂的多媒体数据,最终都转化为二进制进行存储和处理。这有助于理解计算机数据处理的底层逻辑,为后续学习数据结构、算法等知识奠定了基础。
- 进制转换能力提升
- 通过学习各种进制之间的关系和转换方法,能够熟练进行不同进制之间的转换操作。这在一些特定的计算机编程场景、网络协议解析以及对计算机底层数据的分析中具有重要意义,能够更好地理解计算机内部数据的流动和转换过程。
(二)对计算机系统整体认知方面
- 通过学习各种进制之间的关系和转换方法,能够熟练进行不同进制之间的转换操作。这在一些特定的计算机编程场景、网络协议解析以及对计算机底层数据的分析中具有重要意义,能够更好地理解计算机内部数据的流动和转换过程。
- 分层结构的清晰认识
- 进一步明晰了计算机系统分层结构中信息层的作用及其与其他层的关系。理解了信息层作为整个计算机系统的基础部分,如何与硬件层交互来实现数据的存储和读取,以及如何为程序设计层提供数据支持等。这种对分层结构的深入理解有助于从宏观上把握计算机系统的运行原理,为深入学习计算机的各个组成部分之间的协作机制提供了框架性的知识。
教材学习中的问题和解决过程(先问 AI)
q1:基本整型与无符号整型的区别
a1:对基本整型与无符号整型区别阐述的评价
内容完整性
- 涵盖多个方面:该阐述较为全面地涵盖了基本整型与无符号整型在定义、表示范围、存储方式、使用场景、运算特性以及溢出处理等多方面的区别,这有助于读者对这两种整型类型有系统的认识。
准确性 - 表示范围的描述准确:对于常见的基本整型(如
int
、short
、long
)和无符号整型(如unsigned int
、unsigned short
、unsigned long
)在不同字节占用情况下的表示范围描述准确,这是理解两种类型数据边界的关键信息。 - 存储方式解释合理:明确指出基本整型最高位用于表示符号,无符号整型所有位表示数值,准确地阐述了二者在存储上的本质区别。
实用性 - 使用场景举例恰当:给出的使用场景示例,如基本整型适用于温度、海拔高度(可正可负),无符号整型适用于计数器、数组索引(非负),能帮助读者更好地理解在实际编程中如何选择合适的数据类型。
可改进之处 - 深度分析运算特性:在运算特性方面,可以进一步深入分析一些特殊运算情况或者给出具体的示例代码来更好地说明二者在运算结果上的区别,例如在除法运算中对于负数的处理以及无符号整型减法溢出“回绕”的具体示例等。
- 溢出处理的详细解释:对于溢出处理部分,除了描述结果的变化,还可以增加一些关于如何检测和避免溢出的建议或者解释在不同编程语言中溢出处理的一些特殊情况等内容。
q2:枚举类型是什么
a2:一、枚举类型概述
枚举类型是一种很有用的数据类型。在许多编程语言中,它允许用户定义一组有限的命名常量,就像您给出的C语言中的color
枚举类型示例一样。
(一)枚举类型的定义意义
- 提高代码可读性:使用枚举类型中的命名常量,如
RED
、GREEN
、BLUE
,可以使代码的含义更加清晰。相比于使用一些无意义的数字或者字符串来表示状态或者值,枚举常量能够直观地表达其代表的意义。例如,如果有一个函数用于设置图形的颜色,使用set_color(RED)
就比使用set_color(1)
更能让人理解函数的作用。 - 增强代码可维护性:当需要修改某个常量所代表的实际值时,如果使用的是枚举类型,只需要在枚举定义处修改即可。而如果是使用分散在代码各处的数字或者字符串常量,修改起来就容易遗漏并且难以查找所有需要修改的地方。
(二)不同编程语言中的枚举类型
- C语言中的枚举类型
- 在C语言中,枚举类型是一种构造数据类型。如您给出的示例,通过
enum
关键字来定义枚举类型。 - 枚举中的常量默认是从0开始,按照定义的顺序依次递增。在
enum color
中,RED
的值为0,GREEN
的值为1,BLUE
的值为2。当然,也可以为枚举常量显式地指定值,例如enum color {RED = 1, GREEN = 2, BLUE = 3};
。
- 在C语言中,枚举类型是一种构造数据类型。如您给出的示例,通过
- C#中的枚举类型
- 在C#中,枚举类型是一种基本数据类型。
- 枚举类型的声明格式为
enum 枚举名 {常量1, 常量2, …}
。例如enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
。 - C#中的枚举类型默认的基础类型是
int
,但也可以指定其他的基础类型,如byte
、sbyte
、short
、ushort
、int
、uint
、long
或者ulong
。
- Java中的枚举类型
- 在Java中,枚举类型也是一种特殊的数据类型。
- 定义格式为
enum 枚举名 {常量1, 常量2, …}
。例如enum Season {SPRING, SUMMER, AUTUMN, WINTER};
。 - Java中的枚举类型比C和C#中的枚举类型更加强大,它可以有自己的方法和属性。例如可以在枚举类型中定义一个获取季节描述的方法。
二、枚举类型的使用注意事项
(一)取值范围
- 枚举类型中的常量值是有范围限制的,这个范围取决于其基础类型。例如在C#中,如果枚举的基础类型是
byte
,那么常量值的范围就是byte
类型所能表示的范围(0 - 255)。
(二)类型转换 - 与基础类型的转换
- 在不同编程语言中,枚举类型与基础类型的转换规则有所不同。在一些语言中,基础类型不能隐式转换为枚举类型,枚举类型也不能隐式转换为基础类型。例如在VB中就有这样的限制。
- 在C#中,枚举类型可以显式地转换为其基础类型(通常是
int
),反之亦然。例如,如果有enum MyEnum {Value1, Value2};
,那么可以通过(int)MyEnum.Value1
将枚举值转换为int
类型,也可以通过(MyEnum)1
将int
值1转换为对应的枚举值(这里是Value2
,因为Value1
默认是0)。
- 与字符串类型的转换(以C#为例)
- 枚举转字符串:可以使用
ToString()
方法将枚举值转换为字符串。例如对于enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
,Weekday.Monday.ToString()
会返回"Monday"
。 - 字符串转枚举:在C#中可以使用
Enum.Parse()
方法来实现从字符串到枚举类型的转换。例如(Weekday)Enum.Parse(typeof(Weekday), "Monday")
会将字符串"Monday"
转换为对应的Weekday
枚举值。不过要注意,如果字符串与枚举中的常量不匹配,会抛出异常。
- 枚举转字符串:可以使用
基于AI的学习
你已经列举了大部分可以作为常量初始值的类型,非常接近完整答案了。在C语言中,常量的初始值可以是以下几种类型:
-
整型:包括有符号整型和无符号整型,如
int
、short
、long
等。 -
实型:包括单精度浮点数(
float
)和双精度浮点数(double
)。 -
字符型:包括单个字符,如
'A'
、'5'
等。 -
字符串字面量:用双引号括起来的字符序列,如
"hello"
、"C语言"
等。 -
枚举常量:枚举类型定义的一组命名的整型常量,如
enum Color {RED, GREEN, BLUE};
-
其他常量表达式:常量的值还可以是另一个常量的值,或者是常量与字面量通过算术运算得到的值。例如:
#define PI 3.14159 #define TWO_PI (2 * PI)
除了这些基本类型,常量的值还可以来自宏定义(使用#define
)或const
修饰的变量(在C99及以后的标准中)。
需要注意的是,常量的值必须在编译时就能确定,不能依赖于程序运行时才能确定的值。例如,常量的值不能依赖于变量的值,也不能通过函数调用得到。
正是这样,printf()
函数确实支持多种类型的数据输出。你已经提到了几种用于浮点数输出的格式字符,让我们来详细讨论一下:
-
%f:以小数形式输出一个浮点数(float 或 double)。这是最常用的浮点数输出格式。
-
%e:以科学计数法的形式输出一个浮点数。例如,
1.2345e+2
表示1.2345 * 10^2
。这在需要表示非常大或非常小的数值时非常有用。 -
%g:以 %f 或 %e 中较短的一种形式输出一个浮点数。编译器会根据数值的大小和精度自动选择最合适的表示形式。
-
%%:输出一个百分号(%)。当你需要在输出字符串中包含百分号时,可以使用 %% 来实现。
除了这些,printf()
还支持其他一些格式字符:
- %s:输出一个字符串(char[])。
- %p:以十六进制形式输出一个指针的值。
- %d 或 %i:以十进制形式输出一个整数(int)。
- %ld:以十进制形式输出一个长整数(long int)。
- %lf:以小数形式输出一个双精度浮点数(double)。
通过合理组合这些格式字符,你可以灵活地控制 printf()
的输出格式,以满足各种屏幕输出需求。
三个原则:
- 切勿原封不动地接受生成式人工智能工具的输出;确保对其进行评估、完善和修改(或提示),以适应您的目标。
- 切勿将任何个人数据(自己、同学、老师等)或版权材料纳入到你的提示词中。这个可以说是保护个人隐私的最起码的举措。
- 所有人工智能生成工具都容易产生幻觉,因此会生成不准确或误导性的信息,要学会甄别信息真假
选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容
“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
核心是要求GPT:“请你以苏格拉底的方式对我进行提问”
然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”
GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
代码调试中的问题和解决过程
无
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
无
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论(第七版)》
- ...