00:01
同学们,我们继续来看全国计算机等级考试二级C语言真题的第三套上机题,那第三道上三级题呢,我们仍然是按照先前的这个方式来跟大家进行讲解,对吧?先把这个题拿过来,我们一边讲呢,一边跟大家进行这个代码的敲写,第一个仍然是程序的填空题,老规矩先把这一段代码拿到我们的这一个VS2010。好,我们还是新建一个文件夹叫CE。零三没问题吧,然后呢,我们新建一个。文件哈,新建一个文件。EXAM0301就是我们第三套里面的第一个题,第一个题呢,也是我们的填空题对吧。把代码放过来。我们先来看一下这个题的具体的要求。看一下他的要求,他的要求是。
01:03
给定程序的功能是求一到1000之内能够被七或者被11整除,但。不能同时被七和11整除的所有。所有整数放在这个A数组A里面去。并通过N返回这些数的个数,那这里面呢,它不管它这地方怎么写的哈,咱们主要是看这个地方应该怎么返回就可以了。他的原因是,但同时不能被。77按他这个代码里面应该是77啊,可能是他这个题给的是有些问题的,不能同,但同时,但不能同时被77整除的,因为他后面不是写的这个代码嘛,是模77嘛,对不对,好,那现在我们开始来编写这个,这个地方应该是不是错啊,这个地方应该是我们嗯给的这个答案粘贴拷贝过来,它出现的一个问题,我们先来做分析,同学们我们先来做分析。
02:04
首先我们看第一个空格,就空格一应该怎么填啊?空格一大家有没有发现它这个地方呢?是把一个只付给一个A数组里边去。那么这个数组显然就应该是我们这些数了呀,那就是应该满足这个条件的数这个I,同学们看这个I是不是经到这个if,以及这个I就是我们满满足我们条件这个数量。是不是,所以说空格一应该填的就是这个I,这个值大家能看懂吗?因为I就是满足这个结果的吗?所以说I应该是I就是满足条件的数,因此这个空格就应该填写I。没问题,紧接着再看这个星号N,等于大家看星号N呢,它是一个指针,这个本身是个指针,那么它是个指针的话,这这个地方应该是怎么样呢?显然应该是加加的关系。
03:02
是不是应该加一下呀,那那加的话呢,就是。要把现在是第几个数放进去,而同学们看到这个节刚好是在加加的。当我们发现一个满足条件数过后呢,我们就把它放在这个节加加里面去了,是不是就放到这个数字里面,而且结加加,因此这个地方呢,就应该是节,你看我这还写了个found啊,这这是我自己后边加的一段,这个可以不要啊,那第二个呢,我们写到这里来。空格二。空格二应该是什么呢?同学们,空格二就应该是结啊结。这里表示填入。填写一个什么呢?填写就是统计,就是满足条件的数的个数。那显然是结了,因为结是在不停的加,加,它原先是零嘛,加加是当前的下标。
04:01
是吧,J它是后加加,因此呢,它是先把这个I放到这个下边为零的这个数组里面过后再把J加一下,因此呢,这个解刚好就是满足条件数的个数,应该是结付给。这个这个N啊,实际上是N这个指针指向的变量哈。好,这写完了,这应该填什么呢,同学们。这又发现一个位置。啊,这个这个放的在写代码的,在给题的时候是没有的哈,是我后面自己加的,那这个放放应该填什么呢?显然一个是填这个数组,因为A大家分析出来,这个A其实本身是个数组,因此这个地方要分析出来,第三点这个A是什么呢?是数组。啊是是一个指,它是一个指针,它确实是一个指针,但是应该是这样写A,它是一个指针,你看这样,A是一个指针,但是它指向的。它指向的是数组。能明白的意思吧,它指向的是数组,所以说它才能够往里面放东西,因此呢,这边应该填AA,大家注意这地方千万不要填地址符了,因为数组名本身就代表它这个数组的地址,所以说不要再填其他的东西,这边应该填一个什么呢?它是一个指针,是要传给这个N,因为它是通过N返回这些数的个数,所以这个地方应该填写一个。
05:26
地字符N代么就写完了。好,我们来测一下。同学们,我们来玩一把,看看这个代码能否像我们想象的那样跑起来,好吧,来运行一下。运行。那运行起来过后呢,我们来输,我们直接看这个结果就行了,看。这就是满足能够被七或者被11整除,但不能,但是不能同时被七、17整除的这种数。就有这么多。好的,这就是我们这一个题的评讲,第一个题就说完了,我们紧接着呢再来看第二一个题是程序修改题。
06:07
啊,还是老规矩,我们先把这个题呢给各位同学搬过来好不好,先拿过来。然后呢,我们再评价。走一个。诶,对,忘了我们把这道题的答案先把它放在我们的。这个试题试卷里面去。来插入一个表格没有问题吧,同学们插入一个表格放进去了,好程序的设计题,哎,不是程序这贴错了,应该是贴到哪个地方呢?应该是贴到上边去。来,查出一个表格。好,我们再来看程序修改题。程序修修改题好,就稍微慢一点,这是速度太快了,滋溜一下就给你穿下来了。好的。那现在呢,我把这个先注销好吗?然后我们写第三套题的第二个题就是改错题,我叫修改题,零三杠零二。
07:03
没问题吧?来走一个C。好的,同学们,我们来看一下。首先呢,我们先来对这个题进行一个阅读,先理解它的题意。他这个提议呢,给的是说我给了一个程序叫Mo c,也就是说你们在实际开发中呢,打开这个项目,其实这些代码是写在猫d.C这一个文件里面的。然后他说了,他要求呢,他说这个放的函数功能是根据输入的三个边长。就是整形,整形值判断能否构建一个三角形,构建的构建是等等边三角形还是等腰三角形或者。或能构建成,若能构建成等边三角形,就返回三,若能构建成等腰三角形,就返回二,若能构成一般三角形,就返回一,若不能返,若不能构成三角形,就返回零。
08:03
OK,那现在呢,就来他就问这个代码有有什么问题没有,我们我们先来看一下哈。这里面的代码呢,首先同学们要分析分析一下哪些地方是关键的呢?就是同学们要明白一点,什么情况下才能构建成一个三角形这样一个东西,否则这个题呢。呃,那做做就有可能做不出来了。就有可能做不出来。好,我们来看一下,对于三角形而言,它有哪些特点呢?我们来做一个分析,第一点要分析出来。就是要根据这个平面几何之呃之时呢,就是任意两边之和大于第三边才可以构成三角形,对不对,就是这点是必须要知道,就是说任意。就是任意两边。两边的和就是任意两边的和要大于大于第三边。
09:05
第三遍。在这个条件满足的情况下,才能,则,则可以构成或者构成。构成什么呢?三角形。如果这个条件不满足的话呢,连三角形都没有办法构建,这是第一个条件分析出来了。呃,所以说我们我们在这个输入一个条件,你看他这里上来过,就做了个判断,这段是对的,所以说你看他他在这呢,就做了一一个判断,所以说这个代码它第一步是可以搞定的,就是如果A加B大于C,并且B加C大于A,并且A加C代于,那么这个条件为真。为真。为为真啊。然后再判断,然后再判断是什么三角形。
10:02
是这样子的吧,哎,是什么三角形。好,那么我们看下面呢,它这有A等于B,并且B等于C,这是不是就三边相等呢。各位同学,这个条件满足满足就是三条边,三边相等。那如果三边相等的话,就构成什么呢?就构成等边三角形。那如果是共成等边三角的话,按理说应该根据这个题应该是返回一个三才对,但是它返回的是一个一,显然这是错了,所以这边要改。啊,所以说这边呢,就应该改成什么呢,OK,改成。改成这个RETURN3。好,我们再来看第四一个,同学们有没有发现?这个条件满足。是不是有至少有一条边是相等的呀?
11:02
这个是等腰三角形是没问题的,这个是对的,不用改,大家看,那如果说这个是这个是改成三,这个改成这个是二,那这个else就应该是一才对。所以说还有个else就。就应该是什么呢,是一般三角形。是不是,所以说它应该因此因此应该把这个RETURN3。RETURN3改成,改成几呢?各位同学要改成一才对的。大家能看懂,不是这样才行,Else这个条件,这个else和上面这个整个这个if是关联的,因此这个也是正确的,所以我们改变的其实就是呃,这个地方改成三,这地方改成一干本就写完了。好,同学们,我们来测试一下啊,看看我们这段代码呢,是否是正确的运行一下。
12:01
我们先输入三边相等。来111,诶这边不好意思,他没有定下来get try一下。再运行一下哦,同学们。我们再来看一下,此时此刻它能不能返回一个三,111,也就是说我三边都为一,那返回一个三,三就是三就是等边三角形。那现在呢,我们再来改一把呗,我们再来改一个,比如说十十,然后这边来一个30,这个应该返回几啊,它是一个等腰三角形,所以它应该返回二。诶,大家看这个返回一个零。为什么呀,大家看出这是为什么?因为你连三角形都构成不了,因为我们讲了三角形它必须任意两边大于第三边,你看这个十加十才20 20大于30吗?不成立,返回零是正确的,我们再来重新改一下。我们这次呢,让它构成一个等腰三角形20 20 30,这个可不可以,是不是已经任意两边大于第三边,同时有还有两边是相等的,应该返回几?返回二没有问题。
13:12
对吧?好,我们再来写一个一般三角形好不好,比如说一。嗯。一。一三。一。一三,然后再来一个要大于第三遍啊。四再来一个三可不可以,哎,不行。再来一个四,这两边不大于它还不行。好,重新来吧。我们来写一个三。三四。这加起来是七来一个六。看一下任意两边是不是大于它六七大于六。十大于三。好的,嗯,对,这个应该就是返回一个一了,因为它是一个一般三角形。
14:00
正确的。可以哈,那这个代码呢,经过这个测验是没有任何问题的。没有任问题,所以第二题呢,我们改错题就说到这应应通过这个测试呢,没有任何问题,我又把它注销一下,同样啊,在注销之前把这个分析。呃,还有解答呢,给大家拿过来。这是这啊,这个叫分析和解答。放这儿,那下面呢,我们再来看第三个题,是一道程序设计题。这道程序设计题呢,我们先来阅读一下它的题,这道题呢,稍微有一点难度。这边要用到一个排序,要用到一个排序,我们先看一看吧。来exam。EXAM0几呢?零三杠零三哈,就是我们是第三套题里面的第三个题。我们先把题拿过来,好吧,先看一下它是什么意思,然后我们再写代码。
15:02
嗯,来来阅读一下这个题吧,他说呀,编写一个函数叫放对长度为七个字符的字符串,除首尾字符外呢,将其余五个字符按降序排列。他举了一个例子,比如说呃,是这个字符串C。和A不动,两头不动,然后中间的五个呢,降序排列,那降序,所谓降序一定要分析出来,就是它的阿斯克玛值。就是字母字,就是我们的字符对应的这个阿斯克玛值,这个要分析出来哈,那大家想一想,这里面谁的阿斯克玛,这五个里面谁的阿斯克玛值大呀。C最大。是不是C,呃,哪个最大呀。那就要看你的这个阿斯克曼表了,我们来看一下阿斯曼表,还有印象吗?打开看一看。打开我们的课件。这边是不是有个资料,资料里面呢,有一个。
16:04
资料里面我看看。那看这边吧。看这边,这边有个资料,资料里面有个阿斯玛对照表,我们看一下。同学们看到这里面呢,我们发现小写字母哈。你看这个小写字母。是越来越大的,比如说G对应的就是103 F呢对应的就是102。那大写字母其实还小一点,你看大写字母K才对应75呢,所以说在阿斯柯玛表里面呢,它先是大写字母。完了过才是我们小写字母,所以小写字母对应的阿斯玛值反而大一些,不要记混了,因此根据这个条件呢,它返回的应该是什么结果呢?应该是EDC,看到没有小写字母在前边,因为它大一点吧,你逆序排列肯定是大的排前面,你说eda大写的E和小写大写的A这样子的好,那现在呢,我们有了这样一个题过后,我们就来完成,同学们跟上老师思路。
17:03
来,我们做一点分析。分析,首先这里面呢,嗯,根据这个题,它的考点是逻辑运算。他的,他是怎么来处理这个题呢?咱们还得动动脑筋。大家想一想哈,这里边儿。实际上就是要做一个这样的工作,就是这样子的,就是本题考点就是对除去。除去首尾。首尾。所谓字符。除去首尾字符的其他字符进行排序。OK,那现在呢,我们就这样子,我们使用什么呢?咱们使用一个选择排序法。选择排序法,但这个选择排序法呢,要要排除对什么呢,注意。注意这里面要注意哈,注意不要。
18:03
不要动,或者不要去,不要去。不要对,注意不要对,首尾首。字符排序。那怎么样才能做到对首尾字符不排序呢?好,我们待会儿呢,我们就来写个代码,大家注意观察就可以了,好,现在老师开始定义一些变量哈,我定义呃变量。哪些变量需要呢?肯定I j htt是一个临时变量哈,那现在我们就来做一个这样的判断,负循环我们首尾不用动,所以说这个I呢,我先从一开始。对,然后I小于number减一。Number是我外层循环的次数。OK,这是外层循环,外层循环写到这儿。OK,外层循环。
19:01
那么外层循环完了过后呢,这边我们就写一个H等于I,这个呢用于保存,就是将I付给。付给这个H,这个后面这个H呢,会进行比较的,就是使用这个S。会进行比较。和和和相关的数相关的字符比较。好,待会大家就能看到了,那么现在呢,我们来进行一个内存循环,内存循环解等于I,这个我们在讲排序的时候,其实是说过这个东西的,对不对,减小于number减一,然后呢,解加加,我们先把代码写完哈,写完。那这一块呢,是我们的内存循环。内存循环,内存循环就是说我要我要在这五个里边,就在这五个里边能干什么呢?诶大家知道我的意思吗?我要在这五个里边首先找到最大值,然后跟第一个交换。
20:03
然后在这四个里边呢,再找到一个最大值跟这个位置交换,就是说相当于我这有五个,我我这有五个。啊,大家听一下我的示这个意图,就是在这五个字符里面呢,我先找一个最大的。找一个最大的呢,跟这个数交换,然后再到这四个里面,再找一个最大的,放到这个位置,再到三个里面再找一个最大数,放到这个位置,再在两个里面再找一个最大的,好,最后这个不用动它,所以说你看为什么我的比较是不是number减一呢?这样子来的好了,有了这样一个结果,这样一个东西过后呢,那下面的代码咱们就。可以这样去写了if语句。If,如果说我们SSH,就是你假定的前面这个数,它小于小于S,来看一下小于S解。在这种情况下。咱们怎么办呢?好,这个时候呢,我们就要来一个这样的动作,这个动作我解释一下啊,同学们注意听我给大家解释一下,就是从字符串。
21:11
到Di加个字符,到到number减一个字符。干什么呢中找出,哎,刚才其实我讲了,找出最大的字符。字符干什么呢?定啊,找出最大字符定将。并将其。其数组它所在这个数组下标啊下标下标负值,负值给H,其实就是在做。这么一件事情啊,在做这么一件事情,好,那这样事情做完了以后,下边呢,我们还要做一个动作,就是if,如果H它不等于I,这又说明什么事情了呢?好,这边我再写一个判断啊,判断判断判断,找到找到的最大字符,注意听最大字符。
22:15
的下标是否下标是否为I。是否为I?如果它不等于I,那么我们就要开始做一个动作,要干什么呢?交换。诶,这个地方我要我要,如果不等于IR就要交换。注意听,如果如果。如果不不等于I,如果不等于I,就交换就交换好,那交换这个语句应该怎么写呢?其实这个对我们来说挺简单的哈,太简单,那就老师直接这样写了,T先把这个H的付给T,注意这个T呢就是一个临时变量。T是临时。
23:02
临时变量。好的,那么先把H这就是现在这个字符数组,呃,下边为H的这个这个字符赋给这个T。因为字符呢,可以当。Int来使用嘛,所以付给T,然后下一边这个动作大家看能看懂吗。然后就把你当前找到的这个最大值。对不对,付给这个H,然后再做一件什么事情呢?诶,再把T给这个H,呃,这个字符下标为I的这么一个元素,这就交换完毕。这就交换完毕了。好的,那这个时候交换完毕过后交换完毕这个代码,我们看看是不是就已经OK了呢。其实核心的代码呀,同学们老师就已经写完了,核心代码我们就已经写完了,那这样既然写完了,那么我们可以来看看这个代码是否能够跑起来呢,能不能用起来呢?我们来试一下好不好,呃,如果不对,我们再调一调,其实这个代码并不是很难。
24:08
啊,并不是很难,其实就用选择排序来运行一下先。运行一下先好。好的,那这时呢,我们就按照他的要求来输吧,他的要求是输这么一个玩意儿。我呢就复制一下,咱们就偷个懒好不好。复制一下我粘贴到这里好吗?好,我运行一下。好,因为没有没有暂停这个窗口,所以说咱们看不到,那这样子在这边呢,我们get char一下。再盖插一下,为什么要get两次对不对?啊,我就不不解释了,再说一遍啊,如果我们考试里边没有写get,你不要自己去加,也就是说你可以这样子测试完了过后再把它删掉就完了,明白了吗?好的,我们运行。运行好运行运行过后呢,我们再来把刚才那个测试数据给它粘过来,回车回车,我们看这个结果跟我们想的是否一样呢。
25:06
OK啊,你看C和A没有动,然后ECD大写的E和大写的A完全的正确,完全的正确,好同学们小的那整完了过后呢,建议同学们把这个撤掉好,如果他原题里面没有这个,你也不要加,好最后把这个分析还有注释呢,给大家板书到我们的。这个试卷里面来。好,这是我们的分析加解答,分析和解答。各位同学,第三道题我们就说完了,那现在呢,我们把第二套和第三道题给大家整理一下。好,这是我们的第三套题,对不对,这是第二套题,先把它放一下好吧。快速的走一下。诶,往下拉。放到这儿呢,利于同学们今后的一个复习。然后这个图我也先拿过来对吧,大家一看这个图就知道是干什么的,好,这是他的试卷。
26:04
就第二套题的试卷。试卷。就是。呃,操作题,操作题第二套。第二套。试卷。好OK,那现在呢,我这边也给它来一个小的箭头啊,这样看起来比较舒服一点,然后呢,插入一个表格。然后我把嗯,就是第二套啊,第二套是我们那个在上次课讲的,我一起把它放过来复制一下就可以了,很简单复制,然后呢,我把它放在我们这一个框框里边去,同样带格式。好,这样看起来大家就清晰了,这是第二套的整理,还呃,这是第二套,还有第三套整理,我们也放一下。第三套的整理呢,就是我们刚刚讲过的对吧。这道题的整理放这儿吧。第三套。
27:01
对,那第三道题呢,我们仍然也是按照刚才那个规则,把它的这么一个。图片先拿过来,这边是第三套题,C语言第真题第三套讲解。试卷。好的。那么这道这道题呢,也是我们的操作题啊,操作题。后面我们还要专门讲。这这个选择题还有很多,大家耐心一点,就是这些题呢,你仔细你仔细去看,你发现有些题还是比较棘手的,也就说你想拿及格很容易,但是呢,你你想拿一个优秀,其实还是有难度的,他还是比较考的,有些地方不小心就会整错。好,然后这是这道题的一个梳理。放这里。同样,我们把格式也翻过来。各位同学,那关于我们第二套和第三套题的一个讲解,还有。
28:00
内容的内容的梳理呢,就给大家讲解讲解到这里,建议大家把老师讲的这些题啊,自己再做一遍,敲一敲好吧,OK,这讲我们就到这里。
我来说两句