00:00
同学们,我们继续来讲解全国计算机等级考试二级的真题第七套,那第七套呢,是一套上机题,也就是我们所说的操作题,我们来看一下。第七套呢,我们来看一下它具体的内容是什么。先把这个题放在我们的桌面上,我们打开。一套三道题。我们先看第一道题,程序填空题。还是根据前面讲课的这个规则哈,先把这道题呢,先拿到我们的VS200。然后呢,我们一边讲一边分析。一边走代码。这边呢,就是exam。那这个是第七套对不对,那就是零七。那现在呢,我们同样写一个文件。这个文件呢,我们就跟它对应上EXAM07杠零幺。对,然后呢,我们把这个后缀进行一个修改,改成C后缀,把代码拿过来。
01:08
代表来过来过后呢,我们看一下它的题型,它的要求是什么,我们来简单的阅读一下。他说给定一个程序。函数放的功能是将N乘以N的一个矩阵主对角线。元素中的值与反向对角线对应位置上的元素的值进行交换。例如,如果N等于三,则有下,呃,有下矩阵,比如说这有一个矩阵是123456789。那么通过上面这个放函数的处理过后呢,它交换成了321456987,同学们看这道题啊,它最难的地方就是要理解这个题意到底是什么意思,如果这个题没有理解清楚,那你下面填空其实是比较困难的。
02:06
那么首先呢,我们在这里来做一个分析和梳理。我们来分析一下。我们来做这个分析。同学们首先看什么叫做主对角线,什么叫做反向对角线,这个呢必须明白,所以说这个呢,我们需要用这个来理解哈,我画一个,呃,还就在这画吧,还还就在这说。比如。嗯,这个地方可能是需要画图了,如果不画图的话呢,我们使用这样啊,使用一个示意图,示意图来来讲解。得明白这个意思。比如说呃,我这里有这么一个。我这里有这么一个,就是。
03:01
矩形,那这个矩形呢,什么叫做对角线呢?就这条线。大家看老师标起来的蓝色的线就是对角线。那么它的反对角线我们应该怎么去理解呢?应该是这条线。大家看这条线,那这条线呢,我们用红色的表示,它要去交换指的是什么地方呢?指的应该是这个意思,就是。一和三交换。五和五交换,五和五交换过后呢,还是自己,但是他应该有一个交换的动作,这边是七和八进行交,呃,七和九进行交换,所以说他这个交换完了过后呢。对,同学们看交换后。交换后呢,就变成了三。二一。然后这边是。456,因为因为五跟五自己交换完了过后呢,仍然还是在相同的位置,下边这一行应该变成987能理解,那同学们,我问同学们一个问题,假如我们是这个N呢,N等于四这样一个句型,它会一个什么样的结果呢?比如说我现在是这样子的1234。
04:21
五六。七八。九。十、11、12。同学们,假如我们句型是这个样子的,请问它交换过后会变成什么?交换后会变成什么呢?我们来梳理一下这个流程,还是找到主对角线,那这个地方就有点不好看了,那为了好看呢,我们干脆都来一个两位数,这样我能对齐,明白我的意思吧。这样讲起来会比较轻松。五。67788。啊,这边呢,有。99这边就十吧,这边是比如说来个十十五好不好,这边来个。
05:08
18那这样子的话呢,我们看主对角线呢,应该就是哪条线呢。好,这回有点对的,有点不齐啊。主对角线。主对角线四乘以四,那就这边是第二个。好,那么还少一个,我是说呢没对齐,还有一个因为四乘以四嘛,它的句型就应该是N乘以N,这边是提给的一个要求,下面呢,我们来写来接着写哈,比如说43。然后呢,这边来一个54,这边来个六七十六,这边来一个98,好这样就OK了,那同学们看这条线就是我们的主对角线,看懂没有,然后呢,它的反对角线呢,就这条线我用另外一个颜色表示,如果说按照它的要求,他交换购应该变成什么呢?它应该变成44。
06:04
22 30 31,也就是说上面第一行呢,11跟44交换,看懂了没有,然后下面这个可不可以交换了呢?下面第二行也是可以交换的,因为他们不是同一个66和77交换,所以说这边就会变成55 77。然后这边是66,这边是88。没问题,然后这边呢,就应该变成九十九十五十。18看懂没有,在下面下面这第四行谁和谁交换,有是43跟98交换,看懂了没有,说这边呢,应该变成98 54 76和43,好明白这个道理过后呢,我们就可以。来分析了,大家看有了就说你把这个题明白了,功能我们再来看就清晰很多,清晰很多来,首先我们看第一个空应该怎么填。
07:08
示意图啊,根据这个示意图。根据示意图分析第二点。同学们看我们我们这边看,首先这个放函数,它在这个地方有一个有个空格,那空格一是不是要参考你,你怎么去使用它的,大家看你这个调用放的时候是传了一个二维数组的。二维数组的一个名称,那大家想这个地方是不是就应该是一个二维数组的一个值啊,也就是说这个地方应该是一个什么样的形式呢?就是它能够接收一个二维数组,所以说我们分析出来了第一个空格,空格一。因为。扣个一,因为调用的形式,为什么呢?大家看它是这样来调用的,对不对。
08:06
它的调用形式是这个样子的。那所以说呢,这个空格一,空格一就应该是就可以。可以接收。接收。接收一个二维数组,这个能理解吗?因此这边应该填什么呢?就应该填这样一个东西,就是填下面你你来看一下是不是它用到这个T了呀,因此应该填这样一个东西。看到没有?填的是它,所以说这个地方填的就是这个值拿下了。因为你下面用的这个T也是按照这个名称来使用的嘛,所以说可以接受一个二维数组,所以说填写。填写这个东西,我们再来看空格,接着往下分析。但是再来看这里吧。
09:01
这个空格二不好,不好想,空格二有点不好想,我们先说空格三。有时候呢,我们这个顺序哈,要灵活一点,空格三,大家有没有发现这个for循环应该是个交换的流程,因为在前面我们分析这个是这个图的时候,我们始终在说谁和谁交换,那从这边从这个代码里面呢,我们可以初步的分析这个for循环就是完成一个交换的任务。所以说在这个空格三这边,这边这个for循环啊,就这边for循环。他是完成。完成一个一个交换任务。能理解吗?既然他是完成个交换任务,大家可以看这个地方是不是他把ii交给S,再把这个交给他,诶大家有没有发现,你们有没有发现这个ii实际上就是我们这个主对角线的第一个元素。
10:03
就是不不是第一个元素啊,应该是这个元素,每一行的开交换的这个元素看。这个元素再下一行就是这个元素,再下一行是不是就是这个元元素了呀。是不是它是这样子来来处理的呀,所以说这边呢,刚好就可以来控制这个值。好,所以说N减一,呃,大家可以看到这个N减I再减一呢,刚好是跟它那个反对角线上那个值,所以说我们可以看出来这个T。I。I。就是主对角线应该是主卧。主对角线对角线。的那个那个元素。是不是这样子的呀。对,那么这个呢,大家有没有发现ti。Tin减,再减去一个一,这个就是对应这一行的就是Di行,应该这样写啊,Di行,Di行,那这个是主对角线。
11:12
D呃,应该是应该t ii是是Di行D行。Di行主对角线的元素,而这个是Di行什么呢?大家要注意分析Di行反对角线的元素。对不对,他刚好就交换,所以说既然是个交换任务,那大家可以看到这个空格三就应该填什么呢?这个t ii交给S了,然后反对角线的,反对角线的这个元素交给了。主对角线的这个元素,然后显然这边就应该再把。这个主对角线的元素付给我们这个反对角线的元素,所以说这边应该填写的是S,看懂了没有?
12:00
这点OK了,所以说这个地方应该填写空格二,填写的就应该是S第四第四一个空格四,这个稍微有点难。空格式这边肯定是来控制我们这一个循环的次数,对不对,所以说这个空格式干什么呢,是用于。用于控制循环的次数。好,那大家想你你你们来想一想这个问题啊,同学们想想这个问题是不是,嗯,就是他第一次进来,这个I呢,就应该等于零。是不是,然后第二次就是一,所以说这个地方呢,我们想是不是应该填写这样一个东西啊,大家看是不是应该填写I等于零,I小于N就可以了。I小于N就可以,那也就是说如果这样填,大家看能否看懂。
13:00
I等于零。然后I小于一个N。I小于一个N,当然这个N呢,就是你传进来的这个具体的值,你看这样子我们是不是就完成这个任务了,你想想第一次进来是T0,是T00。T00和谁交换呢?和T大家看还是第二行零。然后这边是。N减I再减一,哎,N减I再减一是等于多少?是不是就是相当于是四减去一个零,再减去一个一,是不是三呢?诶大家看0003对不对,是不是这两个数刚好是要交换的,我们再来看第二行。第二行这边就变成了一一。而这边变成了一级呢,这边变成了一二,是不是也是这样子的,你看从这边你看是不是第二个就是。
14:01
一一这边是一二刚好匹配,下面这个呢,一样的道理,下面这个呢,大家看就是二二了。来,我们再分析一下,在下一行T。二。对不对,二。是不是这个呀,二二,那么这个二二呢。同学们看这个二二。和谁交换呢?和二,然后这边是四减去一个二,再减去一个一,诶大家看这个地方是不是就变成了一了,那这样子呢,它就是当这个行数大的时候呢,这个就交就反向了,也就是说我们刚才这地方说的还是有点问题的,因为当这个I变大的时候呢,下面这一个可能是反而是我们这个主对角线的值,而上面这个呢,可能是反对角线的值了,因为你看这个是22212和二一是第二行的,你看第二行。
15:04
第二行22224,呃,第二呃,第三行啊,因为。这个下标为二的时候是第三行,那么二二就是他,二一就是它,所以说我们这个注释呢,还有一点小问题啊。第行的主线或者或者是呃,反对角线的元素。下面这个呢,是Di行的反对小线的元素,或者啊,因为这个要根据它的这个I值的大小,如果它超过了一半啊,它就是这边就变成了正对角线的值了,对,或者叫主对角线的值,或者主对角线的元素,好这个就修,修改完毕了,思路也分析完毕了,那现在呢,我们来测试一下。同学们,我们来测试一下,看看效果是否OK,好吧,看效果OK,那下面这些地方不需要我们动,你就别别去动它了,来运行之。我们允许一把。
16:01
运行起来过后呢,我们看效果哦,这边有错误,看哪里有错哈。他说哪里有错误呢?好,我们看一下。哦,应该是少了一个括号,是不是少了一个括号,我们在粘贴的时候呢,这个括号没有拷过,拷贝过来说说我在这加一个括号就可以了。来,朋友们,我们在生成一下解决方案。然后呢,我们来运行一下。然后我们来运行一下。好,诶,这边没有停住哈,没有停住,我们该着查一下。让代码呢,停留在这个位置。运行过后我们看效果跟我们分析的是否一样,看21 24,好,这是一条对角线,这是一条。对线主要是看对角线的数有没有变化,21和24交换。没问题吧?
17:00
嗯,16和47交换。没有问题,下面应该是11和32交换,也没有问题,第四行是42和十交换,也没有问题,答案正确。这个题说实话有一点小小的难度,实话实实话实说,这个呢是有一点难度的,就说嗯,他虽然很难一点,但是呢有一点还是告诉大家,就说因为这里面的核心代码不要你写。所以说难度还是降低了很多,对不对?好,我把这道题的分析还有解答呢给大家放到这里来。好,我插入一个表格,这边是分析和解答。分析和解答,OK,好,第一个题我们就讲完了,我们看修改题,同学们。把这个先退出修改题呢,它是这样子的,来看一下。他说给,嗯,还是老规矩吧,咱们就不用啰嗦了,直接把这个拿过来好吧。这个修改题你看起来很很吓人,其实很简单啊。
18:01
有些题呢,他给的这个题的描述很多,但本身并不难。来,走一个exam。然后呢是零五杠零二。我们把后缀进行一个修改,把代码拿过来。把代码拿过来,拿过来过后呢,我们看一下他的提议是什么好吧。先把题进行一个简单阅读,他说啊。他说,我给了你一个。这样的毛。这个文件功能是读取一个整数,整数的范围呢,也给你了函数get,调用函数RND,获取一个M的随机整数函数short PB,将这N个随机整数从小到大排序,比如说他说我给你一个七,那么七呢会产生七个随机数,然后呢按从小到大的顺序排列,它要求改动下面的代码,我们来看一下哪些代码需要改动。
19:08
这个地方呢,同学们你就不要去把这个源代码再阅读一下了,我跟大家讲哈,注意听,不要再去阅读它的源码,你要把源码都去阅读一下,那就麻烦了,因为哈,因为这个改错,因为改错呢,改错有些。有些。仅就是语法错误。它就是一个语法错误。语法错误。也就是说你先把这个语法错误解决了,如果这个答案还不是正确的,你再去看逻辑错误,如果你上来就去把这个代码先阅读一遍,你的时间就不够了,明白了吗?所以说我们第二个思路就是先解决,先解决语法错误。错误,如果如果语法错误,语法错误解决了,解决了。
20:06
那么答案也是,呃,输出也是正确的,输出也是正确。正确的则则不需要,不需再去阅读源码,再去阅读源码。因为如果说你你上来过后就先去阅读源代码,好这个这段代码我可以告诉你,你阅读的都会阅读很长时间,你的考试时间就会被浪费了,对不对,所以说我第三点就是说。如果我们。这个语法错误解解决了,输出也是正确的,就这个事情就结束了,如果如果语法错误解决了,解决了,但是。但是这个输出仍然是错误的,输出仍然错误,仍然错误才去阅读源码。才去阅读源码,这样呢,我们可以节省时间,我们现在看先解决语法错误,这个地方肯定应该有一个贸易的吧,加进去,好,第一个错误已经分析出来了。第一个错误一。
21:11
就是我们这个short。P这个函数呢,就是原先这个函数。对吧,他应该改成这样一个,前面有一个VO没问题,第一个错误已经修改完毕,第二个错误来看一下同学们,第二个错误呢。看这个地方是不是有一个大写的I,要这个地方肯定错误。说这门应该至少改成小写的I吧。然后后面是不是应该有一个分号,所以说这地方又要改。原先它是大写的一个I,没有分号。这是他的第二个错误。把它标在这里,错误二。把它改成什么呢?各位把这个改成这样一个东西,就是现在同学们看到的TIJPT分号。
22:03
好,现在我们我们现在就可以来阅读一下了,现在代码好像从语法层面就已经没有问题了。是不是如果说现在从语法层面,现在大家看还有还有错误吗?大家感觉还有没有错误啊。好,好像是没有错误,没有错误的话呢,我们就来玩一把,好。就来玩一把,看看是否OK了,先生成一下。好,甚至他说失败,失败,那说明还有语法错误,看哪里错了。看哪里错了。多以忽略多余的,他说多多项对位使用哈,我们看哪里必须定义入口,那主函数有了呀。看看主函数有没有。在这里好,我们这加一个void吧,其实这个VO可以不加也行哈。
23:00
加一个贸易的吧。加一个贸易的,我们再来生成一下。还有,没错,看下。还是失败?还是失败的话呢。下面这个有没有提示错误,我们只能阅读了,这个就有点有点难度了哈,哪里有错误呢?哪里有错误?好,我们再来看。大家看好。大家有没有发现这里面确实还有一些错误,你看这里这个if它是大写的,所以说我们又发现一个错误六。这个还是属于语法错误的,他没有编译器,没有报错,就这个地方。这个F要改成小写的F。是不是if啊,If。把这个改好,改成他。没有问题吧,我们再看还有什么错误?这个编译器有点问题啊,他老报错,其实这地方应该大家一看也应该看出有错误吧,这地方至少有个int吧,说这地方也有问题。
24:05
在哪里?我们的。错误是又发现了。这里面呢,Static后面应该加一个int。要改成他。没有问题吧,同学们,这个还是比较容易看出来的,因此呢,我们在这里加上一个int。来,同学们,我们生成解决方案。现在还是错误哈,这个就没有道理了,应该都全部改完了呀。为什么他老抱?难道我们前面有一些。这个test函数是干什么的?他是不是报的text函数没有啊。这个地方。我们看一下是不是这里的问题。因为我们这边写了很多其他的。哦。
25:00
看一下是不是其他地方有问题呢。三哈,我们看这里面是不是有没有注销的呢。我觉得应该是这个地方。这个text函数在这多余了,我删一下看看。好的,我们再来一下,好,同学们,我们再来一下。再来一想,应该可能是那的错误。再找一下。哦,他这为什么有两个名称呢?当时我们这应该是改错名了。对,这边应该是改错名字了。这个地方这个文件名跟他一样好,那这个地方就有问题,把它删掉吧。好,这样子应该就好了。这边就应该好了。这边是。嗯,不对呀。好,撤回来。
26:00
我们刚才因为刚才是不是我们在建这个文件名的时候出了点小问题,对不对,应该是这这道题应该是没问题,我们先生成一下看看现在有没有问题啊。还是失败,肯定是哪个文件出了问题了。好,现在呢,他说一个都没有,我把这个打开。把这个打开过后,我再来生成一下。再来生成一下。好,那这边应该是哦哦,这边没有这个,这个地方不能注,去掉注释。这边不能去掉注释,好我们再来生成一下看看。好,这次成功了,成功过后呢,我们在重新见一下刚才那个文件,因为刚才呢,就是我们在这个分析过程中哈,刚才我们在分析过程中呢,出了点小问题,把它再重新整理一下就可以了,Exam,然后呢,咱们零七杠零二对不对,好把后缀改一下,刚才不小心这个文件名没有取好。
27:09
然后这边呢,我们同时再把它拿过来啊,改错这个还是很快的来拿过来。然后呢,我们再来看一下刚才那几个错误好。来这边呢,我们把它注释一下,注释完了过后就根据刚才的整理放这vod。对不对,这个改成啊,你看这次就好多了。啊,考多了,好这边呢,这边。有一个分号啊,这次就对了。你看这个方也提示了吧,诶原先是这样子。这样子的还有哪个地方呢?是不是这也提示了,看到没有哦,Int。刚才就是一个文件名的问题,好同学们看一下加上去了,所以说三个错误吧,应该是一个就是这个地方要改,一个是if要改,其他地方应该没有了,我们来get差下来同学们看一下,现在这个地方有一个。这个地方应该不是错,这个地方应该是他的一在我粘贴拷贝过来过后呢,有些特殊字符造成的。
28:07
好,我们再来生成。一个解决方案。好诶,为什么还是错的呢?没道理啊。好,那这个就要注销了。这边就注销好吧,我们再来生成。再来生成。OK,现在是成功了,现在成功以后呢,我们来看一下此时此刻它能否按照这个方式返回我们需要的一个结果,输一个七吧。回车,诶这边呢,我们是不是忘了输,再输一个get。再来,同学们跑起来。再来输一个七,看看这次OK。是否OK,说一个七。然后我们看到这次呢,就正确的,大家看原先的数据呢,它是这个样子的,经过我们这个处理过后呢,变成从小到大的一个数组,OK。那最后我们把这整理一下它的错误是哪些地方哈,来分析第一个错误我就直接写了。
29:07
错误一。错误一呢,就是这个地方要加一个VO。对吧,诶,刚才我们说了这个函数要改成VO。第二个错误。错误二,错误二呢,就是我们这个地方,它原先是这样写的,是写成一个大写的I,然后后面没有一个分号,应该改成int I j PT可以了。好,第三个错误,错误三,错误三在哪里,各位朋友。座山应该是在这个位置。是不是他原先if是大写的呀。这个ii呢,它是大写的,我们应该把它改成这样的。Eve。把这个拿过来。
30:02
把它拿过来,然后呢,我们把if改成小写的,还有一个地方错误,是不是还有哪个地方错误啊,同学们还记得吗?错误是错误是就是。我们在这儿写的这句话哪里呢?对,应该是在看一下static,我记得static这。对,他原先呢,没有给一个int,他最早的时候给的是这样一个值。对不对,然后呢,我们要把它修改成这样的。还是那句话,我们如果语法错误解决了,代码就正确了,就不要再去阅读源码重要的提示。提示,如果我们修改啊,就是修改了语法错误。语法错误,代码输出就正确了,代码输出就正确了,则不需要不需要去阅读源码。
31:03
这样呢,我们可以节省我们的时间。圆满。好的同学们,那关于这这道题呢,我们就讲到这儿,同样把它梳理到我们的笔记中,这是一道程序改错题。分析。分析和解答。完事儿。各位同学,那关于这个第七套的第一部分前两道题呢,就给大家讲解到这里。
我来说两句