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

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

时间:2024-11-17 14:19:00浏览次数:1  
标签:初始化 函数 学号 int 元素 2024 2025 二维 数组

作业信息
|这个作业属于哪个课程|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的学习




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

标签:初始化,函数,学号,int,元素,2024,2025,二维,数组
From: https://www.cnblogs.com/118qa/p/18550511

相关文章

  • 20222310 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    一、实验内容1.从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取以下信息(1)DNS注册人及联系方式(2)该域名对应IP地址(3)IP地址注册人及联系方式(4)IP地址所在国家、城市和具体地理位置2.尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所......
  • 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.cnblogs.com/inca......
  • Alpha冲刺(4/14)——2024.11.15
    目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表一、团队成员分工与进度成员完成的任务完成的任务时长剩余时间施......
  • ICPC2024杭州站游记
    Day-??发现杭州站可以报名,但是四处问了问发现并不知道中学生怎么报名?于是去push老叶找HZNU的工作人员报名,最后成功报上了。以为不能跨学校组队于是拉上了高一学弟,仍然沿用了“飞带长队”的队名。Day-?得知海峰加入了凯文队。Day-5加训CCPCHarbin,赢了呆呆鸟罚时。......
  • 20241116
    T1医生厨神秘贪心题。不会。不懂。考虑当\(\maxA_i\lex\)时,可以直接从大往小干。否则需要不断扩大\(x\)使得其超过\(\maxA\)。我们考虑在一个时刻,若存在一个\(a\)使得\(a\lex\land2a\gex\),那我们直接把这个\(a\)干掉是不劣的,因为你现在干掉这个至多只会拖......
  • 2024华为OD算法真题目录
    文章目录一、什么是华为OD,什么是华为OD机试?二、华为OD面试流程?三、华为OD机试通过率高吗?四、华为OD薪资待遇?五、大家比较关注问题的FAQ......
  • 20241115
    T1自闭题目条件可以扩展到任意矩形的四个顶点。则整个矩阵仅由第一行和第一列决定。容易发现最左上角的格子直接填\(0\)是一定合法的,因此只需要判断是否存在数组\(a_i,b_i\)满足\(A_{i,j}=a_i+b_j\)即可。考虑将给出的限制视为边,\(a_i,b_j\)视为点建图,显然不同连......
  • 20222312 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容及要求本实践目标是掌握metasploit的用法。指导书参考Rapid7官网的指导教程。https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/下载官方靶机Metasploitable2,完成下面实验内容。(1)前期渗透①主机发现(可用Aux中的arp_sweep,search一下就可......
  • 2024-2025-1 20241417 《计算机基础与程序设计》第八周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第八周作业这个作业的目标功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行作业正文https://www.cnblogs.c......
  • # 学期2024-2025-1 学号(20241405) 《计算机基础与程序设计》第8周学习总结
    作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08||这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行||作......