C语言考试补课笔记
今天是第一天补课。终于又有机会听林老师的课了。我觉得他比老谭讲得好。虽然没听说过老谭的课,但我相信学校里的大部分同学都是用老谭的C编程来学习C语言的。这本书有很多优点,最重要的一个就是有些概念可以用生动的例子来说明,但是还有一个不好的地方,就是这本书讲的都是基础,没有学生可以深入学习的话题。据我所知,有机械工业翻译的C语言设计课程。这本书有很多实践练习,围绕生活展开。寓学于乐,我看这本书有几个有趣的话题!书就介绍到这里吧,还是回到今天补课的情况。
今天是第一天。老师还是不知道我们到底在哪。但既然之前都是自学,现在就要刨根问底了。一开始他直接介绍了上界程序员考试下午的第一道题,是一道编程填充空题。以下:
int strcmp (char * s,char * t)
{
while(* s & & * t & _ _ _ _ _ _)
{ s++;t++;
}
return _ _ _ _ _ _ _ _;
}
这是一个模仿C语言字符函数库的字符比较函数。当时我第一时间想到了一个方法。第一,空因为大家都没问题,只要保持*s和*t逻辑真就行了,表示这个存储单元用的是字符。大家都知道C语言中没有字符串这样的变量,只有符号‘0’用来表示这个字符数组已经走到了尽头。这里要讲一个新概念,就是C语言逻辑中所有非零值都为真,所以符号' [2] '是零。所以填这个空,后面加上一个退出循环的条件应该不会太难。因为是大小的比较,只要保持不变就可以继续,所以条件也很明显可以写出来* s = = * t,至于第二个问题,我当时的思路是固定在条件运算符上的,因为返回值有三种可能。大于正数,等于就归零,小于负数就归零。知道了这三种可能性,就可以用条件运算符来填充了。我当时的回答是这个*s == *t?0: *s>*t?1: -1,这个很长吗?其实我也不知道我的答案对不对,但是真正的答案是* S-* T,你知道为什么答案是这样的吗?当时我被答案吓到了,因为当时我真的以为通过比较它们(用ACSII代码)就能得到结果。*s-*t如果s指针指向的单位大于,当然是正的。和其他原理一样,这里就不细说了。
除了引用这个回答,告诉我们很多基础知识,还更详细的给我们介绍了指针,唉!为什么老师说的话总是那么清晰明了?如果老师能教我,我会少走很多弯路。算了,说这些话没用。你现在只能好好学习它们。大家还是有一些指针的基础的。在这里,重要的是提一下今天老师反复强调的一个概念,即指针是指向一个地址的变量。好了,今天到此为止。
0条评论