任务五 C语言数组(讲解视频)-湖北省计算机技能高考操作(应会)考纲技能通

| 11份
| 58人阅读
| 0人下载
精品

内容正文:

我们来看一下这道题,编写程序,使用冒泡排序将数组10进行降序排序。那么使用冒泡排序或者说排序算法是技能高考常考的考点之一。那么现阶段你要考三类排序,冒泡排序、选择排序,还有差插入排序。那冒泡排序我们只需要记住这三句话,这三句话已经给大家总结归纳出来了。第一句话就是外层循环决定比较的轮数,内存选举内存循环决定每轮比较的次数。第二句话,比较的轮数等于数组长度减1,比较的次数等于数组长度减去当前的轮数。第三句话就是内层循环变量还需要做索引值,所以必须从零开始。这个时候我们参照这三句话来,外层循环是决定变量轮数,轮数等于数组长度减1。那么I从一开始I小于,那速度长度是10,减一就是9。那么I小于10I加加,这是外层循环决定比较的轮数,内存循环决定比较的次数。For循环J从一开始J小于等数组长度为10,然后比较的轮数为I那就10减I加1加加。然后循环里面只要主要在做两两比较,那就是拿J去做比较。If AJ它这里要进行降序排序,也就是当前面比后面要小的时候,再进行交换,AJ小于AJ加1,然后进行直接交换,T等于AJ,AJ等于AJ加1,然后AJ加一等于T好,第三句话内存循环必然还需要做索引值,所以必须从零开始。所以内存循环的J必须要从零开始。一旦从零开始,意味着循环次数则多了一次,等号去掉,那么这就是冒泡排序。 我们来看一下这道题,编写程序将数组A10的重复的元素去除去重有很多种方法。那么我们现在要讲的这种方法是还是两两比较的方法,那这个时候我们需要理清一个问题,当两个数不相等,比如说拿着第一个数和第二个数,它们两个不相等的时候,或者说它们两个相等的时候。举个例子,比如我把这里改成一,那此时这两个一相等的时候,我要保留的是哪个位置的一,很显然是第一个位置的一。第二个一我们要把它把它覆盖掉,或者说用不同的值把它覆盖掉。也就是说第一个数字不管是相等还是不相等,我们始终是不会动它。也就是说不相等的话,比如说这个一和二不相等,我们要把不重复的数字进行向前存储,进行达到覆盖的目的。那就是说我们如果说第一次找到不相等,我们要存储的索引为哪里?为J为J这里我们搞清楚之后,我们来看,这里我定义了一个I给定义了一个J这里其实I制作读取值的代码,读取值的索引,而J是做存值的索引。好,按照这个逻辑,我们去先去读值和存值。既然你的J的为零代表是第一个值,那我们I就要从一开始代表,从第二个值I小于10I加加,然后拿我们的AI和AJ去比较,那我们要去从那去重,就是要的不相等,那就是AI不等于AJ好,那AI一旦不等于AJ的时候,我们要注意,我们刚才强调过了,我们存值要从第一个索引值为一的位置开始存。因为这原始的这个一索引值为零的这个一,我们不会动它,但是问题是存值的索引接下来为零,那也就是说在不相等的时候要想存值,我们得先把J的值加一再进行存储。我们不重复的值。照这个逻辑我们来看一和二不相等OK,那此时J加加J变成一了J从零开始变成一了OK我就把二存在了A一的位置。好,那下一次I加加I也变成一了。好,那我们此时是不是就是I变成二了,那此时是不是就是A2和A一进行比较,也就是二和2比较,它们两个相等OK在这个位置不会执行J也不会增加I会增加I就变成谁了?I就变成3,也就读到这个字了。那此时他们两个比较不相等,OK j再加加J就变到了二的位置,然后就把三存到了二的位置,那么以此达到了去重的目的,当然我们最后读取值的时候,I从零我们只能读到J的位置,只能读到J的位置,千万不要读到数字的末尾。因为是我们只是去重,只是改变的读取的范围,并没有真正的去把这个数组后面重复的值把它去掉。我们在这里输出print f百分号D双引号A中括号I,这里需要注意,这就是去除这个方法之一。 好,我们来看一下字符数组。字符数组其实和整形数组没有什么区别。整形数组是用来存放整数,那么字符数组就是用来存放字符串。因为C语言里面没有字符串这个概念,所以说我们通过字符数组这种方式来解决没有字符串的一个问题。概念就是用来存放字符的数组称为字符数组。第二个定义就是关于字符数组和整型数组。最大的区别就是字符数组是以斜杠零作为字符数组结束的标志。那么这就会带来我们读值上有了更多的一个方式。除了使用索引值从零到数组长度减一这种方式来读取数组之外,那字符数组就多了一个斜杠0,也就是我们读取字符,当读到斜杠零时,就代表字符数组已经读完了。也就通过有时候也就是多了这种这样一种方式来读取字符数组。那这个时候斜杠零给我们带来的影响就是在我们在定义数组时要注意。举个例子,比如说我们还是定义字符数组,定义字符数组时,那这个时候我们有几种定义方式,有两种。比如说现在差一个A中括号3,那此时就代表我要定义能够存放三个字符的数组。那这个时候我们使用花括号这种定义方式来定义的时候,那这个时候我们就要注意,比如说我现在第一个字符A,第一个里面有一个字符B里面还有一个字符C采用这种花括号方式来定义的时候,我们就不需要单独给这个斜杠0的位置。因为斜杠零是作为字符数组的结束标志,我们得给它留位置。但是这种使用花括号定义的方式,我们是不需要得给斜杠连接位置。也就是说这个位置为几,字符输入长度多少,我们这里就有几个字符。另外一种就是使用双引号字符串这种复制方式的话,字符串赋值定义方式的话,那这个时候我们就要注意,我们是需要给斜杠链接位置的。举个例子,比如说同理现在我差一个A7,那此时双引号此时虽然这个位置的数组长度为七,但是我们要留出一个字符给我们的留出一个字符的位置给我们斜杠0。所以说我们此时这个字符数里面还能保存六个字符。那这个时候就要注意ABCDEF,我们就只能存储六个字符,就不能再多存储一个。其实我们是日常更多使用的是我们把这个长度也会自动把它取消掉。比如说我们会这么写,嵌一个A中括号等于双引号,ABCDEF. 因为这种方式更加简洁,而且更加的明了,也主要是为了方便,这是字符数组一个定义方式,主要就是两种区别。第一种是花括号包含的单个赋值。另外就是我们的整体复制,用字符串的形式这种复制。这两种的区别就在于上面这种我们是不需要给它留位置,而下面我们是需要给斜杠0留位置。那么使用跟我们整整形数组是没有什么区别的,还是使用宿主名中号索引值存放数组名,索引值等于新值。还有一点区别就是关于字符串长度的问题。字符串我们有一个单独的函数叫string函数,STRLEN小括号里面跟上数组名,那么这个函数的作用就是返回就是返回字符串数组或者说字符串的长度。但是使用这个函数我们必须要引入一个头文件叫井号,include STRING点H,要引入这个头文件我们才可以使用这个函数,这个就是字符数组。 我们来看这道题,在有序数组之中查这样一个有序数组,并且这个数组是个升序中查找关键词为89的元素,并返回该元素的位置。我们需要注意的是,位置和索引并不是一个概念,所以从零开始,而位置从一开始。通常解决这类问题,我们采用的是折半查找法,我们就把它称为二分查找法。也就是我们既然是有序,我们要查找某个数字,我们直接从这个数字的从这个序列的最中间开始找起。判断最中间的这个数字和我们要查找的数字的一个大小关系。然后通过不同的大小关系去采用缩小我们的区间。到底是左半区间还是右半区间,就取决于它们的大小关系,来不断的去缩小我们的查找范围,从而提高我们的查找效率的一个方法。这个时候我们要查找的元素为89。这个时候我们要查找的开始位置为索引值为零,查找的终止位置为索引值为九。这时候我们为了循环开始查找,那这个时候我们来定义。首先我们要从最中间开始查找,中间位置的索引值就是int me等于我的left加上我的right,去除以一个2,那么这就是我要查找的起点,我的me的起点。既然查到B的起点,那这个时候就会和我要查找的元素产生一个大小关系,那时候我就要做判断了,if里的A你的和我的要查找的X刚好两个相等。那两个相等说明什么?说明是不是刚好碰一下就查到了,查到之后我就把它要终止循环。当然此时我们要输出一下,输出这个的值的位置,位置为百分号D那么这个位置就为逗号MID加1,要加一的原因是因为位置比索引值大一,那么除了碰巧一下子找到了,还有什么关系呢?就是L衣服如果说你的AB的是大于我的X的。好,那也就是说拿这个程序的例子来说,我现在要查找的这个值比我中间这个值要小,那就意味着我马上要缩小我的取值范围,或者说缩小我的查找空间了。那么后面的值是肯定会比中间的值越来越大。那既然要查找的值比中间值要小,说明它肯定藏在左半区间里面,那也就意味着我们要下一次查找,要在左半区间进行查找。那中间这个值不相等,那下一次查找的区间我就我们就不用再包含最中间的这个值了,也就变成了左边这半区间。左边这半区间的时候,我们可以看到起点空间没有变,只是终点的区间变化。也就是我们的let right变成我们的什么,变成我们的幂的减一好。另外一种情况,就是我要插到的值是比我要中间的只要大的情况,那大的情况当然就是改变左边区间,那就left等于mid加1。那么这个循环这个查找的循环什么时候结束呢?我不断的去缩小我的范围和空间,我的左边区间和右边区间。总会有碰到的时候,或者相遇或者错过的时候。一旦他们相遇,就代表我一定是要查最后一次,他们俩一旦错过则循环终止。所以说什么时候继续,当我的left小于等于我的right,那么不断去进行查找。而当这个条件一旦不满足,也就是我的左半区间一旦跑到右半区间的右边去了,那这个循环就不用再继续了。 好,我们来看一下这道题,从已给定数组A10中找出最大值和最小值变输出。那么找最大值最小值我们是遵循的一个方法,叫做假设法。就是假设这个数组中第一个值为最大值或最小值,然后拿这个最大值和最小值去和后面所有的数字进行比较。一旦找到更大的则改变最大值的值,一旦找到更小的则改变最小值的值。那这个时候我们参照假设法,那我们假设第一个值最大值就是max等于A中括号0,A零是第一个值,那同理零等于A中括号0。好,假设完之后去遍历出第一个值之外的所有值I从一开始I小于10,I加加好,这就是从第二个值开始,一直到最后一个值。然后拿着这个max我们的if max小于我的A状态,也就是一旦发现比max更大的值,那此时我就改变这个max,此时就改变这个max让max等于AI因为发现AI是比它更大的,那么同理一副mean大于A也就找到比这个最小值更小的值,那么就去改变mean的值。Mean等于AI那么这个循环结束之后,max和命就是我们最大值和最小值。 我们来看这道题,编写程序,使用选择排序将数组A10进行升序排序。所以选择排序主要是将数组分为了两块区域,一个待排区,一个已排区。每次将待排区找出最大值或最小值,然后放到已排序的末尾,直到待排序的数字,没有则循环终止。按照这种思想,现在数组长度为十个,总共有十个数。从待排序开始找第一个第二个,那么我们只要找到9个或者说排列九次,将待排序的九个数字依次放到指定的位置后,那么剩下的一个值就自然而然的确定了位置。那么参照这种思想,我们上来首先for循环I等于1I小于10I加加要排九次,但是我们此时的索引值从零开始,因为我们要取第一个值,第一个值的索引值为零,所以说我们还要从零开始这个位置,从零开始的这个位置要为九。然后记下当前待排数字的索引值,也就命等于I命等于I因为第一次带排数字为20,所以数值为零I那么第二次代排数字为40,所以为一,那么就直接写min等于I然后将这个数字去和后面所有的数字进行比较,因为现在后面所有的待排序,拿待排的数字和待排序后面所有的数字进行比较,找到最大值,也就是此时我们要J等于I加1,也就是因为我在排这个数字,那么在排序后面的所有的数字去和这个数字进行比较,节点加一减小于10J加加好,拿着这个数字进行比较。因为我现在是要进行升序排序,升序排序也就是每次找到最小的,然后放在已排序的末尾。那也就是说如果说我的当前的我的带牌的数字大于我的AJ,大于我的AJ那就是说已经找到比如当前我带牌数字更小的数字了。比如说这个是待排数字20,在后面的待排区找到这个数字5比它更小,那此时我就要改变最小值的索引。那么循环结束时,一定会找到一个最小值,那此时我就要发生进行值的交换。当然你在这个位置做判断也可以,不做判断也可以,只是我们做判断的话,逻辑会显得更丰富一点。那这个时候我们就做一个逻辑判断,什么逻辑判断呢?当你的带排数字的索引值没有发生或者说发生了改变的时候,就表示找到比这个带排数字更小的数字了。此时我们就要发生值的交换,那值的交换是谁和谁的交换呢?就是me和I的交换,那就T等于A命A0等于AIAI等于T那么这个就叫选择排序。 好,我们来看一下这道题,向字符数组A中括号10中输入一串字母,将其小写转换为大写,大写转换为小写。这里同样已经做好了前置铺垫,定义了一个存放十个字符的数组,然后定义了一个普通变量I然后通过for循环向数组里面循环输入了十个字符。那这个时候我们就是只需要读取字符,然后判断哪些是小写,哪些是大写。那么对应的进行小写转大写,大写转小写即可。好,我们开始读取这个字符,I等于0,I小于10I加加好,读取出来的每个字符就是我们的A综合IA中框I此时我们要对这个A中阔I也对里面的每个字符进行判断。如果说你的A中框I那如何判断大写和小写呢?其实有两种判断方式,第一种是直接判断字符本身,第二种是判断字符所对应的阿斯克码值。这个时候我们就只判断字符就大于等于a and and a中考I小于等于字符Z那这就表示小写,那小写我们如何转大写的?同样也是操作它的20个码值,大写的A和小写的A相差32。因为大A是65,小A是97,那我们就通过操作阿克玛值AI等于AI减去32,那这个时候大写小写就转成大写了。同理s if如果说你的AI是大于等于字符大a and and AI小于等于字符大Z那这个时候我们转小写,同样也是操作阿特玛值转小写,那就是加AI等于AI加32。这里一定要采用LS衣服。我们不采用LS的原因是因为20个码表里面除了英文字母还有很多其他的字符。所以说为了稳妥或者说为了逻辑性,我们还是尽量使用else if,而不不直接使用else。 好,我们来看一下这道题向整形数组A5中输入一串数字,然后将数组进行逆序。那么这道题不是使用什么排序算法,其实本质上这道题进行逆序就是前后的值发生一个交换,以此来达到数组逆序的效果。举例比如说现在的五个数,那这个时候我们让一和五发生交换,也就是一和五发生交换,然后二和四发生交换,那这个时候我们可以看到,交换完毕之后,这个数组就变成逆序了。那这里就会带来一个问题,这种交换对于一个数组来说,交换到底要发生几次呢?那这个时候我们不妨我们去看一下,举个例子,比如说这个速度长度为三个的时候,我们要交换几次?要交换一次。那速度长度如果为四个的时候,两次,五次的时候依然是两次,六次的时候一日三次。数组长度为七个的时候依然是三次。这个时候我们其实很明显可以从这串数字里面找到数字交换的规律是什么。就是等于数组长度交换次数等于数组长度减数组长度除以二次。好,那到底是谁又在和谁交换呢?同理还是刚才拿五个数字的数组来说,我们其实就是一个C交换A0和A4,然后A4,然后A一和A3,然后A二是单独一个,不需要换。好,这个时候我们来找到这些数字的规律。如果左边用I来表示,那右边其实可以怎么来表示呢?我们现在右边这个是4,为什么是4?因为这个数组为五的话,最后一个元素的索引为4。其实我们很容易找到规律,其实它就是AC和AI和A数组长度减一减I来发生交换。好,这就是进行数组力学的一个逻辑,交换次数等于数组长度除以2,交换值的对象是AI和A数组长度减一减I那这个时候插入这个逻辑不就可以很快的去做。For I等于1,我们先解决交换次数的问题,I等于1,I小于等于速度,速度长度为5除以2,I加加for循环,然后让我们的这两个发生交换就T等于AI然后AI等于A5减1减I因为它输入长度为五,然后A5减1减I等于T等于T好,大家要注意我们此时这个I的索引值是从零开始的那意味着我们这个for循环也得从零开始。从零开始就意味着循环增加了一次,把这个后面的等号给去掉,让循环再减少一次。这样操作完成之后,我们数组就发生了利序。 数组是C语言里面常考的一个点,数组的概念数据的概念,它的概念是存储一系列相同数据类型的集合,也就是我们要存储多个相同的数据类型。我们通常使用数组来进行存储。那么我们如何去定义一个数组的定义数组的语法是由叫数据类型,然后数组零中括号数组长度。举个例子,比如说我现在要去定义一个存放五个整数的数组,那么整数我们使用数据类型int然后宿主名我们任意取,但是我们尽量选择取有语义化的宿主名,不要去取关键字或者保留字。如果定义一个叫阿瑞aray这个单词一直叫做数组。那么第一个存放五个整数的,那么速度长度为五,那么十就代表定义好了一个能够存放五个整数的数组。好,那么数组的使用了,数组的使用比较特殊。数组它有一个特殊的概念叫做索引,也叫做下标,也叫做下标。我们使用数组都是使用它的索引和下标来进行取数组里面的值。好,同理,比如说现在我定义一个数组里面存放了五个整数。那这个时候我想要去往里面存值或者取值的时候,它的语法都是使用数字名中括号索引值来进行存值或者取值。比如说现在我定的这个五个存放五个整数的数组,现在这个数组里面没有任何的值,那我想要往里面存值如何去做呢?同理就是数组名array中括号索引值。索引值是一个从零开始,然后逐步累加一的一个值。也就是说数组第一个位置它所对应的索引值为零,那就array 0等于一个值,比如说等于100OK。那我们现在继续往下传,那就array一等于200,array 2等于300。这样依次往下,那个是我们要注意的是啊存值和取值都是使用这种方式,那么取值就直接是数组名中号索引值,而存值就是宿主名。中国好索引值等于一个新字。好,但是我们很少会去这样一个一个的进行存值或者取值,我们通常都是由一连贯的,要么用循环来取值,要么在定义这个数组时直接进行初始化。比如说举个例子,我们在定义这个数字是,比如说int一个aray 5,我想在定义时候直接给它复值好值。那这个时候我们在后面写上一个什么呢?等于花括号等于花括号,然后在花括号里面写上我们的值,然后每个值之间用逗号隔开每个值之间用逗号隔开,这就叫做变量的初始化。同理我们想要去使用值的时候,我们通常也是用一个循环来取出所有的索引值,然后再去取里面的每一个值,比如说我现在打印出来print FI括号D逗号AARAYI,也就是说我们通常会使用整体复制的方式来进行初始化,也就是初始化的方式来进行复制。同理取值也是使用直接使用循环来便利所有的索引值来取到数组里面的每一个值。不会去一个一个这样的存,或者说一个一个这样的取。 好,我们来看一下这道题,定义一个存放十个整数的数组array,然后并从键盘输入十个整数,并求其和与平均值。好,我在这里已经做好了前置我们定义好的一个存放十个整数的一个数组,而瑞然后其要求从键盘输入十个整数。那这个时候我们通过for循环让I从零开始,I小于10,I加加用I去遍历每一个索引值,因为数组是十个,那么索引值就是0到9,然后通过scan f来向数组里面进行输入十个值,and a中括号I好输,数字名叫ARR。好输入我们的值之后,要求其和和平均值。那个时候同理,我们既然输入进去之后,我们再重新把它遍历出来,进行累加求和即可。那再重新遍历出来I等于0,I小于10,I加加,然后求和,这里给了一个S等于0,那么就使用S等于S加上AR中考AI,此时就把每一个值输出,每一个值加到我们的和里面了。最后求平均值就简单了,我们只要平均值等于和除以总个数和,在S身上总个数为十,最后我们来输出我们的和与平均值就可以了。Print f百分号D,这里写一个和等于百分号D然后同理,平均值等于摆放好F然后这里只要对应的S和AVG即可,那么这就是这道题。 好,我们来看一下这道题,向数组中A10中输入十个整数,并统计5的倍数出现的次数。我这里已经把所有的前置代码都铺垫好了,输入已经输入完了。那所谓的这一类的考题,统计什么什么次数,其实都是在本质上都要考一个知识点计数器。这个时候我们只需要去读取这个字符数组里面每一个值,I小于10I加加。那读取的时候只要判断取出来的哪些值是我们五的倍数,那就五是五的倍数就代表能够除尽五,除去5的意思就代表除以五的余数为零。如果等于0,A模AI乘以5等于等于0,我就让我的计数器进行加加,那么最后循环结束这个count的值,也就是五的倍数出现的次数,那么这就是这道题。

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。