00:00
同学们,我们继续来看全国计算机等级考试二级C语言真题第二套。操作题。第二套操作题呢,我们来看一下它的一个题的要求啊,同样我们把这套题呢,先把它放到我们的桌面。这样呢,便于我们的一个分析,然后呢,还有对他的一个解答。首先我们看这道题呢,也是分成了三道对不对。因为我们说过嘛,它上机题呢,也就是说我们的操作题呢,分为填空修改和程序设计,我们来看一下第一个题,第一个题呢,我们来对它进行一个简单的阅读。给定程序。给定程序,呃,干脆这样子,我们简单一点哈,就直接把这个代码拿过来,我们一边讲了一边分析,那这意味着是第二套操作题,所以说我新建一个对不对,EXAM02。呃,然后呢,我们建第一个就是我们所说的填空题,那填空题呢,是EXAM02里面的第一个题,这样子呢,大家一看就很清晰了,就一个标号。
01:10
同学们,我们先写到这这这边是需求对不对,需求呢,我把它包起来就可以了。来看一下。首先我们看它的功能,是它说这个放的功能,这个函数的功能是求输入的两个数中较小的数,说白了就是嗯,求最小数呗,就是两个数面最小数太简单了,比如说我们输一个五和十,那返回的就是五最小。那这个题呢,我们来看一下啊,首先我们看第一个题这里的分析。嗯,同学们看一下这个地方显然是个行参的位置,能看到吧,这是个行参,就一这个位置肯定是行参,那么肯定是行参,行参那就看里面哪个没有给嘛,你看这个Y,哎,同学们看Y是不是你根本都没有给,那肯定要给这儿,所以说因为是个行参,就他需要这个一空格或叫空格一。
02:05
空格一应该应该是一个形参。这个能理解吧,那既然是形参,那就不用说了,肯定是一个int,因为下面都是int,那int什么呢?大家看,这是局部变量。它定义过X呢,是一个行参,所以说就差一个Y,因此这么第一个空格就说填好了第二个,大家来看一下这个是是什么呀?同学们有没有发现这第二个空格其实它是一个三元运算符。什么叫三元算符,是不是前面已经讲过啊,就是当我们这个结果,呃,当这个条件表达式为真的时候呢,就返回问号的第一个,就返回第一个表达式的结果,当这个条件表达式返回为甲的时候呢,就返回第二个表达式的结果,那这个地方二显然是应该少一个问号。对,所以说空格二,空格二应该是什么呢?这里。
03:05
这里应该。呃。应该是一个三元运算。三元运算。那既然是一个三元运算的话,那你看少了一个问号,所以说把这呢补齐成一个问号就可以了,打个空格问号代码写完,那下面呢,我们看第三个空格,第三个空格大家有没有发现它这个看。那也就是说,嗯,这个地方是个SCF,那就说表示一个输入对吧,所以说空格三。空格三是是从键盘,键盘输入值,那输入值显然这方应该填入两个艾特符就可以了,这个能理解吧,就艾特服,那我写一个。艾特A和艾特艾特B。为什么是这两个数呢?因为你你看你后面是不是把A和B传给这个function函数了。
04:01
传递方式放函数,它返回一个C代码,就这样子的,那这样我们就写完了,写完过后呢,同学们这个地方我们就不用测试吧,这太简单了,这有什么可测的呢?就返回一个值,好同学们自己去使使用一下就可以了,所以说最后这个结果空格一个是行参,那就第一个空格应该填的是写到这啊。Int y,第二个填入问号,第三个应该是一个at a和at b。就可以,当然这边应该也少一个这个逗号不要忘了哈,逗号不要忘了,所以在输入的时候呢,要按照它这种形式,把两个输入的值给它分开就可以了,好同学们,那第一个题我们就评价完毕,我们再来看第二个题吧,第二个题呢是一个程序改错题。我们仍然是一边分析一边看结果,好吧,那这样子老规矩,我们把这段代码拿过来,哎,那这样子我把这个结果放这哈。分析的结果就放在这地方了,能理解我的意思吧。这个分析及解答。
05:05
分析和解答。解答。OK。解答。那那么我把分析和解答这个呢,给大家放到我们的笔记里面去就OK了。并不难哈。好,那这个说完过后呢,我们来看下一个题,下一个题程序改错题,那还是老规矩,我们把这一个,嗯,把这个要求先拿过来,好吧,就放在放在我们的VS2010里面,一边讲一边分析,这样呢来的更加直接一点。写一个名称吧,同学们叫EXAM02干什么呀?0202就是我们第二道题里面的第二个题。好,我把这个先放过来,同样我们先把需求呢给它包起来。他这边的要求吧,他说给定了一个函数叫放,功能是计算一除以N的阶层的值,OK,这边阶层N的阶层一定要明白是什么意思,就是代表一乘以二乘以三乘以乘到N这个地方一定要明白哈,比如说你NN输入的是一个五,那N的阶层就应该一乘以二乘以三乘以四乘以五,这个我就不多讲了。
06:20
然后他说如果是五的话呢,应该返回这个值,对好,现在呢,他说改正程序中的错误,其实改正这个错误呢,准确的讲就是说这边肯定有代码有错的,那你要想想怎么错了,来看一下,而且他说了不允许改动main函数。不得增行和三行,就是不允许增加一行,也不删除一行,不得改变程序的结构。那这个呢,我们就来玩一把呗,首先我们看哪里有问题,我们先可以先尝试着运行一下,就是说当你没有思路的时候呢,你先运行一下,看看这个结果大概是什么样子的,我们给他查一下。因为。我们我们先输入一个五,看看它到底此时此刻,在没有修改之前,它返回一个多大的数。
07:05
运行值,然后我输一个五呢,我会发现它返回的是0.0,显然不对,一除以五的阶层怎么可能是这个值呢?那原因在哪里呢?来分析,一边分析一边看啊郭位同学看一下。来吧,分析第一个我们看一下这个放这个函数返回的是个int,你想一下你本身将来返回的是一个什么呀,小数,你居然敢返回因特,那最最后你这个小数会全会被。它会把这个小数点后面给你截取,因此第一个错误已经分析出来了,就是放函数,放函数返回。啊,返回的数据类型。干什么呢?应该是这个大而不能是而。而不能。不不能是什么呢?不能是这个int类型的,这个能理解吧,因为你你要是返回一个in,他直接把后面你就算是写对了,里面没有错,他也给你返回一个零,那麻烦了,所以说第一个我们要改的是它。
08:14
能理解吗?啊返回它,所以第一个我们就分析出来了,呃,第二个我们再来看还有哪个错误呢?大家有没有发现这块应该是没什么错误的,我输一个N进去,然后调用这个function,嗯,这个这个地方不可能有什么错误。那我们再来运行一下,看看这个结果对不对呢?啊,我们我们可能认为就已经对了嘛,但是实际上可能跟我们想的还不一样吗?我们输一个五,发现还是0.00,这不对,为什么不对呢?我们就一行一行的看了,来把这个代码呢稍微的整理一下。对,稍微再整理一下,看的清晰一点,来看一下吧,同学们。我们一句看啊,它这里先定义这个double result等于1.0,如果N等于零,就返回1.0,这个是对的。
09:00
啊,因为一除以一的阶乘就等于1.0嘛,Y循环他说N大于一不允许改变哈,它不允许改变,增加行也和这个减出行都不不许动,那么N大于一呃,N小于这个也不能动,看这里面哦,问题在这里大家看没有,大家有没有发现它这个while循环的本质是。呃,Result乘以等于N加加,这是一个整体,能理解吧,但是非常遗憾的是,他这样居然写了N加加,这就麻烦了。为什么是嗯加加呢。不可能是N加加呀,比如说我传了一个五进来,大家想我传了一个五进来。五大于一小于。170有他的,他可能认为最大的只能是N,最大求到这个170的一百七的N这个这个阶层对吧,它最大是控制这个范围。那你想如果按照这个代码走,如果创建是个五的话,它这个应该这个这个result原先是一,那就是一去乘以多少呢?乘以个五,然后。
10:11
这边得到一个,下次再跟六相乘,再跟七相乘,那就是一大坨了,这个绝对不能使N加加,N加加都往上涨,变得越来越大了,那你本身进来五的阶层应该是一乘二乘三乘四乘五,那你居然往上走了,那怎么可能呢?显然这个地方应该是N减减才对啊。对不对,所以说它这个地方是错的,他原先这个N加加。恩加加,不对不对。因为我们,因为我们求的求的是这个N的阶层,那其实也就是说积就是什么呢?就是一就应该是一乘以。一乘以二乘以三乘以四乘以五。
11:01
对吧,所以说你这个N减减,如果是N减减的话呢,我们就反就它在实际运行的时候是先乘一个N再减自己自己再减一下,那最后。最后他求的是什么呢?它这个地方如果按我们代码走的话,应该是五乘以四乘以三乘以二。乘以一,不这样也挺好吗?对不对,其实这个一呢,乘不乘也无所谓,对不对,假设你这个N减到了一,因为它本身绕等于1.0嘛,所以说它只要是呃等于一的时候,就可以不用再乘了,因为一乘任何数还是本身。所以在这种情况下呢,其实只要N在二这个情况下就可以了。因此,这个结果应该是。把它改成就是把这句话呢,改成什么呢。修改成。对,修改成这个这句话就可以了,好同学们,我们改完了,就这两个地方是错的,然后呢,我们再来试一下,同学们,我们运行一把哈。
12:02
我们去一把,看看结果跟他给我们的是不是一样的就可以了,我们发现等于了0.008333,看结果0.008333正确,好,第二个题我们又评讲完毕,那么同样我把这个分析和解答呢给大家放这好吧。分析和解答。分析和解答呢,我把这个题各位朋友复制到咱们的笔记中就可以了,紧接着我们看第三个题,还是老规矩,把这个题呢拿过来,一边分析一边给大家看答案。这是我们第二第二套题里面的程序设计。来写一个吧,叫exam。零二杠零三能理解。然后呢,我们在这边把这个后缀改一下,改成它好吧,然后同学们我把这个呢修改一下。
13:03
来,先看题。先看题,这个题稍微有点麻烦了,同学们,这个题有一定的难度可以说,所以说大家不要觉得这个二级考试就非常的简单,其实呢,它是有一点难度的,我们来看一下诶。嗯,他说编写一个函数放接收一个一的X,它的功能是干什么呢?判断整数X就是它传进去的这个X是否为同构数,那么他解释了一下,什么是同构数呢?就是说如果是同构数就返回一,否则就返回零,那么一表示真嘛,零表示假,所谓同构数,它做了一个解释,什么是同构数,是它出现在它的平方数的右边。比如说输入一个整数五,五的平方数就是25,那么这个五就出现在它平方数的右边,所以说五就是,呃,五是25中的右侧这个数,因此呢,五就是同构数,那我问大家六是不是呢?
14:05
六也是因为六六的平方啊,六的平方等于36。而这个六呢,也出现在它的平方数的这个右侧,所以七就不是了,为什么呢?七的平方等于49。它没有出现在它的平方数的右侧,因为右侧是个九嘛,不是不是七好吧,所以说这样子我们就明白了什么是同构数了,那大家想一想,它这还有个要求啊,X的只能有主函数的键盘输入要求不能大于100,也就是说我们判断的这个同构数呢,嗯,是在100以内,注意下面的源码给我们了,有有一部分源码,请勿改动主函数。就是main函数命呢,不需要改动其他函数的任何内容,也不须改动,只允许在我们function里面增加。我们若干代码,至于你加多少代码,他无所谓,加三行四行,这个每个人有不同的思路,好,同学们,那下面的老师就开始玩了啊。
15:02
那现在呢?跟上老师思路,我开始来编写。我们来一起编写一下这个代码,来看一下。这个代码如果他写的不是很正规,你可以稍微调一调啊,但是呢,如果不如果不调也无所谓哈,不调也能看得懂,我们来看一下他的思路大概是什么样子的。它呢,输入了一个X是一个整数,如果这个X大于100呢,它就直接退出这个系统了,看到没有。什么意思呢?就是说因为他这要求我们这个不能大于100,大于100的话呢,他就不判断了。呃,所以说他要求X不能大于100,就在这做了控制,那如果X它没有大于100呢,他就调这个function X把这个传进去,根据这个Y来判断,如果Y,如果Y等于一就为真,就是if y就说yes。是一个同构数。L呢,就no就不是一个同构数,那关键这个核心代码怎么写呢?来我们现在要来分析一下。
16:04
分析思路,再走代码朋友们。根据前面这个分析啊,一定要深刻的理解什么叫同构数。对吧,所以说我们这里面最关键的地方就是要去根据同构数梳理出它的算法,就是什么呢?这个地方的考点。考点就是一个,呃,就是根据,就是就是根据什么呀,根据同构数。同构。同构数的定义写出,写出算法或者叫判断算法。这是它的一个考察点,那第一个我们就来分析了哈,那现在我们来分析小于十。的。如果是小于十的这个同构数,大家,诶同构。
17:00
小于十的同构数,大家发现它的平方啊,小于十的这个数的它的平方减去。大家有没有发现规律减去什么呢?减去同构同诶这样同构数本身。就是如果小于十的这个同构数的平方减去同构数的本身。同构数本身与。与什么呢?与。与石曲模。大家看啊,取模干什么呢的结果,结果为零。大家这个能看到吗?假设你有一个同个数小于十的,那么它就会满足它的平方减去同个数本身,再于是取模,结果为零。你比如说举个例子。比如哈,比如说刚才我们看到这个五。555的平方是不是25啊。
18:00
是不是25,那么如果是25的话呢,把这个二十二十五的平方减去同构数,呃,25的平方减去同构数本身就减去五了。等于多少呢?等于20,如果再对十取模。啊,再磨上这个石。再磨上这个四一定会等于零,这是它的一个规律,咱们就找到了,当然至于这个规律怎么分析出来的,这个就要同学们要有一定的算法思想了,就你你要有一定的数学能力,否则的话呢,这个是很难。自己如,如果你把这个条件分析不出来,那就麻烦了。那第二个呢,我们还来判断,所以说我们说二级考试有些题还是比较难的啊,再来同样。就是,呃,就是什么呢,位于这个在什么呢,在十。到。在十到100之的追新一之间的这个同构数。
19:02
同购。它有什么特点呢?在十到100之间的同构数,呃,它的平方。它们的平方干什么呀?它们平方减去。大家看它的特点,减去同构数本身。减去同构数本身与这个100曲模。100取模,那么这个结果呢,也为零。这个结果也为零。所以说我们只需要把它的这个呃,取模的结构取反。取反,我们就知道它到底是不是了啊,只要这两个规律分析出来,那就没问题了,好,现在呢,就可以根据根据这个规律,就是我们说的推判断规律判断同构数。判断一到100之间的之间的同构。
20:01
通过数的这个规律写代码,完成代码。完成代码这个第一个和第二个这个规律呢,同学们自己要去分析出来。同学们自己要去分析出来好了,现在写代码就比较easy了,那写哈,如果X小于十说明呢?它应该是什样啊?它应该是,它如果是一个同构数,也应该满足这个条件,这个条件应该怎么写呢?朋友们是不是这样return一个值就行了。什么呀?Re X起来,我们这样吧。就是。应该怎么写呢?X就是平方,先算出来,就X乘以X减去一个X模,模什么呢?模十。哎,同学们,如果它等于零,是不是代表它就是一个。也就是说,如果它是一个零的话,就代表它是一个同构数。
21:01
那么这样子返回是个零,但是又表示甲怎么办呢?咱们整体对它取反就可以了,能看懂不?啊,这个这样都看不懂,自己慢慢去想一下啊,因为你本身这个结果是零。反而表示它是同构数,但是零呢,又表示甲,怎么办呢?咱们对它取反,直接返回就可以了,好,这个就写完了S。李老师就说这句话的意思就是这个意思哈。这句话就是这个意思,然后else呢,依然return,和上面的代码其实是呃,几乎一样的,只是呢,稍微改一点点啊,这边我们少了一个分号。少了一个什么呢?诶就是稍微修改一下X这个就去磨上100就OK了。能理解吧,代码就写完了,同样一个分号,这边是,呃,如果是在十到100之间呢,它的结果是这个。好代码就写完了,那写完过后呢,同学们我们就可以试一下了,为了为了试能够出出效果呢,我们get一下。
22:04
注意再说一遍啊,如果你的源代码里面,如果你的源代码里面没有get差,你也不要去加,明白了吧,就说你这个给人家给的这个题里面没有get差,你不要加,再说一遍啊,特别提醒注意。在在这个考试中,考试中不能。不能,不能随意随意。随意增加,增加这个令函数的代码就是不能不能不能修改啊,不能修改。不能修改main函数代码,也就是说如果你有这个的话,你试完了过后再把它去掉就可以了,你明白这意思吧?好,我们来试一下。现在呢,我先输一个五判断它是不是,诶这个没有关闭。跑一个吧,来运行。那我给大家输一个五,看这个效果怎么样呗,输一个五它是同构数回撤,然后呢,我们再输一个六,看看它是不是同构数也是好,我们再输一个七。
23:08
七呢,并不是同个数就no,我们再输一个两位的哈。两位的幺幺。好也不是啊,幺二呢,我们我们就再输一个幺二,好也不是好,自己有兴趣自己去试试,我就不一个一个的试了,代码肯定是没问题的,好同学们,那么关于我们这个C语言二级考试的第二套呢,我们说完把代码给它整理一下,在哪里呢?在这块。是不是我们的第三个编程题,它的分析和解答?没问题吧,同学们叫大家认真看一下,这边我有详细的分析思路。就这些题呢,你只能通过多做多练习,你才会有感觉,如果你说完韩老韩老师,我这个将来做上机题的时候,我做的很少,那我告诉大家,你过二级还是有风险的咯。
24:02
呃,当然你要说考一个及格应该问题不大,但是你要拿一个优秀啊,突破80其实还是有点难度的,因为他有些题还是需要动动脑筋的。那各位同学,关于我们全国计算机等级。考试二级的这个第二套上机这个操作题就给大家分析到这里。
我来说两句