00:00
我们来看第十五十五道题的第31题。第31题呢是这样说的,下列选项中能够满足若字符串S1等于字符串S2,则执行ST要求的是哪一个?也就是说如果S1和S2相等,就执行ST相关的代码,那么我们看A。这里呢,他用的是string,呃,P comp,这个就是用来用的。String compel这个函数我们在前面讲过,它是string.h的头文件里面的一个函数,它就是判断S2和S1是否相等,如果相等就等于零,然后就执行ST,这是正确的。好,我们分析一下。分析第一个。就是要明白这个函数的作用,这个函数是系统函数。它函数是系统。是系统函数。如果,如果S2。
01:04
和一。S1相等,相等,则返回零。对不对,那还记不记得,如果S1大于S2,就返回一,如果S2小于S1,就返回一个负一,还记得吧,还多说两句啊,如果S2大于S1。则返回一,否则啊,如果,如果S2小于S1。干什么呢,返回什么呀,就返回一个负一。那这个题就是对的,那答案选A,没问没问题答案。答案选择,选择A答案。那么为什么BCD是错的呢?我们看这里,这个地方可不能这样想呢,S1等于S2,没有这种,这种比较没有义哈,在这里它没有意义,不能这样去比。
02:00
这是一个拷贝啊,我们字符串相比不是这样子的写上啊字符串。字符串。比较不能使用这个等号,如果是相等的话呢,是基本数据类型,咱们可以用基本数据,比如说两个整数相等,或者两个小数是否相等,可以用这个等号,对不对,那基本数据类型,基本数据类型。数据类型可以使用的。比如。比如什么呢,Int。Short long,还有像这个double的。那么第三个题为什么错了呢?大家想想,第三个题错误的原因是他这里面根本不是在比较,是拷贝,这显然没有,没有任何关系嘛,就是string cp是拷贝。拷贝啊,没有跟比较没有关系,这个更不靠谱了,S1减S2字符串之间没有这种减的这种预算符号,就字符串之间字符串或者叫数组吧。
03:05
数组不能使用这种键,没有,没有这种用法,没有这种用法,因此答案就应该选择我们刚才分析出来的哪一个答案呢?A答案31题选A,再看32题。32题这个题啊,要小心一点,这道题的考点是在于对运算符的优先级的一个考察,我做一个分析,先看第一题。第一题可不可以?当然可以,你看星号S,这个就是取出S的值赋给T,如果取出来S是一个斜杠零呢,T也被负成斜杠零,并退出Y循环,所以它这个用的很巧妙。这是可以的。可以,它是怎么样呢?呃,要明明白这个意思啊,就是说这个是代表取出取出S这一个,这个指针所指向的字符串的第一个字符,然后拷贝给T。
04:00
拷贝完了过后呢,如果它是一个结束标志就退出,如果不是T加加S加加,再拷贝下一个。对,这是可以的。第二个题可不可以呢?当然也是可以的,一样的这个也可以,可以的原因你看I等于零,然后呢,它把SI付给ti,相当于也是一个复制,如果付过来的是一个结束标志符,就是斜杠零。也就是我们所说的零子就退出,否则I加加,然后这地方有一个空空语句啊,也就是说当ti等于零的时候呢,我们就退出了,也是可以的,第三个题,第三个题大家看这个题是不可以,这个这个不可以。为什么不可以呢?这里面有一个最关键的知识点,就是哪个运算级级别高的问题。大家看,我先问大家这句话表示什么意思?能跟老师说一下吗?这表示什么意思?这个表示的意思是先,它实际上是呃,谁的优先级高啊,是星号的优先级高,还是S加加的优先级高。
05:09
如果同学们忘了,可以打开。我们可以打开老师给大家讲的高校大学生C语言课程,在这里面呢,我们专门给大家讲的运算符优先级问题,来看一下。打开这里,我们看在第几章讲的呢?是在第三章,呃,是运算符哈。那就是第五章,第五章我们专门有一个章节讲的就是运算符的优先级问题,大家看一下。在这里呢,我们讲到。星号还有加加,谁的优先级高呢?来看大家有没有发现加加的自增运算的优先级其实是高于取值运算符的,那这样它就会造成一个什么情况呢,朋友们?它就会变成这样一个东西了,也就是说。
06:01
也就是说,呃,这个加加的加加的运算优优先级大于。大于谁呢?大于这个信号,那这样子的话,大家想这句话就等价于什么呢?这句话就等价我用括号括起来。这句话就等价于这这样一种感觉了。等价。什么呢?括起来,这样大家就看得很清晰了。你看括起来,这个也括起来,那大家想一想他会怎么做,他上来过后S加加,也就是说他先把S加加执行完毕,过后再去取值,那你原先这个字符,比如是ABC,那么S原先指向这里,它先自己往后面移动一位,先指向这个B。然后再把这个B呢,拷贝给这个T,那显然就少了一个字符,发现没有,你这样拷贝过后呢,你会发现首字符是没有拷贝过去的。
07:03
对,所以这个问题就很严重了,因此这样拷贝呢,会会缺少缺少什么呢。而缺少第一个字符。那就呃跟我们的要求不一样了,因为他是呃这个要求就是他说不能将,那那你说这个达不到效果嘛,就是这种是错误的。就说第三,第三个它是不能将S所指向的字符串正确复制到T所指向的存储空间,答案就应该选啊,就说应该选择我们的C答案。那么四这个答案对不对呢?也是对的,看它是I等于零,节等于零,然后这个是S节加加,注意这个节加加是后加加,所以它会先把这个SI付给s s ti,然后到S结付给这个ti,然后再自增,所以说呢,这个也是OK的。
08:00
这个第四个选项,第四个也是正确的。他是对的对的,呃,因为因为这里是干什么,因为是后加加。后嘉奖。如果它写成前加加,那也会出现D,出现问题,因此最终答案应该选哪个呢?选择C。答案选择我们的C答案,C答案是不能够正确复制的,我们写到这里,C答案第33题,33题呢,又是一个。阅读题程序阅读题这个题呢,大家也要小心对待啊,首先我们看有一个字符数组A,但是它在这就已经表示。表示什么呀?表示字符串结束了,一定要看懂,这是第一个结束标识。那也就是说这个A,它有效的字符其实是abcd,能看出来吗?B呢是IJK,然后它用了一个字符串连接符,那么我们想一想,IJK会考到哪里去呢?它会从,它会从第一个。
09:07
字符结束标识开始考,也就是说他会把这个I放到第一个结束标识,把这个结呢放到后面的这个E这个位置,再把这个K放在E这个位置。说他最后这个结束,呃结结果运行过后这个A呢,A这个其实它应该是什么呢?它应该是这个答案了。就应该是拷贝过去啊呃衔呃,连接过来以后呢,它应该是ABCDJ。ABCDIJK。好是这样子来处理的啊,这样处理,所以说答案呢,就应该选择我们的B,答案第33题应该选择B。好,第三次B。好,我们可以试一下啊,好像我看看好像是不还应该再输一个G出来感觉。因为你在拷,哦对是的,因为拷贝完了过后呢,连接完了过后,它会自动的把后面这个呀,给你来一个斜杠,斜杠里也就是它最后呢,它会把这个也换成一个结束标识啊是这样子的,我们试一下吧,同学们,为了加深大家对它的认识呢,我们运行一下来,呃,来确认一下好不好。
10:19
来确认一下,跑起来。因为这个题呢,很容易让我们产生一个误解,来把这边我们进行一个修改。改成字符串没有问题吧,同学们,那这边呢,来一个中括号。对,中国号等于这边是斜杠零哈,斜杠零。斜杠零这边呢,也来一个斜杠零,这是一个数组。呃,是用初始化的方式来确定它的大小。来改一下。上面这个改完,把这个地方呢,改成一个逗号啊。这个等号应该有问题。
11:00
好,上面这个就OK了,OK过后呢,我们来调用它的一个函数,这个函数呢,是在我们的一个头文件中,哪一个呢?就是string,还记得吧,String头文件。DH。诶写错了,使最。头文件。放进去。好,然后呢,这边我们这边来一下哈,改一下,因为拷拷贝过来过后呢,这些字符都是中文的,所以说有点问题,这边也要改。嗯,好。Print f来这边改成它。OK。这还不如自己再写一遍啊,全部都是粘过来,都是有问题的get,查一下,我们运行一下,同学们看看跟我们想象的是否一样,好吧,因为你确认一下过后呢,才能证明我们分析的是否正确,来看一下。诶,这边有问题。
12:01
应该是百分号S对吧。因为他这个百分号没有识别出来。OK运行。再来看一下。输出我们可以看到它输出呢,跟我们想的一样,ABCDJK正确的,也就是说他把这个覆盖完了之后,最后呢,在这个地方也会把它换成斜杠零在函数会做这个工作好。好,最后答案跟我们分析的完全一样,那就是B答案。那么我们再来看。嗯,好,这个分析我就一边讲一边再再说这个事情啊。好,下面呢,第34题。34题呢,也是一个程序阅读题,也是一个程序阅读也要小心一点,他说以下程序程序程序中库库函数有个no,这个呢用于判断CH中的字母是不是小写字母,看懂了哈,有这个函数是系统函数,我们可以直接来用,然后在这里呢,看有个字符串,AB空格,CD空格,EFG后面有空格。
13:02
这是S这个字符串,也就是说我们S1这个字算呢,里面就是存的AB空格CD空格EFG,好,我就简写了。然后呢,调用一个放函数,调用泛函数过后呢,它把这个S1赋给了我们这个P,也就是说P呢,就指向了我们这个字符数组的第一个。然后他在这边做了一个什么呢?While PI while PI while PI,就是说他其实是在看有没有结尾,有没有到结尾,结尾当然是我们字符串最后有个斜杠零嘛。啊,只要没有到结尾呢,它就判断,如果PI pii,那是刚开始零,那就第一个是判断A,只要这个不等于一个空格杠,看看是个空格,并且一直诺就是它前面这个字符呢,呃,I减一不是前一个字符吗。对,如果呃,这个等于空格,并且它前一个字符是个小写的,就怎么样呢,就做这个工作,大家看这个工作是在做一件什么事情呢。
14:07
是不是相当于把它前面这个字符,如果是个小写的,就把它转成一个大写的,然后I加加,再处理下一个,因此这里面的关键点就是要把这个函数的功能分析出来。我说一下分析哈,就是我们这个函数的功能要分析到位,哪个函数就是这个函数,它完成的任务是。完成的任务,任务或者功能是什么呢?是将。将字符串就是P,注意听P指向的字符串。字符串的空格,空格的前一个字母,前一个字母。如果该字母是小写的,小写的就干,干什么呢,转成大写的。
15:03
就这个意思,那这样子,明明白这个道理过后,那同学们想一想,这这个题实际上就已经出答案了。那你这个呢,来看一下。呃,那同学们看。它这个是个空格,前一个是小写的BA,那就大写的B,空格CD后面是个空格对不对,那就说空格前面这个D呢,就会被改成一个大写的D。EFG不用改,叹号不用改,空格不用改,那也就是说处理完了过后就变成这个德行了,就ada空格cda那B和D呢,变成大写的,其他不变,那我们看哪一个是啊。哪一个是呢?显然这个是。对不对,那就说这个是,那答案就应该是选择我们的C。答案。选择C答案能理解吗?我把C答案放在这里了。
16:00
我们第34题就应该选C,没有问题吧,第35题,35题又是一个程序阅读题,一定要小心一点,这里面考察的仍然是递归调用。分析。这里考察的是考察的是函数的递归调用,那现在呢,我们来画一个示意图,跟着老师思路哈。呃,应该怎么去理解这个图呢?首先我们看第一次调用放,也就是说第一次调用我们这个放函数了。这个时候呢,呃,X是等于七的。七七除以二等于三大于一,于是再去调用我们这个放能看懂吧。放到这个时候是七除以二,显然等于三了,七除以二。取整数肯定就三嘛,三呢,再去调用我们的这个函数,放放再调进来,这个时候X又调用一个放函数。
17:01
这个时候这个X呢等于几呢?等于三。各位同学看,三除以二还大于一吗?三除以二四等于1.5,取一个整数就变成一,一不大于一,不进去,不进去就直接输出这个X,那这里呢,先输出了一个三,我用另外一个颜色表示红色,也就也就是在这个站里面呢,它先输出了一个三。然后再回到上一个函数。回到这一个函数,再次在这个站里面呢,也会执行print f,这次输出的X是这个站里面的X7,于是再输出一个七,那答案就应该是三。对,三七。哪一个是对的?D是对的?好,我把这个示意图给同学们板述到这里来。没,没问题吧。其实很简单对不对,示意图分析的示意图站这来。好,这是我们的一个示意图的分析,然后呢,根据这个图我们可以看出来,应该输出的是三和七。
18:09
选择哪一个答案呢?各位同学就应该选择我们的。D答案,所以说第35题我们应该选的是D,大家看你做出来没有。各位,前面是五个题,我们就评讲到这儿,待会儿呢,我们再讲36题。
我来说两句