学期2024-2025-1 学号20241421 《计算机基础与程序设计》第8周学习总结

news/2024/11/17 14:27:25/文章来源:https://www.cnblogs.com/118qa/p/18550511

作业信息
|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|
|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08|
|这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行|
|作业正文| https://www.cnblogs.com/118qa/p/18550511 |
教材学习内容总结
本周我们学习了数组,以下是对数组相关知识的总结。
数组的定义
数组是一组相同类型元素的集合。在 C 语言中,定义数组的基本语法是数据类型 数组名[数组大小];。例如int arr[5];,这里定义了一个名为arr的整型数组,它可以存储 5 个整数。
数组的下标从 0 开始。对于上述arr数组,其有效下标范围是 0 - 4。可以通过arr[0]、arr[1]等来访问数组中的各个元素。
数组的初始化
可以在定义数组时进行初始化。例如int a[3]={1,2,3};,这样就将数组a的三个元素分别初始化为 1、2、3。
如果初始化时提供的初始值个数少于数组大小,剩余的元素会被自动初始化为 0(对于数值类型)。如int b[5]={1,2};,此时b[2]、b[3]和b[4]的值都为 0。
也可以不指定数组大小,让编译器根据初始化的值个数来确定数组大小。例如int c[]={4,5,6};,这里编译器会自动将数组c的大小确定为 3。
一维数组的操作
访问元素:可以通过下标来访问数组中的元素,并且可以对元素进行赋值、读取等操作。例如:
int array[3];
array[0]=10;
int value = array[0];
遍历数组:通常使用循环来遍历数组。最常见的是使用for循环,例如:
int arr[5] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++){
printf("%d ", arr[i]);
}
二维数组
定义:二维数组可以看作是一个矩阵,其定义语法为数据类型 数组名[行数][列数];。例如int matrix[3][4];定义了一个 3 行 4 列的二维整型数组。
初始化:可以在定义时初始化二维数组。例如int two_d[2][3]={{1,2,3},{4,5,6}};,这里将two_d数组的第一行初始化为 1、2、3,第二行初始化为 4、5、6。
访问元素:通过两个下标来访问二维数组中的元素,例如two_d[1][2]访问的是第二行第三列的元素(注意下标从 0 开始)。
遍历二维数组:一般使用嵌套的循环。外层循环控制行数,内层循环控制列数。例如:
for(int i = 0; i < 2; i++){
for(int j = 0; j < 3; j++){
printf("%d ", two_d[i][j]);
}
printf("\n");
}
字符数组与字符串
字符数组是用来存储字符的数组。例如char str[6];可以存储 6 个字符。
字符串是以 '\0'(空字符)结尾的字符数组。在 C 语言中,有两种常见的初始化字符串的方式。一种是使用字符常量初始化,如char s1[] = "Hello";,编译器会自动在字符串末尾添加 '\0'。另一种是逐个字符初始化,例如:
char s2[6];
s2[0]='H'; s2[1]='e'; s2[2]='l'; s2[3]='l'; s2[4]='o'; s2[5]='\0';
常用的字符串处理函数有strcpy(字符串复制)、strcat(字符串连接)、strcmp(字符串比较)等。但使用这些函数时要注意字符数组的大小,避免缓冲区溢出。
数组作为函数参数
数组名作为函数参数时,实际上传递的是数组的首地址。例如
void printArray(int arr[], int size){
for(int i = 0; i < size; i++){
printf("%d ", arr[i]);
}
}
int main(){
int a[3]={1,2,3};
printArray(a, 3);
return 0;
}
在函数内部对数组元素的修改会影响到原始数组。因为函数接收到的是数组的存储地址,通过这个地址可以访问和修改数组中的实际元素。
教材学习中的问题和解决过程
问题:如何将数组与函数联系在一起?
AI:数组作为函数参数传递
传递方式:在 C 语言中,数组名作为函数参数时,实际上传递的是数组的首地址。这意味着函数可以通过这个地址访问和修改数组中的元素。例如,定义一个函数来打印整型数组的元素:
注意事项:在函数参数列表中,int arr[]和int *arr是等价的声明方式,都表示接收一个指向整型的指针。这种方式使得函数能够高效地访问数组,因为不需要复制整个数组的内容到函数中。但是,这也意味着在函数内部对数组元素的修改会影响到原始数组。
函数返回数组(不常见且有一定限制)
直接返回数组是不允许的:在 C 语言中,函数不能直接返回一个数组。因为数组名是一个指针常量,它代表数组的首地址,函数结束后,其内部的局部数组的存储空间会被释放,返回的数组地址可能会指向无效的内存区域。
返回指针指向数组:可以返回一个指针,这个指针指向一个在函数外部定义的数组或者是通过动态内存分配(如malloc函数)在堆上创建的数组。例如:
注意内存管理:当返回一个指针指向动态分配的数组时,需要在合适的时候(通常是在不再使用数组后)使用free函数来释放内存,以避免内存泄漏。
利用数组和函数实现特定功能
排序功能:可以编写一个函数来对数组进行排序。例如,实现简单的冒泡排序函数:
查找功能:编写一个函数在数组中查找特定元素。例如,线性查找函数:
问题:多维数组如何使用?
AI:二维数组的定义与初始化
定义:二维数组可以看作是一个矩阵,它的定义语法是数据类型 数组名[行数][列数];。例如,int matrix[3][4];定义了一个 3 行 4 列的二维整型数组。这个数组可以用来存储 3 组,每组 4 个整型数据。
初始化:
按行初始化:可以在定义时按行对二维数组进行初始化。例如,int two_d[2][3] = {{1, 2, 3}, {4, 5, 6}};,这里将two_d数组的第一行初始化为 1、2、3,第二行初始化为 4、5、6。
逐个元素初始化(不推荐用于大型数组):也可以逐个元素地进行初始化,如int another[2][3]; another[0][0]=1; another[0][1]=2;等,但这种方式比较繁琐,尤其是对于大型数组。
部分初始化:如果初始化时提供的初始值个数少于数组元素总数,剩余的元素会被自动初始化为 0(对于数值类型)。例如,int partial[3][3] = {{1, 2}, {3}};,第一行初始化为 1、2、0,第二行初始化为 3、0、0,第三行全部为 0。
二维数组元素的访问
访问单个元素:通过两个下标来访问二维数组中的元素,第一个下标表示行,第二个下标表示列,并且下标都是从 0 开始。例如,在上述two_d数组中,two_d[1][2]访问的是第二行第三列的元素(也就是 6)。
遍历二维数组:
使用嵌套循环:一般使用嵌套的for循环来遍历二维数组。外层循环控制行数,内层循环控制列数。例如:
应用场景示例:在处理矩阵运算(如矩阵加法、乘法)或者图像处理(处理图像像素矩阵)等场景中,这种遍历方式非常有用。例如,两个二维数组matrix1和matrix2相加,结果存储在result数组中,可以这样实现:
三维数组及更高维数组
定义与初始化:
定义:三维数组的定义语法为数据类型 数组名[层数][行数][列数];。例如,int three_d[2][3][4];定义了一个三维数组,它可以看作是 2 个二维数组,每个二维数组是 3 行 4 列。
初始化:初始化方式与二维数组类似,但需要更多的嵌套括号来表示各维度。例如,int cube[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};。
元素访问与遍历:
访问单个元素:通过三个下标来访问三维数组中的元素,例如three_d[1][2][3],第一个下标表示层,第二个表示行,第三个表示列。
遍历:使用三层嵌套的循环来遍历三维数组。一般外层循环控制层数,中间层循环控制行数,内层循环控制列数。例如:
应用场景:在一些科学计算(如三维空间数据建模)或者高级数据存储(如存储 RGB 颜色空间的图像数据,其中第三维可以表示颜色通道)等场景中会用到三维数组。更高维数组的使用场景相对较少,但在一些复杂的数学模型或者数据存储结构中可能会出现。
基于AI的学习




其他
本周我们进行了测试,让我认识到,对于编程的知识漏洞还有很多,需要继续加油。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QObject,QMainWindpw,QWidget,QDialog介绍

QObject QObject 的角色和特点 在 Qt 框架中,QObject 是整个对象模型的核心基类,它为 Qt 对象树 和 信号-槽机制 提供了基础支持。很多 Qt 的类(包括 QWidget、QDialog、QMainWindow)都直接或间接继承自 QObject。 QObject 的核心功能对象树管理(Object Tree)QObject 提供…

2024-2025-1 20241329 《计算机基础与程序设计》第八周学习总结

作业信息 作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP 作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 作业目标:功能设计与面向对象设计;面向对象设计过程;面向对象语言三要素;汇编、编译、解释、执行 作业正文:https://www…

Alpha冲刺(4/14)——2024.11.15

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

高三鲜花 #2

水发现放假之后其实连鲜花都是不想写的了。 所以这是钓鱼博。 也不能钓这么直接,还是需要写一点东西的。 应该是马上就距离高考还剩 200 天了。然后这里本来写了很多关于 whk 的文本,全删了,觉得有点无意义,毕竟这应该是一篇钓鱼博。 whk 真难。 突然发现我已经退役四个月了…

语文成绩

语文成绩(https://www.luogu.com.cn/record/189365158) 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗? 输入格式 第一行有两个整数 n,p,代表学生数与增加分数的次数。…

「LUCKY STUN穿透」使用Cloudflare的页面规则固定和隐藏网页端口

关于本教程 索引 │ ├─关于本教程 │ ├─在STUN穿透环境中使用WEB服务 │ ├─动态端口带来的麻烦 │ ├─“隐藏端口”和固定端口 │ └─可用的解决方法 │ ├─使用邮件进行通知端口变化 │ └─使用HTTP重定向 │ ├─网络环境优化和STUN穿透规则设…

平板电视食用教程

先来看一道大家基本都能默写出来的题目: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入一个数 \(x\)。 删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 定义排名为比当前数小的数的个数 \(+1\)。查询 \(x\) 的排名。 查询数据结…

企业集成模式-第十二章

十二、中场演练:系统管理示例管理控制台:显式所有组件的工作状态(下图一) 贷款中介的服务质量:监视请求响应时间 验证信用机构的操作:周期性地发送测试消息,希望确信该服务在正常运行(下图二) 信仰机构的故障恢复:如果信仰机构出现故障,希望把信用请求消息临时重定向…

平板电视从入门到精通

先来看一道大家基本都能默写出来的题目: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入一个数 \(x\)。 删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 定义排名为比当前数小的数的个数 \(+1\)。查询 \(x\) 的排名。 查询数据结…

人月神话-摘抄

由于人员的分工,大型编程项目碰到的管理问题和小项目区别很大:我相信关键需要是维持产品自身的概念完整性。 1. 焦油坑(the tar pit) 过去几十年的大型系统开发犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。他们中大多数开发出了可运行的系统-不过,其中只有非…

Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家

最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了Manjaro KDE Plasma,经过一段时间的发展,Linux桌面可用性大大提高。 Kindle->Kindle Mate->Anki这条路在linux下 我用 Kindle ->KindleVocab ->Anki这么代替了之后, 其他软件都能凑合用,…

Prometheus 和 Grafana 监控系统搭建

Prometheus 和 Grafana 监控系统的搭建和配置。Author: ACatSmiling Since: 2024-11-11Prometheus 的架构架构理解:Prometheus 既然设计为一个维度存储模型,可以把它理解为一个 OLAP 系统。 生态圈组件:Prometheus Server:主服务器,负责收集和存储时间序列数据。 Client L…