00:00
我们来看第三道程序设计题,同样我们对这个题呢,先进行一个阅读。好,我们新建一个文件哈,在这里呢,我们再新建一个文件。新建一个文件,我在这取个名字叫exam。幺七。杠零三。然后呢,把后缀进行一个修改。把我们的题放到我们的这个编辑界面,我们来看一下这道题它说的含义是什么,我们来分析一下。我们这儿做一个分析。首先我们看他提的要求。请编写一个函数,放。该函数的功能是按条件删除一个字符串指定字符一半的数目。这句话其实不是特别好理解,然后呢,他就给了具体的要求,他说如果该字符所包含的指定字符的个数是基数,则不予删除,也就是说不处理。
01:06
如果其数目是偶数,则删除原。串后半部分指定的字符。呃,就是把后面这一部分的给它去掉。啊,这其实还是不太好理解,因此呢,他又给了一个案例,他说其中A指向原字符,删除后的字符呢,指向B所指向字组,那么从这里分析出来,A和B呢,分别是两个字符数组,我们可以看到A是一个字符数组,B是另外一个字符数组,也就是说要把A数组的内容呢放到B里面去。但是呢,有要求。什么一个要求呢?大家看这里。大家看这里,他说当,比如说当A数组输入的是这么一个圈的时候。就A速度假假设说的是a BA BABA。而C这个字符呢,输的是A,那么BB的输出就应该是什么呢?也就是说把这个字符转成这个字符放到B里面去,为什么是这样子呢?你看A大家看有几个呀,一个A,两个A,三个A,四个A1。
02:16
四个是偶数,于是把后面两个A就去掉了。保留了前面那个A,看到没有,他又说了,如果A输入的是AB BABA,那么同学们看到这个时候。我们这里面的A字符有几个呢?我们这个A字符一共有三个,那么如果是三个呢,就不做任何处理,不做任何处理就相当于把A数组的内容拷贝到B里面来,那么B呢,仍然是ABB,所是这样子的好分析,我们就可以出它的要求是讲着的啊,我们来看这个要求,他具体的要求其实就是这句话。
03:00
第一个。这个要求有点不好阅读哈。如果该字符所包含的指定字符是基数,则不予删除即不变,即不变。对,那么那么第二个呢,如果这里如果其指定数目是偶数。偶数则删除原创后半部分指定的字符串,它给了案例,我们看案例,它的案例呢,比如我们A字符,假如说是A,我这样写啊,比如说我们这个A字符AA数组,它是这么一个东西,假定哈,那么它做完了过后呢,这个B数组里面的内容就应该是AB。ABAB。B对,因为把后面那个A去掉了。再比如,他说,假如有这么一个案例。
04:04
有这么一个案例,比如说我们这个A数组呢,是只有。这样一个情况。对,这个时候呢,我们A,呃,A数,它当然这边还有一个,还有个字母是C啊,这有个前提,这个前提如果如果CC等于A字符。是输了一个A这样的字符。那么它最后是这个,同样如果是这样一个字符哈,这样一个字符串,它说的也是给C附了一个A这样的字符,那么B这个数组呢,就应该是这样一个东西,这样一个东西呢,原封不动。AB。呃,ABABAA这样子的,大家理解这意思了吧?这个题其实有一点难度,因为它有点绕,有一点绕好,那这样子我们就开始根据这个思路,我们来做一个分析。我的。
05:01
我的这个完成的步骤呢,我来这样给大家,给大家分析一把,第一步首先大家看是不是要统计A数组里边有多少个指定的字符,这个这第一步要完成是不是第一步首先统计统计A数组中,A数组中有多少。多少个什么呢?指定的字符个数。没问题吧,比如说这个我们统计出来个数呢,假如是,假如我们统计出来是这样一个值,比如说我们统计出来以后呢,我们把它放在一个N里面去。假如哈,然后呢,我们来做第二件事情。如果N是奇数,它是一个奇数。奇数则将什么呢?将A数组的内容,A数组的字符依次拷贝到B数组。
06:07
B数组。倍数组即可是这样子吧,那如果说如果说如果我们这一个N,它是一个偶数。它是一个偶数,这个呢就稍微麻烦一点,如果它是一个偶数呢,各位我们就将。诶,将什么呢,将A。A数组这样写,将A数组的字符。拷贝。将A数组的字符拷贝到B数组,同时要去掉,注意听这句话,同时去掉,同时去掉。后面后面一半。一半到指定字符。这个呢,就有一定难度了。
07:00
那么同学们可以看到,不管是奇数还是偶数,我们都会用到for循环,这个能看出来吗?肯定要用个while循环,肯定要用到循环啊,不管是for还是while,从上面分析呢,从上面分析都会。都会使用到循环,那这里面呢,我们就使用我们就使用while循环来完成就可以了,那同学们大体的一个完成步骤,也就是我的思路呢。就分析到这儿,下面老师开始写代码了。老师开始写代码了,跟上我的思路哈,那么我们怎么来完成这个代码呢?我们首先定义一些定义相关的循环,循环变量和统计变量。啊,你比如说这个N,你得定义起来吧,是不是,那我先定一个I等于零对不对解。
08:00
解等于零,因为待会儿我在循环的时候呢,我肯定是需要这个的。好,我们再定一个吧,比如再定一个N等于零,对,后面呢,我们还需要一个M也等于零。好,后面呢,我们在用的时候再说IJNM表示什么意思,这个N呢,大家看到这个N呢,就代表我们待会儿要去统计的这个指定字符的个数,好那么我们现在完成第一件事情。什么事情呢,郭同学。这样子。首先统计A数组中有多少个指定的字符个数,指定字符就是C吗?C的个数?各位同学在这里我们在统计的时候肯定是要用Y循环的,是这样子吧,我就Y循环了。跟上我的思路,如while,循while循环,I看到没有,只要它不等于一个结束标志。
09:02
我就干什么呢,我就做一个判断,如果什么呢?如果我们拿到的这个A字符,它,呃,就是这个取出来的这个字母就等于C。是不是,那这个时候同学们想一想,我的N是不是就应该加加了。加加完了过后,不要忘了I还要加加,因为你会继续看下一个,所以说这个Y循环结束以后呢,N就拿到了指定字符的个数,这个能看懂吗?其实并不难,对不对,如果它等于C,我就N加加,不然的话呢,我就按照让这个I加加,继续看下一个是不是我们指定的这个C字符。好,那么这个时候呢,我们就来判断它是一个偶奇数怎么办?是不是奇数特别好处理啊。奇数,如果N是个奇数,一次拷贝那就简单了,那我这样写哈啊,如果N模二。各位同学,N模二等于一是不是就是一个奇数,因为它一本身就为真,所以说我们直接这样写能看懂吗?
10:06
N模二,这这个返回一个一的话就为真,我就进行处理,那在这边这个地方,我们在处理的时候,其实呢,同学们也是要变利的。是不是我们在这个进行处理的时候也是要便利的,因此呢,我在这里做一个Y循环。好的,那怎么整呢?是不是我们要开始用这个结了,因为结现在还是等于零的嘛,结。如果结不等于结束符斜杠零。能看懂吗?只要它不等于呃,A节,A节就是我们这个数组了,比如说你传的是这样一个东西,只要它不等于斜杠零,我就将它拷贝到我们的B里面去,B显然不能再用结了,要用I,但是I呢,大家看上面已经已经不再是零了,因此呢,我们上来过后呢,先把这个I重新置为零。
11:01
哎,就是说将I重新重新设置,设置为零。对,那这个时候我们拿到它,然后就将A结给他,能理解吗?好,那这段while循环,你这个一个还是不行的,是不是下面呢,应该还要做一个动作呀,诶我们就看看怎么写比较方便呢。啊,那就结加加吧,好不好,咱们就结加加。叠加加,嗯,对不对,那这样子的话,干脆这样子,我们这暂时不用这个I了,因为I其实这地方如果我们这样写,其实也是一样的。对不对,因为你你结上来过后,现在是零嘛,我们就不用两个变量了,就相当于说反正它就是一个一次拷贝嘛,那我干脆就把A结付给B节,然后结加加也是一样的,能理解哈,没问题吧,同学们,这个地方大家能绕过来吗?
12:03
能不能绕过来对。最后,不要忘了一件事情。Y循环结束后,需要给我们这个B节一个什么呢?结束标志,这点很重要。While循环后,While结束后,结束后不要忘了一件事情,给谁呢?给A,呃,给这个B数组一个结束标志。二就是结束的标志。标识吧,标识。那给他一个结束的标识,那就B节等于什么呢?好的,来一个斜杠零就可以了。能看懂吗?不要忘了这件事情,如果我们没有一个斜杠零,那后后面这个我们这个B节就没有一个正确的结束标志,那将来你在打印B这个数组的时候肯定会出问题的。
13:03
好,同学们,那现在呢,我们已经处理了统计个数是奇数的情况,是不是还没有统计它是偶数的情况,是不是二。对,在这里呢,我们来处理,N是一个如果,如果NN是一个偶数,咱们又怎么处理呢?这个情况会同学们会稍微麻烦一点,会稍微麻烦一点,因为偶数呢,它存在一个问题,要把A数组依次拷贝到B数组中,同时还要去掉后面。一半的指定字符,这个呢就有点儿麻烦,那么跟上老师思路了,这这个地方大家认真听,看看老师怎么处理的,肯定还是用用循环。还是要便利我们的这个A数组。然后呢,然后进行处理。那现在我们怎么来做呢?首先还是编列,那就写一句话了,While语句跟上老师思路,这个稍微有点麻烦啊。
14:04
While,只要AI大家看现在我用I了,因为I呢,现在我在上面已经将其置为零了,所以说这个时候我们又是从这个数组的最前面开始的,能理解不?然后I它嗯,只要不等于结束标尺。我们就去处理,怎么处理呢?怎么处理呢?大家看我的思路,我先大家想哈,因为你这个N是一个偶数了,那至少有一个吧,所以说我们先做这样一个工作B。要这样写哈,就B。B,然后呢节加加。B节加加,然后咱们等于AI。但是这个时候这两个这里ii和节肯定一段时间不会同步,那现在的问题是我们看看这时。
15:00
这个时候是不是在进到这个S里面的时候,我们这个节呢,仍然是零的。能能理解吗?说老师你刚才不是在if里面已经把这个结进行处理了吗?对的,如果在if里面处理了,那没有进行if不就是没有处理吗?那所以说这个时候结呢,仍然是保证零的,所以我先将AI付给这个B结。但是这个节呢,我是加加后加加的,看清楚了,那问题来了,你这样做是不是一定是OK的呢?不一定,因为有可能在某个情况下,你拷贝的这个指定字符已经够了,所以说下面呢还要做处理。后面要进行处理,怎么处理呢?大家看我还要统计统计在呃,统计此时此时拷贝的指定指定字符个数。这个能理解吗?因为你现在你拷贝的字符的指定字数呢,是不能够超过N的,但是你怎么知道有没有超过N呢,你得统计,因此呢,我就做一个判断,如果AI。
16:07
如果AI,它就等于C,说明你在这一次。拷贝的时候呢,其实就拷贝的一个指定字符给他,对不对,那这时我们不用犹豫,不用彷徨,将这个M加加。能看懂吗?加完了过后我们看看。看看此时此时这个M是否大于了N除以二。为什么呢?因为你在这个拷贝过程中,你是不能够大于它的一半的,如果大于一半你就不能再拷进去了,所以说我做一个判断,如果什么呢?大家看我这样写,如果M。M大于了N除以二。N除以二,当然我要包起来。N大于除以二。并且再加一个条件,并且这个时候你的这个I呢,它就是等于C。
17:04
在这两个条件满足的情况下,说明什么?说明你刚才考的这一个是无效的。也就是说你刚才考了这一个,哦不,你刚才这个结加加就不能不能进结加加,要把这个结呢再减回去。这点有点绕啊,为什么呢?为什么要减回去呢?因为你已经超过它了呀,你M已经大于M减二了,那这个时候相当于什么呢?相当于说你你刚才就就是因为你刚才的这个拷贝工作。就是你把一个字符拷贝,拷贝过去过后呢,导致我们这个M已经大于一半了,那这样子的话,说明你刚才这个结节,结节其实是呃,不能够再往后面再加了是吧。就是不能再后面就不能再加了,不能再加呢,我把这个节就进行一个减减。进行一个简介,大家看看能否看懂。
18:01
能否看懂好这个处理完了之后呢,这个工作还要继续,为什么还要继续呢?这个有点绕,同学们注意听哈,因为你想假如你,嗯,比如说你你在这个地方哈,已经拷贝了两个A进去。后面这个A你是要去掉的,这个A也要去掉,但是不要忘了。中间还有个B,你不能不处理啊。你这个B还要给他拷拷贝过去呢,是不是,所以你这个地方还要A加加,你挨加加完了过后呢,诶你又把这个怎么样把这个结,呃,把这个拷贝到这个结上面去了,但是你你一判断又是假如考的又是一个。又是一个就是呃,指定字符的话呢,我们又把这个节减减就完了,所以相当于说他这他来了一次,加了一个又减减,加了一个减减是相当于说没有做处理对吧,相当于说没有做处理就停在这个地方了,只有什么情况下这个结会真正的加加呢?就是你拷贝的它不等于这个C。
19:02
对不对,它不等于C,那我就不会进入到节减减,那不会进到节减减呢,这个BI还是继续能够拷贝A这个数组后面的那些非指定字符能理解吗?OK。好,有点难哈,有点难,但是呢,还OK,这个就写完了,代码我们就写完了,此时此刻while循环结束以后,不要忘了一件事情,还要给什么呢?给我们这一个毕节B数组,B数组一个结束标志。结束标志,好的,那跟刚才是一样,你B结束标志呢,就是我们的斜杠零能理解不,同学们代码就写完了。这段代码同学们看,就是这个函数啊,说实话还是有一点难度的。要拿拿到这一个程序设置设设计题的20分是不容易的,同学们不容易,那同学们,那么我们这一段代码到底写的对不对,是不是应该测试一下呀?你怎么敢保证你一定是正确的呢?来运行一下,给大家跑一跑。
20:08
看看我们这个结果是否跟老师想象的一样呢?首先我们还是用他给定的这个案例来进行测试,好不好就它了。然后我们粘贴复制过来。我们。回车,然后再输入一个A,因为这次呢,假定我想删除的就是A回车。大家看对不对。是不是把后面两个A去掉了,把呃非指定字符仍然拷贝过来的,没有问题吧,ABB完全的OK,我们再试一个吧,我们再试一个,再试一个,哪一个呢,是他给定的这个字符好不好。这个字符串放进去。放进去回车,回车,然后在这里呢,我们再同样出一个A,此时因为A呢,它是一个奇数,因此不做任何处理回车。
21:02
还是Ababa,完全的OK。完全的OK,同学们,那这道题我们就评价到这里,关键点就在这里哈,关键点就是这里,我们把它拷贝过去过后呢,诶拷贝过去过后呢,我要判断这个M是不是已经大于它了啊,如果大拷贝的又是它大于它呢,这个节就减减啊节减。当然有些同学曾经有这样想法,说老师那这个你不是吃饱了没事干吗?为什么这不不直接加一个break呢?能加break吗?同学们。能加break吗?不能加break,你如果加了break,就意味着后面的你后的这一个非指定字符也拷贝不进去了,明白吗?属实地方,这个地方不能加break。明白,好,同学们,那我们代码就写到这里,把代码给各位同学放到我们的这一个试卷中。插入一个表格。这是分析加图解分析和解答。
22:03
各位放这里,那同学们,我们把第17道题呢,也整理到我们的笔记中去。第17道题。这是。放一下就可以了,诶我们把幻灯片打开一下。幻灯片门打开了。放这里来,这是第17道题,我们把第17道题的试卷给它整理到我们的笔记中去,好吧,往下拉一下。记账。诶。好的,我把这个呢放这来第17套题。放好。下拉。OK,同样,我们先把这一个图片给大家复制到我们的笔记中。然后呢,在这里我们指定这是第17套题的试卷。便于同学们今后的一个复习。
23:01
来一个箭头。没问题吧,同学们。然后呢,我们插入一个表格。以后大家只要把这个笔记拿到其实就可以了,对不对,不一定每一次都去看这个视频,因为看视频呢,速度还是稍微慢一点的。我把整个试卷复制一下。然后呢,放到我们的笔记中去,把格式带过来。好,同学们,那么关于第17套题的上机题,我们就给大家讲解到这里,OK,那同学们呢,花点时间把它消化一下,尤其是我们最后这道程序设计题,还是。有一些难度的,希望同学们呢,把它理解完了之后,自己能够写出来,因为你将来在做C语言考试的时候呢,呃,什么情况都有可能遇到,多做一些题,你的熟练度上去了,就做到不变应万变。这个视频,这套这节视频,我们就给大家讲解到这里。
我来说两句