00:00
同学们,我们来看。下一套全国计算机等级考试二级C语言真题第十套,第十套题呢,又是一套上机题,我们打开看一下这套题是呃,怎样的一些内容。我先复制一下,然后呢,把它放在我们的桌面上,打开它。我们先来看它的第一,第一道题叫程序填空题,我们还是按照以前的规则哈,把这道题呢,先放到我们的VS2010,我们一边分析啊,一边写代码。新建一个文件夹叫exam。幺零。然后呢,我们新建一个文件。按照以前我们的规则来写。Exam。幺零杠零一。好,然后呢,我们把后缀做一个调整。
01:01
没问题,放这儿。然后呢,我们来阅读一下这个题,它的题意是什么,来看一下。我们先来阅读一下。他说呢?有一个呃,他要我们补充这个幂函数,该函数的功能是计算三个学生。的各个学科的平均成绩,比如说他说呃,这个N呢,大家看到这个N呢,就等于三是一个宏定义,然后M呢是一个五,那也也就是说有三个学生,每一个学生有五门学科,看懂了没有,大家看这是一个学生的成绩,这是第二个学生的成绩,这是第三个学生的成绩,然后呢,他要分别统计五门学科的平均分,分别为84.5 89.5等等。然后呢,部分源码已经给出了,不能改动主函数和其他函数的任何内容,只需要在横线上填写相关的相关的语句即可。
02:00
那歧义我们已经理解了哈,歧义我们级的,我们来分析吧。来,我们一边做人,一边做分析。第一点。第一点,我们可以分析出来N。N表示的是学生的个数。及三个学生能看到吗?第二个同学们看MM表示的是。呃,一个学生,一个学生有多少多少个。多少?多少门学科成绩?学科成绩,其实这地方呢,应该是五个,就说一个学生有五门学,五门成绩,那就代表有五个学科。然后下面呢,我们来看一下啊,我们把这个代码稍微的整理一下好看,呃,Score。这个块呢,就是代表的是给三个学生,嗯,付了他的相应的成绩,看懂了没有,所以这里面呢,我们可以写个注释。
03:03
当然你在,呃,同学们,你们在写,在做题的时候不要在这写注释哈,这个score呢,是一个二维数组。二位数组记录的是,记录的就是,呃,三个学生。三个学生五门成绩。是不是这样子的。那第一个学生就这么多,第二个学生就有这么多个成绩,第三个学生这么多,然后下面这个BB,大家可以看到,这个BB呢是一个数组,它将来会在这里面存放,存放各个。这个BB啊,同学看BB是一个数组,将来它存放什么呢?它存放的就是就是各个学科的总成绩。总成绩就说每每一门学科的总成绩会放在这里面去,然后大家看到既然明白这个道理了,大家看这里呢,它不循环MM是不是五呀,于是相当于说这一步是相当于负负出值,对什么呢?对我们这个BB数组负出值。
04:12
负出值能看懂吧,负出值0.0,然后大家想一想,这个地方应该怎么考虑呢。大家看这里有一个嵌套循环,这个嵌套循环一是做了一件什么事情,大家看出来吗?这个for循环其实它要完成的功能就是要把各个学科的总成绩存放到BB数组里面去,那这个大家就很明白了,那第一个呢,这个地方我们分析出来空格一。好,我们来写啊,空格一我们可以分析出分析。分析出。它它这个循环,循环的这一个范围。它范围应该是一到多少呢?一到N减去一个N减一。
05:02
也就是说它是N减一啊,是一到N减一。有这么多,或者是这样写吧,它应该是如果是这边是个零的话呢,就是N次范围就是零到N。是不是领到N了?零到N当然不包含,不包含这个N了,不包含这个N,呃,零到N不包含这个N就是N,准确讲是N减一。零到N减一。是不是这样子的,如果是因为你现在一共有三个学生嘛,所以他对三个学生进行这个便利,于是这边应该填写的就是什么呢?填写。就是,嗯。说说第一个空格呢,咱们填N。既然你这帮知道填N了,那下面这个必然是M。这个第二个空格自然就出来了,好,第四一个空格二,空格二分析出。分析出它循环的范围应该是零到M减一。
06:04
那如果是零到M减一,那这个应该是填写的什么呢?OK,那就是。填写M就可以了,因为它这个是小于,因此因此它是不包含这个M的,于是就是M减一。那大家看到这边这个for循环结束以后,它其实是把各科的总成绩放在这个BB数组里面了,大家能看出来吗?你看啊,我给大家看一下,第一次这个BB看BB是零。这个零它第一次存放的是哪一个乘积呢?大家看靠II等于零,解等于零,就是把这个乘积先放到这个零零里面去,第一次,第一次先把。第一个学生的第一个学科成绩先放到这里面去。然后呢,大家看BB节又加了一个,BB节就变成一了吧。
07:01
变成一,变成一过后呢,它又是这边是零,这边是一,那就是把第一个学生的这门成绩放到这里面去了。是不是那同同样以此类推了,BB什么呢,BB2。因为你这个是三嘛,BB2呢,就把这个86放到这里面去,好,这个完了过后再接着再接着再来一次循环,就把第二个成第二个学生的第一名学科放在BB0里面去。把第二个学生的91.5放在BB里面去。把第二个学生的第三门学学科的成绩放在BB2里面去,以此类推,那第三个也是一样的道理,第三个第三个来了过后就是干什么呀,对不对,就是把把第三个学生的第一个学生,把第三个学生的第一门学科放在BB0里面去,这最后BB0就应该是三门学科,三个学生的第一门学科的总成绩就在BB0里面去了,看出来没有,所以说这个负循环完了过后呢,其实大家一定要分析出来。
08:13
就是这个循环。你你在分析代码的时候,要把这个分析出来,不然的话你看代码的时候看的比较蒙圈。虽然这个你你分析不分析出来无所谓,但是呢,呃,作为练习的时候,老师多讲一句话,这个循环完后。下面的循环。这个嵌套,嵌套循环后就是将什么呢?将。嗯,各各科各科的总成绩,各科的总成绩放入到哪里去了呢?放入到BB数组中了。就这意思。那下面代码就很简单了,因为你BB已经是各个总成绩了,然后这面它从零便利到MM45嘛,M45,那这个地方就很轻松了,那也就说我们的第六一个空格,呃,不是空格空格六。
09:08
就是计算计算各各各科各科的平均分了,平均分那怎么那就填写什么呢?非常简单,那就BB,你看这个地方是对IG,它用I变量来便利的,那必然就是BBI。BBI去除以什么呢?除以除以学生的个数,因为你学生是三个嘛,那就除以N,因此这边填写的就是BBN除以BBI除以N,那换言之这边就应该写它代码就写完了。那么写完过了,我们来测试一把吧,同学们,我们来玩一玩一下,看看成绩是否是相似的哈,最后这个成绩出来应该是这样的,第一个是84.5,第二个是89.5,第三个85.3运行看一下效果。运行之看效果。
10:01
那么运行完了后,我们看到这个效果呢,跟我们想的应该是一样的,同学们可以看到完全的一样,对不对。你看这边平均成绩第一,第一个学科的成绩是84.5,第二个是89.5,第三个85.3,以此类推,不说不多说了,好,同学们,第一个题的评讲就到这里,我把它呢板书到我们的试卷中去。整一个这边我们插入一个表格,好,这边是叫分析和解答。没问题吧,同学们,放这就可以了。好,第一个题,第二个题呢,我们来看它的一个题叫程序修改题,一样的规矩,我这个题呢,大家不要怕啊,你看起来好像代码很多,但其实呢,因为它是一个改错题,所以说很多地方其实都是语法错误,你把语法一改基本上就OK了,来吧。我还是给大家把这道题放到我们的VS2010,好,先把这边注销。
11:04
然后呢?然后我们新建一个叫ex。EXAM10杠零二没有问题吧,同学们,同样我们将后缀进行一个调整,改成C。朋友们复制一下。我们把这个题干先来阅读一下,看他说了什么事情。他说给定了一个程序猫d.C也就是说你在做。做考试的时候,你打开的程序的那个文件名是猫DC。函数放的功能是用冒泡法,大家还记不记得我们在前面讲高校大学生C语言课程的时候讲过冒泡,用冒泡法对六个字符串,注意是六个字符串,哦,不是六个字符。对六个字符串按照由大到小,注意是由大到小的顺序进行排列,请改正程序的错误,并使他们能够得出正确的结果。不要改动命好,那大家看到,其实从这里面我们已经看到它这有语法错误了。
12:08
但是呢,我们现在呢,嗯,因为要修改,所以说我们需要对这一个程序有一个基本的认识,我来分析一下,我说第一点哈。嗯,怎么来,怎么来做这个题呢?怎么来做这个题呢,我是这样来来分析来分析,首先。首先我们必须啊,必须对源码源码进行阅读。进行阅读。对,理解理解他大致的大致的一个思路,他大致的一个思路,因为就说你虽然说不用全部读完,但是你要理解一个大致的思路,明白这个意思吧,这是我们去改错的一个前提。那现在呢,我们来看一下他到底做了什么事情好不好,首先我们看这里呢,再来分析第二个。
13:01
我们来分析第二句话,大家有没有发现这是一个什么东西啊?同学们,看这是一个什么?首先你要明白这是一个什么呀?这是一个指针数组,就是PPSTR是一个指针数组,能看懂吗?它指向了什么呀?它指向了六个字符串。对,它的它指针数组,它的每一个元素,每一个元素都是一个指针。没明白吗?指向什么呢?指向呃,分别指向。分别会指向字符串。好,这个又分析出来,我们再来看这里,大家看这里有一个STRING6MAX nine,这是一个什么呀?它的类型应该是这样的,写全了是这个是不是,所以说这个使菌呢,是一个二维二维字符数组。那么既然是二维数组,二维字符数组,那也就是说它每一每一个一维数组存放的就是一个字符串,即什么呢?即每每一个元素,每一个元素就就是一个字符串,这点大家要明非常明确好了,明白这个道理过后呢,我们再来看。
14:19
他在这这这一段代码是做一件什么事情,看出来了吗。这这个地方是在做一件什么事?一个负循环,把ss t RI赋给PTR,这个其实就是让指针,让这个指针数组分别指向str的各个元素,这个能能看出来吗?这个一定要阅读出来哈,你要阅读不出来就麻烦了,这个是将让什么呢?让PSTR。这个这个。中的中的各个指针,指针指向什么呢?指向这个,呃,字符串字符串。
15:01
各个字符串。明白各个各个字符串,好,那这个指完了后,下面这这段代码是在做什么事情,大家看到没有,这段代码是不是在循环的输入。循环的输入字符串啊,这个能能阅读出来吗?就这句话,第五第五句话就这句话。我这儿这样写哈。这边是在干什么呢?让用户循环六次输入六个字符串。让用户,让用户输入六个字串,因为你要排序嘛,对不对,这个是能看懂了,下面这句话能看懂吗。这个就是调用我们的放函数,完成一个冒泡排序。这句话一定要看懂啊,同学们,第六句话这个是调用,调用函数完成完成排序。最后第七句话大家要阅读出来,第七句话,你们看这里在做一件什么事情呢?这个是不是输出排序后的,这个就是排序过后的字符串的情况。
16:08
这个能看懂吗?这句话是输出排序后的情况。输出排序,排序后的情况好,那现在呢,我们基本上把这个代码就阅读完毕了,那现在呢,我们就来看这个放函数,来看这个放函数,放函数它是用一个指针数组来接收。来接收哪一个呢?接收接收的两个是匹配上的,你看你这边是一个指针数组,而放函数呢,它的行参也是一个指针数组,那就意味着我们可以通过放函数里面的这个PSTR这个行参来对我们的这个二维数组进行调整。对不对,所以说我们分析出来这个道理了,那下面大家看。这个地方是不是用了冒泡法了,从这里从这个负循环到这开始,整个是一个负循环,它的外层循环是六五次,内层循环是六次,是不是下面这个就是冒泡排序。
17:14
冒泡。冒泡排序好,冒泡排序看懂了,外层五次,内层呢,每一个I在不停的加加,因为它每比一次过后呢,往后面移动一次,那大家看这个地方,我们就分析出来它的一个东西了,哪里呢?来我们看第八点。第八点,同学们看。嗯,从这个地方我们可以看出来,其中的第一个错误已经出现了。第一个错误一。错误一是哪里呢?大家看这里,你想你这一句话,你这句话想干一件什么事情,其实他是想比较。比较两个。两个字符串的大小。
18:01
是不是他要比较两个字分差大小,但是你在这个地方是一个字符串吗。显然它不是一个字符串,它不是一个字符串,所以说这个地方应该是用星号来取这个字符串才行。对不对,所以说这里呢,我们要应该修改,修改什么呢?修改成这样一个情况,怎么修改呢?来看把这句话拿过来,应该这样改了。他要取出它内容嘛,所以说按照前面星号。这样子才行的。说说这边应该改成什么呢?星号包起来。OK了,第一个就改完了,因为你是两个字符串,相比较,你显然是要用取止符来处理吗。明白这个道理吗?那明白这个道理过后,下面这个是不是在交换呢?下面这三句话是不是我们冒泡把这个交换,如果小于零,小于它就是前面这个小于,后面这个就就交换。
19:05
那交换的话,是不是把小的放在后面去了,大的在前面呢?因此这个地方也是错的。错误二又分析出来了。错。这个错误二呢,这这句话,因为,因为他是在交换什么呢,因为。因为是在交换内容,在交换内容。内容,因此,因此也需要也需要需要使用这个取值符号取值。对,要用取值符,那换言之就应该改成什么呢?同学们应该改成这样一个东西,把这句话拿过来,同学们OK啊,把这个拿出来,然后这边呢,我们加一个星号包起来就可以了。同学们改动的地方其实很就是要说改的话就两句话,说白了就是加一个星号括起来就完了,但是为什么这么改?
20:03
一定要理解,就一定要把这个题要稍微的读一读,不然的话这个就出不来,出不出来结果好,同学们,我们来用一用,看看它是不是跟我们想象的一样呢?来朋友们,我们运行一下子,看效果好不好,是不是从大到小。好,这边呢,因为没有关闭,再来看效果,跟着老师思路。跟上老师思路,我现在开始输了哈,我就输几个人名就行了。汤姆。Jack史密斯。然后。HP。然后呢,再来一个Mary。Marry。再来最后一个,因为有六个人嘛,再来一个king。哦,我不好意思,嗨,浪费我的时间啊,不好意思,因为我们这边需要再来。再来一下。好,不好意思,我们再重新来测试一下,快点。
21:00
汤姆。RJ史密斯。King HP,再来一个Mary。回撤。Mary,我们看一下它现在是不是从大到小,T是最大的第一个,S是只M,再次值KJH最小,你看第一个字符就已经。能看出来了。如果说它在第一个字符相同的情况下呢,再比较第二个,因为它第一个就已经区分出来,T是最大的,SD2 MD3 KD4及第五,H第六,所以说顺序就是正确的,答案正确。好,同学们,这道题的分析呢,我也给大家板书到我们的笔记中去,没问题吧,同学们,并不难。上分析解答。放这里,好,同学们,那么第这第十题的第十套题的填空和修改我们就讲完了,大家呢,先消化一下。
我来说两句