2022-2023-1 20221320 《计算机基础与程序设计》第十二周学习总结
学期(2022-2023-1) 学号(20221320) 《计算机基础与程序设计》第十二周学习总结
作业信息
各项要求 | 具体内容 |
---|---|
<班级的链接> | 2022-2023-1-计算机基础与程序设计 |
<作业要求的链接> | 2022-2023-1计算机基础与程序设计第十二周作业 |
作业的目标 | 1.学习目标: 无 |
作业的目标 | 2.学习任务:加入云班课,参考本周学习资源、《C语言程序设计》第11章并完成云班课测试 |
作业的目标 | 3.参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学年 学号 《计算机基础与程序设计》第十二周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。 |
作业正文 |
教材学习内容总结
《C语言程序设计》第11章:主要讲了指针与数组,分别叙述了指针与一维数组间的关系,指针与二维数组间的关系,指针数组及其应用,动态数组等
教材学习中的问题和解决过程
- 问题1:动态内存分配是什么
- 问题1解决方案:
转载CSDN上的文章动态内存分配 (详解版)感觉用处很大,写的不错
C++语言允许使用C语言标准库函数中malloc和free申请和释放内存,保留这两个函数主要有以下3点考虑:
C++程序经常要调用写好的C函数,而在C语言中,只能使用malloc和free;
如果C++程序要允许在C语言环境下,必须使用malloc和free
new和delete的功能是通过调用malloc和free来实现的
new和delete是C++运算符,new和delete是C标准库函数。
C函数库提供了malloc和free两个函数,分别用于执行动态内存分配和释放。它们都在头文件stdlib.h中声明。原型如下:
void *malloc(size_t size); //无符号整型,unsigned int size
void free(void *pointer); //pointer是指向所申请内存块的指针。编译器可以完成由其他类型指针向void型指针的转化,因此可直接使用free(指针)就可实现内存释放
1
2
下列语句用于申请一段长度为len、数据类型为short的动态内存:
short* p=(short) malloc (len * sizeof(short)); //由于malloc返回类型是void,用其返回值对其他类型指针赋值时,必须使用显示转换。
//同时,malloc参数是个无符号整数,其仅仅关心申请字节的大小,并不管申请的内存块中存储的数据类型。
//因此,申请内存的长度须由程序员通过“长度*sizeof(类型)”方式。
1
2
3
malloc的参数就是需要分配的内存字节数。如果内存池中的可用内存可用满足这个需求,malloc就返回一个指向被分配的内存块起始位置的指针。malloc所分配的是一个连续内存,因此实际分配的内存有可能比请求的稍微多一些,这个行为由编译器定义。
如果内存池是空的,或者它的可用内存无法满足请求,malloc函数向操作系统请求,要求得到更多的内存,并在这块新内存上执行分配任务。
如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。
因此,对每个从malloc返回的指针都进行检查,确保它并非NULL.
free的参数要么是NULL,要么是一个先前从malloc/calloc/realloc返回的值。向free传递一个NULL参数不会产生任何影响。
这些函数维护一个可用内存池,当一个程序另外需要一些内存时,就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化。如果对这块内存进行初始化非常重要,要么自己动手初始化,要么使用calloc函数。
当一块以前分配的内存不再使用时,程序调用free函数把它归还给内存池供以后之需。
#include<iostream>
using namespace std;
int main()
{
int *p=(int*) malloc(sizeof(int)*5); //使用malloc申请一块动态内存
cout<<"请输入5个整数:"<<endl;
for(int i=0;i<5;i++)
{
cin>>*(p+i); //循环输入5个整数,与*p[i]一样
}
cout<<"您输入的第3个数是:"<<p[2]<<endl;
free(p); //释放所申请的动态内存
return 0;
}
代码调试中的问题和解决过程
- 问题1:找出一个2*6的二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
输入:二维数组中的元素;
输出:二维数组中的鞍点,若没有鞍点输出"no saddle point"
样例输入:
12 45 33 3 5 54
23 49 58 22 7 55
样例输出:
54
- 问题1解决方案:
#include <stdio.h>
#define ROW 2
#define COL 5
int main()
{
int a[ROW][COL];
int k = 0;
int j = 0;
int i = 0;
int m = 0;
for (i = 0; i <= 1; i++)
for (j = 0; j <= 5; j++)
{
scanf("%d", &a[i][j]);
}
for (i=0;i<ROW;i++)
{
int max = a[i][j];
for (j = 0; j < COL; j++)
{
if (a[i][j] > max)
{
max = a[i][j];
m = j;
}
}
j = 0;
for (k = 0; k < ROW; k++)
{
if (max > a[k][m])
{
break;
}
}
if (k == ROW)
{
printf("%d", max);
break;
}
else
k = 0;
}
if (i == ROW)
printf("no saddle point");
return 0;
}
上周考试错题总结
上周没有考试
其他(感悟、思考等)
无
学习进度条
博客量(新增/累计) | 代码行数(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
---|---|---|---|---|
目标 | 70 | 3000 | 300 | |
第一周 | 2/2 | 0 | 10/10 | 开始学习写博客 |
第二周 | 1/3 | 300/300 | 20/30 | 学习如何自主预习,初识信息安全专业 |
第三周 | 6/9 | 250/550 | 20/50 | 各种进制表数方法 |
第四周 | 1/10 | 50/600 | 15/65 | 逻辑电路 |
第五周 | 3/13 | 100/700 | 10/75 | 博客排版和编辑走上正轨 |
第六周 | 1/14 | 100/800 | 10/85 | 解决问题的Polya新思想 ,选择结构 |
第七周 | 1/15 | 300/1100 | 20/105 | 抽象数据类型,循环结构 |
第八周 | 2/17 | 150/1250 | 20/125 | 函数的定义,不同范型的编程语言 |
第九周 | 1/18 | 300/1550 | 20/145 | 数组,函数,操作系统,文件系统和目录 |
第十周 | 1/18 | 300/1850 | 10/155 | 二维数组 |
第十一周 | 1/19 | 500/2350 | 10/165 | 指针 |
第十二周 | 1/20 | 300/2650 | 10/175 | 字符串,字符数组 |