2022-2023-1 20221320 《计算机基础与程序设计》第十二周学习总结

学期(2022-2023-1) 学号(20221320) 《计算机基础与程序设计》第十二周学习总结

作业信息

各项要求 具体内容
<班级的链接> 2022-2023-1-计算机基础与程序设计
<作业要求的链接> 2022-2023-1计算机基础与程序设计第十二周作业
作业的目标 1.学习目标: 无
作业的目标 2.学习任务:加入云班课,参考本周学习资源、《C语言程序设计》第11章并完成云班课测试
作业的目标 3.参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学年 学号 《计算机基础与程序设计》第十二周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。
作业正文

教材学习内容总结

《C语言程序设计》第11章:主要讲了指针与数组,分别叙述了指针与一维数组间的关系,指针与二维数组间的关系,指针数组及其应用,动态数组等

教材学习中的问题和解决过程

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 字符串,字符数组
posted @ 2022-11-20 19:50  20221320冯泰瑞  阅读(18)  评论(0编辑  收藏  举报