任务七 C语言综合训练(操作视频)-湖北省计算机技能高考操作(应会)考纲技能通
|
7份
|
77人阅读
|
0人下载
精品
内容正文:
我们来看一下这道题,将字符串开始和末尾的连续空格删除,然后中间多个空格删除的只留一个空格。那么这道题其实也是一个非常典型的例题,它主要在考察字符串和数组以及我们标志符法的一个方法的运用。那么就是问题这个主要核心问题是如何将中间的多个空格删除了,只剩一个空格。我们知道这里要利用标志符,比如这里给了一个F等于一。我举个例子,比如中间这一串空格,我们将第一个空格利用F把它标记为一,那么后面的每个空格我把它标记为零。这样我们就把中间多个连续空格做了一个区分,F为一的为第一个空格,F为零的为非第一个空格,以此来达到留下第一个空格的问题,或者说留下一个空格的问题。好,这里我们给定的这些变量之后,给定的字符串,我们这里首先读取这个字符for循环I从零开始,SI不等于斜杠0,因为字符串的结尾标志是斜杠0I加加。好,这里读取字符之后,我们在这一串字符串里面能读到的要么是字符,要么是空格。那这里给了c type点H这样一个库文件,那这里我们就利用判断字符和判断空格的函数,这里比如判断字符if is alpha,以ZL法是判断字符的库文件,判断英文字母的库文件,EZL法函数判断字符的函数。那么如果是字符如果是字符我肯定照要,那这里我就利用,在这里还要初始化J等于0J做锤子的索引。那我们就把J兆存进去,SJ加加等于SI好,这里本来还需要写标志符的一个切换,那我们现在先不把逻辑那么深再去判断s if。如果说当前读取的字符是空格的问题,好,那此时空格的问题这里逻辑就稍微复杂一点,我们把它理清。好,可以看到这一串连续字符串最开始读取的都是空格。我们说过我们只把每一个英文单词后面的第一个空格标记为一,其他所有的空格都标记为零。而零的空格我们都是不要的,只有标志符为一的空格我们才要的那所以说我们在这里做一个判断,如果说你当前的F等等于一,我们就应该怎样,我此时是不是就应该去要这个空格,那我们就SJ加加等于SI好,但是去注意你这里第一个空格为一,你要了之后,你是后面的空格的标志符应该为零。那我是不是应该在这里要了之后读取进来,这里是读取的空格,F等于一,表示标记的D空格。一旦把第一个空格存进来之后,我们后面的空格的标志符应该为零的。所以说这里应该马上把标志符切换为零。OK把标志符切换为零之后,后面的空格就无法再接进去了。但是我这里一旦切换为零了,那后面所有的空格都为零了。那我什么时候再应该把它切换为一了?我们可以看到每一个标志符为一的空格前面都是一个英文字符,所以在读取到英文字符的时候,我们再应该把标志符切换回来唯一但是这道题要注意的还有需要一个注意点是啊,本来我们在这里,我应该其实把标志符进行反向过来,这里判断为零,这里切换为一,这里切换为零的,那这里我就不去绕逻辑了,我们可以看到这里前后的空格我们需要删除,前后的空格是需要删除,也就是说前后空格我们是不需要的,但是注意这个位置,我们注意到什么呢?F的初始值为一,我们这里一开始就会进去,所以说就会导致一个问题,T前面会保留一个空格,所以说我们这里把F的值改为零。这里本来我们是不允许改题目外的变量的这是为了给大家讲解这个逻辑。那么F为零之后,可以看到即使读取了空格,可是F不等于一。所以说这里前面一长串的空格我们是不会留下的,也进不去的,当然我们这样写也会带来一个问题,所有的字符后面的第空格都会保留。这样我们先运行给大家看一下结果,print百分号S逗号S好,我们运行可以看到已经成功将所有的将所有的空格都删除。这里为什么会多出来了多出来这些字母了?是因为我们改变了字符串的长度,我们还需要进行人为的丰盈,所以在这里进行一个SJ等于斜杠零这样一个风铃。好运行,可以看到成功的保留了。但是大家可以看到现在program的M后面还有一个还有一个空格。那是因为我们写的这一串代码始终会保留每一个英文,但是后面的第一空格,我们还得把这个空格处理掉。那空格这个空格怎么处理呢?我们既然是在SJ也就是J是在空格后面位置,这个位置空格斜杠0。那这个时候我们只要判断它的前一个位置是不是空格。如果前一个位置是空格,我们只要把J往前走一个风格就可以了。所以说这里再加一个判断,如果说你的SJ减一等等于空格,我们这里只要做一步接减减,将接向前走一步再进行封顶,那这时我们再运行看一下,这个时候后面一个空格就没有了,那么这就是这道题,本质上是在考察标志符和字符数组的一个结合运用。大家以后要掌握这一类的利用标志符去如何达到中间多个相同的字符去只留一个的问题。
好,我们来看一下这道题,题目要求输出100至1000以内,其个位数之和5为5的倍数的数。其实这道题本质上在考数位分离本质在考数位分离。我们要用循环数位分离取出每一个数上的数,然后再进行求和即可。首先第一步取出100到1000以内的数,所以我们用for循环,我们这里还要印的一个变量I我们这里用for循环for I等于100I小于1000I再加。那这个时候用I取出100到1000以内的数,然后此时开始对100到1000以内的每一个数进行数位分离。但是我们这里不能直接对I进行数位分离,因为直接对I进行数位分离会带来一个问题。因为每次数位分离循环数位分离会导致这个数最后为零而影响循环。所以说我们这里要把变量idas给临时变量time,然后去数位分离这个time。所以说对time进行数据分离,我要小括号花括号,数据分离的核心代码time不等于0,然后这个时候我们要进行求个位数之和。那求个位数之和,这个S肯定是往S上面求。这个时候我们在求每一个数的时候,和应该都从零开始。所以说在数位分离之前,我们的和应该初始化为零,然后S等于S加上time模拟10,把每一位取出来然后求和。当然别忘了ten等于ten除以十这个核心数据分离的代码。然后每次进行求完一个数的和之后,我们再判断当前数的和是否为五的倍数,也就是S模以五等于等于0。如果45的倍数,我们就进行输出,print f百分号D逗号I这样即可。然后我们在这个百分号D后面加一个换行。好,我们来运行,可以看到这些数成功输出成功输出。
好,我们来看这道题,编写程序求派的近似值给了一个这样的一个公式,四分之派等于一减3分之1、加5分之1,减7分之1、加9分之1。后面一个省略号表示无限多项,那么什么时候加到哪一项为止呢?小括号里面写的直到最后一项的绝对值小于十的负次方为止。一看最后一项的绝对值,我们肯定要用到绝对值函数。所以说我们首先要引入我们的数学库文件,那么进入井号include max点H,首先把库文件引入,引入了之后我们再来看分析题。可以看到右边等式右边的每一项的规律,我们可以把第一项的一写成1分之1。可以看到每一项只有分母在变化,分母是13579这样的变化。所以说这里我们用I去代表每一项的分母,所以说for循环I等于一,然后I加等于2,也就是I的值每次变化2。这个时候循环条件是直到最后一项的绝对值小于十的负次方为止。所以说我们这里还要用一个专门的变量来表示每一项。因为I表示的是分母。既然I表示的是分母,而分子都为一。所以说如果说我们用T来表示每一项,那其实每一项都可以表示为T等于1.0除以I因为I表示的分母和分子都为一,所以说每一项都可以表示为1.0除以I然后表示完每一项之后,我们这里还可以看到这里为一加一减1加的过程。我们并不能直接把每一项往和里面去求,或者说往这个S里面去加。我们还要应当有一个决定符号来一正一反决定符号的这样一个符号变量。这里给了一个F所以说我们在这里把这个T往S加里面的时候,同时还要乘一个符号变量F那么每加一次符号变量进行取反,可以看到一正一负一,所以说我们这里F等于负F进行取反,那么取反之后才可以达到一正一负这样的效果。既然我们已经用T来表示出了每一项,按照这个题目我们对T求绝对值,FABS小括号T因为T是浮点数,所以用是使用FABST那什么时候为止呢?FST直到最后一项小于十的负次方位置,也就是小于十的负次方的时候终止循环。那么就大于等于10的负5次方时候继续循环。那十的负5次方我们在我们也可以用数学里面的破函数表示,也可以用科学计数法1 1减5这样去表示,这就是这道题,当然别忘了我们最后左边它是要求派,我们现在是求的右边这个等式,那派等于右边的这个等式的结果乘以一个四,所以我们最后S的结果还要乘以一个四。那么最后再进行输出这个S百分号lf逗号S好,我们同样去运行看一下,他说T没有被被初始化,我们这里没有定义这个变量T,我们在这里定一个变量T等于一,可以看到拍的近似结果为3.141613,那么这就是这道题。
好,我们来看一下这道题。猴子第一天摘下若干个桃子,当即吃了一半,觉得不过瘾,又多吃了一个。以后每天都吃掉前一天剩下桃子的一半加一个,到第四天时就只剩下一个桃子了,求第一天共摘了多少个桃子?这一类的题大家可以看到是一个典型的数学应用题。数学应用题几乎是现在C语言的一个考试的趋向。数学应用题它更加考察的是一个阅读能力和一个理解能力。现在考考试的重点基本上都已经往数学应用题上靠了,所以大家一定要重视。那么看一下这道题,其实我想给大家画一个图,大家都明白了。我这里写了两个字,今天前天我这里如果用一个数字,我用一个未知数X来表示今天的个数,那么前天个数我用一个Y来表示,那这个时候我们来分析这个关系。他说每天都吃前一天剩下的桃子的一半加一个。那假设前一天有外格,那我们总共吃了多少个呢?那肯定是典型的吃了一半一半,就是二分之外还要多一个,那就加一。那么这个是吃掉的,前一天吃掉的那既然前一天总数有Y个,然后吃了二分之Y加1,那我们还剩多少个了?那就用总数减去二分之Y加1,那这个等式化简就可以得到结果为二分之Y结果为二分之Y减1。这个是前一天还剩下的那前一天吃剩下的那就等于今天的个数。那么可以得到一个关系,X等于二分之Y减1。然后同理我们将这个等式化简将这个等式化简可以得到这样的一个结果,X加1乘以一个二等于Y那可以得到这样的一个等式关系,前一天的个数等于后一天的个数加一的2倍。那我们参照这个关系去倒推第一天的个数就可以了。然后我们还要理解的是总共有十天,那总共有多少个吃的过程呢?其实是十天减一也有九个过程的。因为第一天到第二天这是吃一次,第二天到第三天这也是吃一次,那么到第十天总共经历了九个这样吃的过程。所以说我们相当于把这个关系进行倒推九次就可以了。按照这个说法,我们在这里for循环,I等于1,I小于等于9I加加小括号花括号。然后将刚才我们找到的关系,也就是前一天的个数等于后一天的个数的和再乘以2 2倍,我们最后再输出这个整数,print FY根号D逗号S好,我们一起来看一下。结果为1534个正确。那么这道题其实不难,但考察主要是考察对于这个题目的理解,以及你的数学基本功,看能否我们利用未知数去推出前一天和后一天的关系。
好,我们来看一下这道题,编写程序输出如下图形。我们看到这个图形是一个典型的金字塔图形。我们把这一类的图形叫做画图题,也叫做文本做图题。这一类的题型是其中高考常考的考点之一。对于文本做图题,我们要牢记两句口诀,外层循环决定行数,内层循环决定列数。然后找出行数与列数的关系即可。我们看到图形有五行,所以说先决定外层循环,I等于1,I小于等于5,I加加外层循环决定行数,先把行数确定,内存循环决定列数和循环J等于一,J小于等于。那这个时候我看到第一行的时候,I的值为一,而图形有一个。第二行I的值为二,而图形有三个。第三行I的值为三,图形有五个,其实可以很快的,我们把这些数字列出来就可以很快的找到的。规律为二倍I减1,然后添加加我们输出这个位置的星星。好,但是别忘了我们这个星星不会无缘无故的出现在它所在的位置。因为我们平常输出的图形都是贴着控制台的最左边,让星星无不会无缘无故的去离控制台的左边缘隔开这么多位置。所以说前面必然还要将这些所谓隔开的这些空白当做空格来进行输出。这个时候我们以最长的一行为贴着最左边,往上依次为一个空格、两个空格、三个空格、四个空格。我们其实也可以很快找到空格的关系与空格与行数的关系。同样把空格和行数的值列出来,我们找到空格的关系为5减I所以说我们在输出信息之前也要输出一个五减I这样的一个循环的一个空格。我们进行queen f空格。好,这个时候我们运行来看一下,可以看到是一个如图所示的金字塔,这就是这道题。
好,我们来看一下这道题,编写程序输入一个整数N将其反序组成新的数值并输出。那么这道题在考察我们考点非常重要的考点之一,正序反序。那么正序反序的考点几乎占到了济南高考C语言里面考点的半壁江山,每两道题几乎就有一道题是在考察正序反序。当然不会只考察正序反序,通常会结合自己其他的知识点一起考察。那么反序和正序的代码我们要牢记,反序T等于T乘以10加上A那么正序代码T等于T加上M乘以A,那这里输入一个整数,我们在这进行了输入,将其反序组成新的数字并输出。所以说我们要进行首先进行数据分离,再进行反序,把每一个数字取出来进行反序。那时候首先就是数字1 well小括号大括号,我们这里输入N对N进行水分离,N不等于0。那么数学分离的过程中同时进行反序,就T等于T乘以十反学代码T等于T乘以10加上要进行反序的数,那么N除以一个十,因为N乘以10是在把每一位取出来的过程中同时去乘以T等于T乘以十这样的一个反序。然后N等于N除以10,这是反序的核心代码。最后输出我们的反序,获得数百根号D逗号T好,我们运行一下,比如我们输入一个456,反序生成654,那么这道题很简单。
好,我们来看下这道题。向整形数组A10中输入十个整数,请使用冒泡排序将其排序后再输出。那么排序算法也是算法题里面常考的考点之一。排序算法主要考察冒泡排序、选择排序、插入排序插入排序、冒泡排序是考察最多的那我们再来回顾一下冒泡排序的核心思想,外层循环决定比较的轮数轮速等于数组长度减1。内存循环决定比较的次数,比每轮比较的次数等于速度长度减去当前的轮数。然后卖方排序的核心思想是前后两个相邻的数。两两比较来说,参照这个冒泡排序的核心比较逻辑,我们在这里进行输入之后,开始进行比较。外层循环决定比较人数I等于1,I小于10。因为比较人数等于数组长度减一还是再加,然后内存循环决定别的次数。那for循环J等于一,J小于等于数组长度减去当前的轮数,数组长度为10,当前轮数为I然后J加加。但是这里我们要注意就是内存循环这个阶变量,同时还要做取出相邻两个数的索引值,所以说它必须从零开始。因为数组所以索引值从零开始。这里一旦从零开始,意味着次数多增了一次。那前面加了一次,那我们后面把这个等号去掉,那么就减少了一次。然后进行两两相邻的两个数比较,if a上AJ怎样?AJ加1,那这个时候这里的大小符号就比较灵活了。如果说你是取大于符号,那我们就是一个降序。如果说你这里写一个小于符号,那我们就是一个升序,那我们假设是小于符号要进行升序排序。那如果前面的小于后面的那我们就要进行值的交换。T等于AJ,AJ等于AJ加1,然后AJ加一等于一个T,然后这里是使用的time,我们把这个time的改成T好,那这里比较完成之后,题目要求我们还要输入,还要输出。那我们在这里进行输出print f然后在括号DAI好,我们运行一下,我们在这里打一个横杠运行一下,比如我输入十个数十五二,我们随便输。可以看到现在是一个由大到小的顺序进行一个排序的。好,这就是这道题。