00:00
同学们,我们继续来看全国计算机等级考试二级C语言真题第11套。第11套题呢,仍然是一套上机题,我们来看一下。还是把这个题打开,我们来看一下它具体的题是怎样的。双击打开。这是我们的第11道题,我们首先来看填空题,好,我们先把这道题呢拿过来哈,拿到我们的这个VS2010。一边讲一边分析,走一下。我们新建一个文件夹exam。幺幺。然后呢,我们新建一个文件对吧。这是我们这套题的第一个文件。幺幺杠零一。然后我们修改一下后缀。找一个,首先呢,我们对这个题现在做一个阅读,看看它是一个怎样的意思哈,他说呢,他下面已经给了一段程序,其中有一个函数放放的这个功能是干什么呢?输出M行M列整数方阵啊,他说把这个整数方阵给你说出来,然后注意听这句话,然后求两条对角线上的各。
01:23
元素的和返回尺和数,也就是说它要求大家干什么呢?把一个呃矩阵,把一个把一个方阵的对角线的和求出来,就这么一个事。那么我们来做一个分析吧,还是在这来做一个分析,一边分析一边写代码。嗯,首先我们看空格一。啊,我们我们就以这个为例,我们就以这个为例,它看它是1234543,这个我们先把这个方阵打出来。方正。方正如下。
02:04
方正正是这个阵是吧,把它这个方阵。这样方正写到哪去了,方正诶,怎么回事,这个。把帮阵输出来。那么如果说如果说这个方阵是这样子的话呢,我们算一下它结果应该是多少,比如说它这边是12345,这第一行对不对,那么第二行呢,是这一行。是这样子吧,同学们对第二行第三行呢,是67890。这是又一行。然后呢,再来看一行。酒吧。这一行,然后第五行。是这样子的,好,那如果我们看一下这个结果,它所谓的所谓的对角线的和,就其实就是这这一行和这一行的和,那么这边有个八重复了,怎么办呢?那要算两次。
03:04
对,那算,因为他说的是对角线上的各个元素的和嘛,那我肯定就要算两次了,因此因此这边呢,它这个和就应该是等于多少呢,各位是不是这边就是一加三。加八再加一个六,再加一个七,这边呢,等于25是不是,然后这条边这条。这条对角线是五加一加一再加八。再加八,再加一个八,是不是这边一个八再加一个三。这边加起来是多少呢?同学们能算出来吗?这个是不是算出来也是25,因此总共应该是50。只要你将来算出来是50就可以了,那下面我们就来开始做,下面继续分析。来第二个分析。分析空格,我们这个空格一应该怎么写呢?大家看,因为你将来这一个放函数会返回一个结果,这个结果呢,应该是个整数,对不对,因为放函数。
04:12
放函数会返回一个结果。是什么类型呢?是特类型的,因此这个空格一因此。空格一应该填入什么呢?对,应该。应该。填写int,也就是说这边咱们就应该写成int了。能看懂哈。我们再来分析下一个,大家看这里,这边有一个空格二,这个空格大家有没有发现它将来会返回一个sum,大家看这边是不是一个sum return一个sum,那显然sum你都没有定义啊,没有定义那肯定不成哦,对不对,所以说我们空格二呢,大家看出来。就是因为。
05:00
因为放函数,放函数中会返回上,那需要什么呢?需要事先定义定义,因此这个地方应该填什么呢?啊,所以说要填写这样一个东西,填写上,呃,那么这个上大家看到在这个这个上在后面它是没有付出值的,因此你在定义的时候就得负出值对不对?所以说应该填上等于零,那换言之,空格二应该填写的是上等于零。没问题吧?那下面这段代码看啊,这段代码是在做一件什么事情,大家能能看懂吗?这段代码是不是在输出我们这一个矩阵的原始原始数据,这个能看出来吗?就这段代码就是老师亮出来这段代码是在输出这个矩阵的原始情况,那下面这段代码肯定就是在求和了。
06:01
这边就就在求和,所以我们第四个空格空格四啊,空格空格三因因为这一段代码是在求和,也就是说这这个地方这里面啊。大家想一想,应该怎么怎么做呢?这是最关键的地方了。这边是求什么呢?求对角线。对角线的和。那么大家想你能找到对角线的和是什么关系,他看到它这个公式在便利我们整个这个N肯定就是将来传进来是什么呢?这个N传进来的,大家看是不是就是从这边传的MM就是N,就是N是代表我有这个这个矩阵是有几行的。因为你将来传的这个N就是M嘛,所以说N就是五。从这边可以看出来,N是五。N45。对不对,同学们,N是五。
07:02
那既然N是五的话呢,其实它就是便利。这五行。是不是在便利这五行,也就说相当于说第一行,第二行,第三行,第四行,第五行。那么既然是这样子的话呢,是不是我们就应该找到第一行的这个数和这个数,第二行的三和一,第三行的八和八,第四行的六和八和六,第五行的第五行又是三和七了,是这样子的。因此这个关系咱们就找到了,怎么找呢?所以这时这个空格,空格填写什么呢?应该是这样写的,大家看能不能理解,它应该填写的是嗯,X。哎。Ii然后还是同一行,行不变,行不看列这里面该填什么。
08:00
大家看,如果你是第I列。如果你是D,那么跟它对应的在同一个对在对角线的应该是怎么写呢?是不是就应该是N减I再减一。这个能看出来吗?你你你算一算是不是这样子的,比如说。这两个应该相加,比你比如说大家看看我这样给大家给大家捋一捋哈,给他捋一捋。就是。哦,你看第一次进来I等于零就是它嘛。然后这边还还是同一行,N减I再减一,N是不是五啊,五减去I等于I等于零,再减去一个一等等于四,第四一个是不是五就找到了,所以一和五就算出来了,那么当I等于下一次变离过后,I就变成了多少了呢?I就变成一了,所以说I就是1111的话就是这个数。那么这个数,那这个五减去一个I,再减去一个一,这等于三,三是哪一个呢?就一。
09:02
是不是就这样子的,再下一个是不是八呀,再下一个是不是I就是六,那么N减I再减一是不是就是八呀。你算嘛,你自己可以算一下,所以说这样子就能把这个问题搞定了,好,这是一个最关键的地方,好不好,这是最关键说空格三填写。填什嘛都填写嘛呢,填写这个。没问题吧,填写它,所以说我们这边就填写他就完事了。分析到位,那最后呢,我们是不是要测试一下了,我们来get。这段代码最关键的地方就是你要分析出来这个东西,其实前面空格一和空格二我相信同学们都能写出来,主要是空格三这地方你要找到对角线的规律,也就是说你要找到规律。找到规律才可以,否则你完成不了,那同学们运行一下,跑起来。运行之,那运行过后呢,我们看一下效果跟们想的是诶有问题有错误哈。
10:04
哦,这边还没写完是吗。X。呃,他为什么说这儿错呢?他说X没定义个,哦哦是XX,我这怎么少写了一个啊,呃,是哎,因为你这个数组是X和两个X,所以说这呢,我写成一个X,这是不对的,这是不对的。现在应该没问题了吧,来运行一下看效果,看最后返回的结果是不是等于50,诶同学们可以看到它原始的这个方阵是这个样儿的,然后求出这一个对角,这两个对角线。的和就是50,自己去算一下,同学们,那第一个题填空题我们就评价完毕,给大家梳理到我们的这个试卷中去。这个呢是分析和解答。分析和解答没问题吧?同学们,我们再来看他的修改题,老规矩,先把这一个修改题呢拿到我们的这一个VS2010来。
11:05
来写一个文件吧。名字我们还是按以前的规律来写就行了,EXAM11杠零二是不是第二个?第二个就是我们的叫做什么呢?改错题。改错。来我们来看一下这道题错误在什么地方啊,一拿过来其实大家就看看到了,其实改错的有时候如果是语法错误还是很容易改的啊,我们看第一个错误。他说什么呀?他说放函数的功能是判断两个指针所指向存储单位。存储单元中。的值的符号是否相同,注意啊,它判断的是符号是否相同,不是判断两个数是否相同,一定要认真的理解题意,如果相同返回一,否则返回零两,若这两个存储单元的值都不为零,他说好了,都不允许为零。好,那现在呢,我们来分析一把。
12:02
分析第一个。首先我们可以看到呃,错误一一看到错误一放函数,放函数有返回值。返回值是int类型的,因此呃,我们这个函数要修改一下,就是这个地方要改成什么呢?改成int,第一个是不是就找到了,所以说第一个呢,改成int。因为你有返回值吗?第一个第二个第二个错误大家看我们再看错误二。就凑一。错误二,大家有没有发现这个地方两个行参怎么可能这样写呢?这不允许,除非你是定义,而现在是形参,形参不允许这样写的,就是放函数。放函数,函数行参格式错误。是不是应该怎样改呢?把这个改一下。把这这种形状的格式改成double,应该写两个double能理解不?那又改一下。
13:05
好的,第二个改好了,第三一个错误。那么再看这个错误三。同学们看这里啊,这地方语法都已经提示你了,你看你这个是A乘以B有意义吗?A是一个指针,B也是一个指针,B指针和指针相乘是什么含义啊?没有意义,它肯定是两个值相等,因为它判断是符号,注意看啊,它判断的是符号相同,因为。大家看这里,因为是判,判断符号是否相等。那我问大家一个问题。如果两个符号相同的话,是不是它们相乘是大于0.0的?如果两个符号不相同,那就不会大于零,因为他说了它的结果,它存储的是不是为零的,因此呢。这两个数它都不允许用零来书写,就说传进去的A和B呢,他所指向的值不能为零,所以说它两个,如果两个符号相同,那么就应该是零点大于0.0。
14:10
对不对,你看两个正数相相乘,你看我们举个例子,我们举例子,比如说你是1.0,这是2.0,这两个相乘肯定是大于零的。如果是一个1.0,一个是负的2.0,那肯定是个负数,就应该小于零。而且人家说了两个数里面没有一个是零,所以它一定是大于零,连等于零都不用写明白了吧,好,所以说现在呢,我们知道了。因此这个地方他写错了。这个地方它本意是什么呢?他本意,他本意是是让A和BA和B指向的。对指向的值相乘。对不对,是它的值相乘。相乘。
15:00
对,所以说你这边就应该改成什么呢?OK,改成这样就可以了。走一个,怎么改呢?把这句话拿过来。前面这边打个星号括起来取值嘛。这边再打一个星号括起来就可以了。改成这个德行。因为这才是A取值符取取,取出A这个指针所指向的值,这个是取出B指针所指向的值相乘好。那这边呢,将其修改空一个格包起来完事。同学们就写完了。代码就修改,那我们试一下看看能不能用哈,我们仍是get。再给他看一下,因为我有输入,我要有一个过滤回车,朋友们试一下。现在呢,我输两个正数。我说两个字数,诶这地方看一下它怎么隔的。哦,这边有个问题啊,他这边给的时候这边没有打空格,这个不行,不好不好测试。
16:02
好,关闭一下,我打了一个空格。打了一个空格,打一个空格过后呢,我们再来测试就可以了,比如说一,比如说这是一个1.0 1.1,这边是一个8.9,一回车返回一正确的,我们再输两个符号不相同的。两比如是负的一,十,再来90回车返回零正确。就两个符号不相同呢,返回零,两个符号相同返回一,这写的很清楚了,相同返回一,否则返回零,答案结束,大家看这个题是不是完全是送分题啊?这一个改错题还是非常非常简单的,但是呢,也要求大家要对我们这个指针要一定理解,有些同学甚至这样改了,我看到有些同学这样改的,他说诶老师不对,这样子等啊把这个去掉,这个不对,人家人家不是判断两个数相同,人家是判断符号是否相同,明白了吧。这样子不用你不用改那么多哈,不要改错了多画蛇添足,就麻烦同学们我把这一这道题的分析,还有它的解答呢,给大家板书到我们的这套题中。
17:09
好分析和解答。分析和解答。好,放好,同学们,那这前面两道题填空和修改我们就讲到这里,下面呢,我们就准备讲程序设计题。
我来说两句