终于完成了算法课的第一次作业,自从大一做过C语言课设之后就没有用过C了,这次突然捡起来,而且还是在linux上编,一开始还是不太适应的,毕竟不是大牛程序员嘛。
下面是我第一次作业的经验总结:
1.uint32_t和uint64_t类型:因为这次作业需要用到的是大数相乘和相除,所以大的整形数一定要用到了。老师推荐我们用的是这两个类型,而不是long unsigned和long long unsigned,原因是uint32_t和uint64_t这两种类型的大小始终是不变的,32位一直就是32位,64位一直就是64位。虽然我还是不太知道这样有什么好处,但是老师说的应该是对的。
另外这两种类型的打印符还是比较奇怪的,分别是%“PRIu32"和%llu,不知道为什么还不是统一形式的打印符,其中“PRIu32"需要include "inttypes.h"。
例子
uint32_t i=12345;
uint63_t j=12345123;
printf("i=%"PRIu32",j=%llu",i,j);
2.malloc和calloc:之前只是知道这两个函数,但是从来没有用过,这次之后觉得还真的是少不了的两个函数。他们俩的区别在于,仅限于我了解的,malloc是分配一个指定大小的连续空间,而calloc可以分配多个。而且malloc分配的空间不会自动清零,calloc可以自动清零,所以对我来说,还是calloc比较好用,就因为不能自动清零这个事,然后困惑了好久。对了,使用过变量之后一定要free()一下,不要有内存泄漏。
3.关于字符串的可读可写问题:如果我定义一个字符串采用指针的形式,例如
char* s="";
则这个s会被分配在只读空间内,如果对s进行写操作的话,运行时会出现段错误。
而如果定义为数组的形式就既可读又可写了。但是这样的不便之处在于无法实现动态长度的字符串,不过不用担心,只要用calloc就可以啦。
4.解决linux下没有itoa函数的问题:一开始用itoa发现不行,自己就不知道怎么办了,上网查了一下,原来linux里没有这个函数,但是用snprintf或者sprintf可以实现。
在我程序中的一个例子,将整形数134224转换成字符串
uint32_t i=134224;
char* s;
s=(char*)calloc((sizeof(char),ilength(i));
snprintf(s,ilength(i)+1,"%"PRIu32",i);
其中ilength()函数是我自己写的一个计算整形数位数的函数。
第一次作业的总结大概就是这么多,以后的编程方面的东西还要多多总结才是。
分享到:
相关推荐
总结来说,这个作业涉及到的算法知识主要包括: 1. 排序算法的基础概念,尤其是寻找序列中值的方法。 2. 使用比较和交换操作调整序列顺序。 3. 实现特定比较策略来最小化比较次数,这里为7次比较。 4. 理解并实现一...
### 哈工大算法第三章作业答案解析 #### 3.1 分治算法设计及其时间复杂度分析 本题要求我们设计分治算法来计算实数或矩阵的幂,并分析算法的时间复杂度。 **算法设计** 对于计算实数 \(a^n\) 的问题 (a) 可以...
计算机算法设计与分析是...总结起来,这次作业涉及了矩阵乘法的复杂度分析、查找最大值和最小值的算法效率以及大O符号表示复杂度的正确使用。这些都是理解和评估算法性能的关键概念,对于深入理解计算机科学至关重要。
本文将围绕**块匹配运动估计算法**这一主题,详细介绍几种常用的块匹配算法,并对其原理、搜索步骤、适用范围及其优缺点进行深入探讨。 #### 运动估计的块匹配算法原理 块匹配运动估计算法是一种基于图像块的运动...
在第一次循环中,内层循环计算每个i的阶乘,并将其累加到变量s中。时间复杂度分析显示,内层循环在最坏情况下执行n次,每次循环中内层循环的迭代次数从1增加到n,因此总的时间复杂度为O(n^2)。 第二个算法是计算1到...
标题中的“优化算法-第二次作业.pdf”表明本文档是一份作业文件,内容涉及优化算法的学习与实践。从描述中的“罚函数、单纯性”可以得知,本文档主要讲解了罚函数法和单纯形法这两种优化算法,并将它们应用于具体的...
首先,讲义是课程内容的精华总结,通常包含了基础概念、重要算法以及分析方法。在刘玉贵老师的讲义中,我们可能会看到以下几个关键知识点: 1. **排序与查找算法**:包括快速排序、归并排序、堆排序、二分查找等,...
总结来说,文档涉及到动态规划算法在解决几个具体问题上的应用,包括最大可除子集问题、打家劫舍问题和解码问题。对于每个问题,都详细介绍了动态规划方程的建立、伪代码的编写、正确性的证明以及时间复杂度的分析。...
这是通过一次线性扫描实现的,没有使用额外的排序算法。这种合并方法在处理大规模数据时非常有效,因为它避免了额外的空间开销,并且利用了链表的特性,可以在线性时间复杂度内完成操作。 总结来说,这段代码提供了...
- **多项式拟合**:通过一次、二次和三次多项式拟合,发现一次拟合的结果与直接计算的结果基本一致,说明 \(\ln(\text{cond}(H_n))\) 与 \(n\) 的关系大致为线性的。 #### 四、预处理技术的应用 为了改善Hilbert...
### 北航数值分析第一次大作业相关知识点解析 #### 一、数值分析概览 数值分析是一门研究如何使用计算机解决数学问题的学科。它主要关注于开发算法,并通过计算机来实现这些算法,以获得数学问题的有效解。数值...
在广东工业大学计算机学院的《算法设计与分析基础》实验课程中,本次算法作业的要求主要集中在两个具体的算法实现上,这不仅是对理论知识的实际应用,也是对编程能力的一次考验。以下将详细介绍这两个算法的核心概念...
标题中的“计算机算法设计与分析第二次作业_qyx1”表明这是一个关于计算机科学的作业,主要涉及算法设计与分析。描述中的内容与标题一致,没有提供额外的信息。标签为空,因此我们只能依据部分内容来讨论相关知识点...
总结来说,这些内容涵盖了归并排序的优化、组合数学的对数关系、以及递归算法的时间复杂度分析,这些都是算法导论课程的核心主题,对于理解算法的效率和设计具有重要意义。通过深入学习和掌握这些知识点,可以提升在...
【标题】:“第一次作业-SA14011008-郭昊2”涉及的是算法分析与设计的实验,主要探讨了概率算法及其在估计π值和计算积分中的应用。 【描述】:“算法伪代码”部分给出了两个算法,分别是Darts()和HitorMiss(),这...
【标题】:“SA19225404吴语港第一次作业1”涉及的编程基础知识解析 在“SA19225404吴语港第一次作业1”中,我们可以看出这是一份编程作业,主要包含了两个编程题目,分别涉及到回文数的判断和全排列问题。下面我们...
例如,在第一个程序中,while 循环体做了 10 次,而在第二个程序中,while 循环体做了 14141 次。这两个程序的循环次数的差异非常大,足以说明最大公约数的重要性。 二、画线语句的执行次数 画线语句的执行次数是...
5. 二次机会算法(SCC):基于FIFO,但增加第二次检查机制,避免Belady异常。 6. 最不经常使用页面置换算法(LFU):根据页面访问频率决定替换,高频率的页面更不容易被淘汰,但可能对历史访问记录过于敏感。 三、...
由于每个节点只会被搜索一次,因此算法的时间复杂度为 O(R*C),其中 R 和 C 分别表示矩阵的行数和列数。 在实验预习阶段,首先分析了未修改算法的时间复杂度。这个算法在初始化一个大小为 R*C 的 `vis` 数组后,...
【软件分析测试第一次作业1】涉及的是对Java项目的抽象语法树(AST)变化进行分析的实验,目的是理解软件开发过程中代码结构的演变。这个实验主要关注以下几个知识点: 1. **抽象语法树(Abstract Syntax Tree, AST)**...