00:00
同学们。我们来看第。第十题啊,第十题,第十题呢,它也需要我们阅读一下源代码,我们看一下。他说有一个main函数,Main函数里面有个char a等于零,CH好,然后呢,有个Y循环在不停的读取我们一个char。然后呢,大家看这里有个不等于斜杠N,就代表只要没有没有遇到这个回车,是不是只要没有遇到这个回车,我就一直读取。那么读取的时候它是怎么做的呢?大家看这里A模二如果不等于零,并且CH就是我们获取到的这个字符呢,是在A到Z之间。我就做件什么事情呢?就CH,就等于CH减去小写的A这个字符对应的阿斯克玛,再加上大写的A对应的阿斯克玛,诶,这件事情在做什么事情呢?能读出来这句话在什么事情吗?我们把这句话只要读懂了,其他就不在话下了。分析关键是要理解这句话。
01:08
就这个语句呢,大家能读懂它在做什么吗?它其实啊,它完成的功能,你要分析出来,完成的功能就是就是干什么呢,将。对,这样说将获取将这个应该怎么说呢。呃,就是将呃呃得到的奇数位的啊,奇数位的那第一个是零嘛。第一个是零,第二个是一,所以说它应该是将奇数位的。激素位。啊,激素位。到字符,将奇数位的字符进行判断。进行进行判断。如果是,如果是小写的,小写的A到Z。A到Z就干什么呢?就注意听,就转成转换成什么呢?转换成大写的字母。
02:09
OK,为什么是大写呢?你看它减掉一个小写的。A对应的阿斯克玛,再加上大写的A,我们知道小写的小写的大阿斯克玛是97,而大写的A呢,是65,它们之间刚好相差32。所以说呃,那相当于就是CH减去一个32。而。对于这种小写的字母而言,它减去一个32其实就变成了对应的,呃,大写的字母,但是这里面应该写成对应的哈。对应的对应的大写字母。对应的大写。是吗?好,那呃,这个只要分析完毕了,其他就不在话下,因为它转完了之后,A加加,A加加完了再读取下一个,直到遇到一个回车。
03:00
然后每读一个就输出一个是吧。那这个就简单了,那我们来判断一下哪些是奇数位,并且是在这个之间就OK,那就把这个拿到了。拿到我们来看一下。第一个是一啊,它,而且第一个呢,本身是它对应这个零对不对,A等于零,零模二呢,都已经不等于零了,所以第一个没问题,第二个刚好满足条件,因为这个A啊,这个A对应的到时间A加加完了就是一模二了,它就不等于零嘛,而且他又在A到小写的A到小写Z之间,于是又转换成大写的。然后这边呢,转成大写的C,这个呢大写的D,这个呢,这个不处理,因为它是二啊,它是二你就不用处理了,呃,再往下面来一个吧,F大写的F大写的F就OK了,也就是说他最后输出的结果就是这个。它输出的结果输出。的结果就是这玩意儿能看懂不?那我把这一个结果呢,给大家复制到这边来好吧。
04:08
非常简单,我们紧接着看11题,也是一道程序阅读器。那他怎么说的呢?他说这有一个一位数组,好,我们可以把这个一位数组先画出来,好吧。这个一位数组里面呢,存放的十。9876。五四。三二一十个数。那这个时候呢,呃,AA是个数组名称,所以说A呢就指向它了。OK,然后在这里大家有没有发现它进行一个for循环。这个for循环大家能看出来它一共进行几次吗?它一共进行了I等于一,I等于二的时候进行一次,I等于一的时候定取一次I等于零的收集,所以这个负循环一共有三次。
05:00
对,那三次的话呢,它怎么调用呢?它每次调用的就是把它对应的这个元素的地址传进去,那么I等于二的时候,其实I等于二,I等于二的时候,其实就是第几个元素呢,就是八。也就是他把这个八这个元素的地址传给了我们的这一个,呃,这个形参A,那这个时候有个形参A哈,就指向了他。那注意这两个A呢,不是同一回事,这个是我们的行参。这个是我们的行参是个指针,而这个呢是个数组,就是它是在主函数里面的,这个是在幂函数里面的啊。Me,这个这个是幂函数里面的A,这个是我们哪一个呢?是这个放函数里面的这个行参A。这个大家能区分吗?肯定能区分出来吧。不是很难,然后呢,我们看他在这个行参里面,他做什么工作呢?他把A1付给A0 a1的话,就说他相当于在这个他自己行参所指的位置上,往往这边移动一个,其实就是七嘛,相当于说把这个七这个数值付给这个八,于是这个七就变成了多少呢?啊,这个八就变成了多少呢。
06:17
八就变成了七。第一次就结束了,好,紧接着呢,I就变成二啊第一啊,第一次是I等于第一次是I等于二进来的。第二次呢,I减减变成一,还要进来一次,因为一大于等于零成立的,那这个时候。哎,这个时候这个行参就不再指向这个了,这个行参就指向了这个九。对,在这个九里面呢,他又把自己的下下一位付给这一位,所以说这个九呢,也会变成七,能理解不?啊,又结束了,然后这个I呢,变成零,变成零过后又进去,这时I等于零的话,就应该是十了吧,也就是说这个行差。
07:03
就是想死了。这个行参是指的放函数里面这个A,这个行参啊,它是个指针,然后他又把自己的下一位付给这个,所以说这个十也变成了七,那最后呢,函数就调用一,一共调用了三次方,函数就结束了,然后他又在这里去。用这个main函数的AA这个数组的名称来遍历这个数组,那显然就应该是777654321,这个能看到吗?说最后输出的应该是七。七。77654321答案就是777654321。好的,我把。刚才的一个分析过程给大家截取到我们的笔记中。这是一个分析过程。分析示意图。
08:01
因此最后这个结果哈,我们总结一下输出的结果,输出的结果是什么呢?七。7776543。二一好,那我把这个就放到这里了,好吧。七我就这样写一下,就是77776543221,好的,因为它在输出的时候,这没有空格,那就连在一起了。第11题我们就评讲完毕,看第12题。12题这个题呢,他说请将程序中的函数声明语句补充完整,这个就太简单,它已经都告诉你是一个函数语句声明,那这个就没什么可说的了,你看这里面,它这里面是不是调用一个放函数啊。这是一个相当于是个函数指针,对不对,他把这个max付给这个P,那就简单了,直接就在前面把函数声明写一下就可以了。
09:01
完事了,对不对,非常的简单好,所以说根据根据。根据题意根据题意。就直接直接做一个声明就行,直接对max函数函数做一个声明即可。答案就是他完事好,完事后面这个分号你不要再加了,因为分号人家已经给了,所以说你只需要填上这个函数的声明就可以。13题。啊,13题呢,以下程序用来判断,判断指定的文件是否能够正确打开,请填空,那这个就太简单了,我们是不是讲过,如果这个函数对,如果这个函数呢,它呃,返回的这一个呃,文件指针是一个空值,那么就代表没有打开,否则就代表打开了,我们分析一下以前讲过。以前讲过f open f open返回的文件指针啊,如果是非非空的非诺。
10:08
则什么呢?则如果是非闹就是表,则表示成功。表示成功,否则表示失败。这个能理解不?那根据这个分析就好好简单了,就说你看如果等于空就代表未能打开吗?那所以说我们这应该填写什么呢?咱们这填写一个no就行了,No代表空对不对?Nu l l完事,14题。14题这个题呢,它说下列程序运行的结果是什么,这道题啊,也需要我们阅读代码它,而且它考察的是一个什么呢?就是结构题,结构体的相关内容我们分析一下。这里。这里考察的考察的是结构体。结构体的一个传递方式问题。传递方式问题。
11:01
我们我们来看一下他是怎么来玩的哈,来跟上老师思路。嗯,我们一步一步分析画一个图,首先这有个AR,这是一个他先生明的一个结构体啊,类型叫A,然后这边是一个函数F。注意这个函数呢,它接收的不是嗯,结构体这种变量,而是结构体指针类型,看清楚没有。RUA星号T,我们以前在高校大学生C语言课程里面讲过,如果结构体它是指针的方式的话呢,它就是传递的指针,或者说地址,这个一定要清晰,这里面一定要分析出来啊。这里。这个F函数就是FF函数接收接收。的是什么呢?是结构体,结构体指针。指针一定要非常清晰啊,因为结构体默认是值传递,但是一旦你这明确写的是指针,那传的就是地址了,所以说传递的是什么呢?传递的是地址。
12:10
OK,好的,那明白这个道理过后,下面我们看这句话,它这里呢,定义了一个A这样的一个结构体,里面是101啊,这个这样一个名称,然后1089号,如果说这样子做完了之后,我们可以画一个内存图,相当于说这有个A。OK,那么这个A呢?它指向了一个结构体,这个结构体里面包括三个成员,是101。然后呢,有个张啊,我先写啊CD,然后呢,有一个字是1098,能看懂吗。没有任何问题。好,紧接着呢,调用这个函数F传了一个艾,呃地址符,那这样子的话呢,呃,我们其实是把这个A的地址传给了T,这个能理解哈,传给了T,也就是说现在有个T这个变量,它也指向了这个结构T,当然这个T因为是指针,其实它本身是有一个空,有一个空间存的是这个地址,也就是说我们这个A的地址假如是,呃,假如说这个A这个变量的地址是0X1122。
13:18
那么这个地方存的就是0X122,所以说这个T呢,就指向这个结构体了,明白这个意思吧,所以说我简化就说T指向它,明白不。这个我我在原先我们高校大学生。课程里面讲的很细致的,如果这块忘了的同学可以看一下对应的那段视频好不好?我这儿就不再多说了。找到这里面过后呢,他做了一件什么事情呢?大家看他在这个F函数里面用了一个string copy string copy呢,他把这一个字符串。他把这个拷贝到了,拷贝到了T,呃,用这一个是这个是成员访问符,TB就是这个BB是哪一个呢?B就是这个串,也就相当于说把这里面这个内容。
14:05
原先的。嗯,这个字符串换成了长容,好,那我就换成C,我就简写啊CR。好,C2。好,这个就结束了,那结束以后呢,它函数调用完了过后,他又输出A,输在这里面,又去用这个A去访问里面的成员,那显示第一个是1001,第二个就是最新的那个长龙,然后是1098,您明白了吧,所以他最后这个结果我我们可以通过这个示意图就一目了然了。根据这个示意图分析示意图。那分析示意图呢,我们看到这一个结果写到这来哈,是。结果是什么呢?那结果其实就是。嗯,我看一下。结果就是第一个就是101,该怎么输还还怎么输1001,然后呢,一个字符串就是这个。
15:08
然后后面的这个值1098.0这个不变,1098.0没有任何问题吧。那这个时候,所以说输出结果我们就直接写出来就行了,1001逗号有没有逗号呢?呃,要看这他这这地方是有逗号的,所以说有逗号。逗号完了过后,我们就应该输出这个长龙。没问题吧,逗号1098.0。好的,最后结果就应该是这个,看看大家听懂了没有,一定要明白,在这里呢,他传的是一个结构体指针,也就是说它这个T呢,就指向我们这个,嗯,这个main函数里面的这一个结构体的,呃,具体的内容哈。就是这个T也指向了main里面这个结构体就明白了。第15题,15题呢,我们我们可以试一下,有些同学呢,可能有所怀疑,我给大家试一下啊。
16:06
我跟大家运行一下,打消大家的这个。啊,不开名打消大家的一个疑惑,这为什么错呢?呃,所以呢,我们应该少了一引入了一个东西,显然这是不是错误啊,STDIO这个不是不是他他要考察我们的地方,ST Di IO好,我们可以运行一下。运行呢?为了看到这个结果呢,我们来一个get。同学们看一下。就是证明一下我们分析是正确的。刚才我们分析的结果是101长荣,109890完全正确,好,正确的没有任何问题。我们再来看下面这个题第15题。15题呢?它考察的是一个简单列表。这个链表呢也很简单,我给大家分析一下就可以了。它它是什么呢?他说以下程序把一个no type。
17:01
呃,把一个not type的变量呢,练成一个简单的链表,并在while循环中输出链表节点数据中的数据域中的数据请填空,呃,空只有一个,我们来看一下它是怎么做的吧,跟上我的思路哈,首先第一步他在这呢。大家看这里。这句话能看出来干什么吧,这句话定义了一个结构体,结构体类型叫no,里面呢有有两个域,一个是数据域data,一个是next域,这个next域呢,就是指向下一个节点的。Type DeFine是这个地方应该省做type DeFine呢,是给我们这个load重新取了一个别名,叫no type。哦,这是曲别名。画上。OK,然后呢,主函数它通过一个no type呢,定义了ABC3个结构体变量,还有一个H和P,然后下面呢,进行了一些一些复制哈,我现在就可以画内存图了。
18:02
跟上老师思路啊,现在有三个结构体变量,一个是A,跟上我的思路A。A呢,里面它放了一个十。好。然后呢,又有一个B。跟上我的思路啊,B呢,里面放了一个20代塔一放了一个20C呢。C塔域放了一个30。没有任何问题。好的,然后呢,他让H指向ha,也就是说现在有一个变量是它是一个结构体指针指向了它。然后呢,a.next等于B的地址,也就是说呃,它的这个域结构体里面有个next域呢,就指向了它。说的再直接一点,就是这里面放了一个地址,就是这个next呢是个地址,这是个地址指向B,比如说打个比方,这个0X,假设0B的地址是0X11,那么这个X呢,这边填的就是0X11,明白了吗?
19:04
啊。明白了哈,应该不是很难,紧接着呢,它有b.X指向。C的地址,假设C是0X22,假如说哈,那这边呢,就在这填了一个0X22。也就是相当于呢,这个X又指向了C。好,然后呢,他这边让这个P指向H,也就是说现在有一个指针PA就指向了我们A这个节节点。这里用了一个while语句。外语。呃,最后还有一句话啊,c.X等于空,也就是说它在最后这方织了一个斜杠,零。表示我们的一个结束,表示这个链表的结束,然后while while这个P呢,显然它判断它怎么P,肯定就是等于它本身地址了嘛。因为这个AA节点也有一个例子,比如说0X是四吧。
20:03
啊,或者叫五五。他判断这个是不是为空呢,不是不是为空,它就输出这个P指向的这个月,那显然这输出十了。然后呢,这就说P,呃,取得它的这个就是十,所以第一个呢,我们应该输出十。那问题来了,他这么就要我们填一个东西,让这能够让这个P呢指向下一个节点。那大家觉得应该怎么填呢?往下指是不是这只要填一个P等于。等于什么呢?P等于。P一个箭头next就可以了。那你也吧,加这句话。因为你P等于next,那就相当于说P,呃,把P的next指给到这个P,那P就不就指向这个B这个节点了吗?指向这个节点过后呢,P不是没有到结尾再输出这个20,输出20过后再把这个。
21:03
20这个这个next再付给这个PP,又指向了下一个节点。又把30输出,30输出以后呢,再给的时候,再给他一次,就给了个斜杠零,斜杠零呢就是就是零值,零值就退出,因此这个地方其实应该填的是P等于P一个箭头next。啊,也就是说我们要填的是这样子的一个东西。填这个。就OK了。好的,同学们,我把这个示意图给大家画画下来,好吧。这题呢,有一点点难度。但但其实也不是很难,对不对,分析清楚了,其实不难。因此,我们填写的。对,听。填写的是嘛呢,就是P等于P点啊,不是那啊那一个箭头。箭头next就可以了,那我写上了。
22:02
就是P等于P。箭头next,那么我们来试一下呗,就说这个东西你你做完了过后,你你是不是要测试一下呢?我们可以测试一下。看看老师分析的是不是正确的哈。哦,我把这儿加点东西,嗯。这边少了个逗号,显然他考察的不是这好。这边。这边是什么玩意儿啊,多考了一个这个。不要这个,这是我自己填的。是不是这样子的好,那么为了看到这个效果呢,我来一个get叉,让它停在这,我们运行一下看效果应该输出的是十二十和30就正确了,否则咱们就错了哈,十二十三十完全的正确,完全的正确,好的,那也就是说我们这个分析呢,没有毛病,没有毛病填的就它。能懂吗?各位同学,那到此到此呢,我们第19套,第十十六套的。
23:00
选择题,我们还有一部分填空题就给大家讲完了,我们把它板书到笔记中去好吗?给他拉一个号。这是我们的真题。我们将其放在笔记中。这样呢,便于同学们今后的复习。看一下这是我们的第16套,往下拉。好,这是15套,那就是16套了,放这就可以了。哪一个?放这16套题的讲解。全国计算机等级考试的第16套。这都是真题,同学们。你看这个整体有一部分题呢,还是有点烧脑的,就是如果你不小心很容易呃被他,被他那个迷惑是吧。啊,我们来看C语言真题16套。试卷。我把试卷呢给大家放到这里。好的。然后我们加入一个表格,把前面讲的16套所有的内容拷贝到。
24:05
我们的笔记中去。好,内容有点多,稍等一下。往下拉哈。拷全了,不要少东西了,因为这边有些图片,这些图片能够帮助同学们理解。好,我把图片也一并发过来。把格式带上。好,稍等片刻。因为这的图片会稍微慢一点。同学们,那么关于我们第16套题就给大家讲解到这里,大家呢,把这套题好好消化一下好不好?这这节视频就给大家讲解到这里。
我来说两句