vlambda博客
学习文章列表

一个C语言渣的辛酸史(一)


c语言,计算机专业的入门课程,爱好他的人已经搞起了游戏,而不喜欢它的人才刚开始的时候就已经被踢出门去了,而肥肥真的是拼着体重进来的。

第一次拿到那本第四版谭浩强的C语言书的时候,我就深深的感受到了它的恶意。当第一节课老师讲了我人生中看到的第一句代码:printf(“hello world”);的时候我觉得这个世界还是很美好的。

当我认真的学完了课本的前四章的时候,我觉得我已经成功拿下它了。正当我对着课本想着怎么撩学妹的时候,噩梦开始了:我理解不了为什么什么数组的下标是要从0开始的,于是我一直纠结着这个问题,茶不思饭不想。正当我决定放弃这个问题的时候,我发现新的敌人出现了——函数。我只学过对数函数,指数函数,三角函数,怎么C语言里面也来了个函数。这还不是最严重的,让我头疼的是函数的递归调用,我深刻的记得老师让我们编的一个题目:






有一个数列 0,1,1,2,3,5……n,n+1,n+2;数列中的值等于前面两项的值的和如:n+2=(n+1)+n;输入一个数n用递归算法求n的值。





这题目乍一看还是挺容易的,就是定义两个常量a和b分别作为数列的前两项,从第三位开始依次是前两个数之和,只需要一个for循环就能解决问题了。但是老师的要求是用递归啊,你们知道递归是什么吗?

肥肥经过很长一段时间的学习,终于对递归有了一丢丢的理解:

递归方法类似于语文中的“以此类推”,就是重复同样的步骤。从专业上来讲,就是程序的类方法成员间允许相互调用,也可以自己调用自己的方法称为递归。

就像刚刚的这个题目就可以这样来编程:


一个C语言渣的辛酸史(一)


简单的递归问题算是可以糊弄过去了,但是紧接着指针又来发难了。在整个C语言的学习中,指针、链表、结构体就像是蜘蛛网一样千丝万缕的混迹在我不太聪明的脑袋里。如果它只是难我还可以蒙混过关,但是老师还就喜欢考这些难的,理由就是这些是用来拉分的。那些年为什么我没有拿到奖学金,还不就是因为期末的题太难,朕做不出来呀。现在咱得把那些丑八怪拿到台面上来讲讲:

首先什么是指针呢?在我看来,它就像是一家酒店,酒店里面的每一个房间都有自己独有的房号,当有客人要入住的时候,前台漂亮的小姐姐就会随机安排一个房间,那么客人就相当于指针所指向的内存单元中的数据。这样来理解是不是好多了,书上巴拉巴拉讲了一大堆,一点点都没有看懂。接下来咱来点实际的。



一个C语言渣的辛酸史(一)
一个C语言渣的辛酸史(一)
一个C语言渣的辛酸史(一)

滑动查看运行结果

现在新的问题来了,*key1和*key2输出的值分别为a和b的值,那么key1和key2又表示什么呢?如果我们用printf(“%d”,key);输出key1的值时,我们得到的结果会是什么呢?


今天的肥肥已经乏了,众卿家要想知道答案明天再来吧。

一个C语言渣的辛酸史(一)

  扫码关注肥肥 

QQ:3494137528