第五节 数组元素的复制、移动、插入、删除-【单招零距离】计算机专业综合(下)

2025-04-23
| 2份
| 12页
| 66人阅读
| 0人下载

内容正文:

scanf(“%d%d”,&m,&n); for(i=m-1;i<n-1;i++)   for(j=i+1;j<=n-1;j++) if(a[i]<a[j]) t=a[i],a[i]=a[j],a[j]=t; printf(“ SORTEDAFTER: ”); for(i=0;i<10;i++)   printf("%4d",a[i]); 【技能实践】  1.(1)strlen(s) (2)i++ (3)t[i+d]  2.(1)j+1  (2)i%2  (3)t=a[i][j]  (4)printf(“ ”)  3.j<N改为j<N-1-i  a[j]<a[j+1]改为strcmp(a[j],a[j+1])<0  b=a[j],a[j]=a[j+1],a[j+1]=b改为:strcpy(b, a[j]),strcpy(a[j],a[j+1]),strcpy(a[j+1],b);  4.(1)for(i=j+1;i<n-1;i++ )改为for(i= j+1;i<n;i++ )  (2)if(a[p]>a[i])t=i;改为if(a[p]>a[i])p=i;  (3)printf(“%d“,&a[j]);改为printf(“%d“,&a[j]);  5.charx[5];floatc; for(i=0;i<n-1;i++)   for(j=i+1;j<n;j++) if(b[i]>b[j]) { c=b[i];b[i]=b[j];b[j]=c; strcpy(x,a[i]);strcpy(a[i],a[j]); strcpy(a[j],x); } for(i=0;i<n;i++)   printf("%s,%.2f ",a[i],b[i]); 第四节 数组的查找 【知识梳理】  2.有序 (l+h)/2 mid+1 【巩固练习】  1.(1)left<=right&&flag==0  (2)(left+right)/2  (3)flag=1  (4)flag 【拓展练习】  1.(1)if(a[i]==a[j])i--  (2)j=0;j<20-i;j++  (3)l<=r&&f==0  (4)p=m 【技能实践】  1.(1)left=mid+1;  (2)elseif(m<a[mid])  (3)right=mid-1;  2.srand((unsigned)time(NULL)); for(i=0;i<10;i++) { a[i]=rand()%91+10; b[i]=i; } for(i=0;i<10;i++)   printf("%d\t",a[i]); for(i=0;i<9;i++)   for(j=0;j<9-i;j++)    if(a[j]>a[j+1]) { k=a[j];a[j]=a[j+1];a[j+1]=k; t=b[j];b[j]=b[j+1];b[j+1]=t; } scanf("%d",&x); l=0;r=9;f=0; while(l<=r&&f==0) { m=(l+r)/2; if(x==a[m]){f=1;p=m;} if(x>a[m])l=m+1; if(x<a[m])r=m-1; } if(f==1)   printf("值为%d,是原数组中的第%d个.", x,p+1); else   printf("NotFound!"); 第五节 数组元素的复制、移动、插入、删除 【巩固练习】  1.S=123  2.10 11 12 13 14 15 16 17 18 19 10 11 16 17 18 19 12 13 14 15  3.12 45 68 78 67 23 77 88 【拓展练习】  1.23 45 67 12 33 78 9 90 77 13 45 33 90 66 99 100 -60 45 3 90 k=3  2.(1)i++ (2)while(a[j]%2==0)  3./∗从前往后找插入位置∗/ for(i=0;i<n;i++) 􀅰42􀅰 单招零距离􀅰计算机专业综合􀅰下册   if(x<a[i]) break; /∗腾出空位∗/ for(j=n-1;j>=i;j--)   a[j+1]=a[j]; /∗插入数,同时元素个数+1∗/ a[i]=x;  /∗a[j+1]=x;∗/ n++; 【技能实践】  1.(1)a[0]! =x (2)a[i]=a[i+1];  2.(1)str[i] (2)str[k++]=str[i]  (3)str[k]='\0'  3.continue改为break b[++n]改为 b[n++] for(i=0;i<10;i++)改为for(i=0;i<n;i+ +)  4.inti,j,n; n=N; for(i=0;i<N;i++)   printf("%d\t",a[i]); printf(" "); for(i=0;i<n;i++)   if(a[i]%3==0||a[i]%7==0) { for(j=i;j<n-1;j++)   a[j]=a[j+1]; n=n-1;i--; }   for(i=0;i<n;i++)   printf("%d\t",a[i]); printf(" ");  5.#include<stdio.h> intzxz(inta[],intn) { inti,m=a[0]; for(i=1;i<n;i++)  if(a[i]<m)   m=a[i]; returnm; } main() { inta[10]={23,72,62,68,85,48,81,53,74,12}; inti,ls,min; for(i=0;i<10;i++)  printf("%4d",a[i]); min=zxz(a,10); printf(" min=%d ",a[i]);  /∗当首元素不为最小值时,用左移法∗/ while(a[0]! =min) { ls=a[0]; for(i=1;i<10;i++)  a[i-1]=a[i]; a[9]=ls; //a[i-1]=ls; } for(i=0;i<10;i++)   printf("%4d",a[i]); printf(" "); } /∗当首元素不为最小值时,用右移法∗/ while(a[0〗! =min) { ls=a[9〗; for(i=8;i>=0;i--)  a[i+1〗=a[i〗; a[0〗=ls;  //a[i+1〗=ls; } 􀅰52􀅰 总复习方案􀅰参考答案 总复习方案·第六章数组 #include <stdlib.h #include <time.h #define N 10 int main() int x,a[20],i,j,k,t,I,r,m,p,f; /关0务关并并米黄并米米米关米关并米BEGIN关米0关并关米关关关米米米米米兴 } 第五节 数组元素的复制、移动、插人、删除 知识体系 ©Y© 数组元素的复制 数组元素的移动 基本算法(一) 数组元素的插入 数组元素的删除 知识梳理 Y⑤ 一、数组元素的复制 数组元素的复制是采用赋值语句来实现的,其中包括将一维数组或二维数组的元素全部 (或指定的要求的数据)复制到另一个一维或二维数组中。 通常采用i「语句来选择所要求的数据。 二、数组元素的移动 数组元素的移动,主要指数组中元素的位置发生变化。通常是指不改变相邻元素的位置。 分为(循环左移和循环右移)。有时也有特定的移位。 请注意第一个要移动的数据必须先保存到另一个变量中。 三、数组元素的插入 数组元素在数组中插人后,其后的数组元素均要向后(向右)移动一位,此时要注意先移动 那一个是特别要注意的。插人分为:指定位置的插入和有序的插入两种情况。 四、数组元素的删除 数组元素在数组中删除之后,其后的数组元素要向前(向左)移动一位进行覆盖原数据。 同时数组元素的个数应少一个。删除分为:指定位置的删除和特定条件的删除。 ·159· 单招零距离·计算机专业综合·下册 典例精析 C⑤ 【例1】随机产生20个互不相同的两位数存入数组a中,将其中的素数复制到另一个数 组b中,输出其中的素数。 【分析】本题的考点主要有三个:一是随机产生互不相同的数据:二是找出素数:三是数 组的复制。 为了保证数据互不相同,要将新产生的数和已有的数据进行逐一比较,如果和其中一个相 同,则不存入,i减1后,再去执行i+十,下一轮循环时数组下标不变。 素数,也称为质数,就是约数只有1和它本身的数,即若x为素数,则x不能被2~x一1之 间的任何一个数整除。 要实现将符合条件的数据的复制,要为新数组开辟相应的存储空间,下标从0开始,采用 if语句加赋值语句实现复制。 【答案】 #include <stdio.h #include <stdlib.h #include <time.h int main() {inti,j,a[20],b[20],k=0: srand((unsigned)time(NULL)); for(i=0;i<20;i++) {a[i]=rand()%90+10: for(j=0;j<i;j++) if(a[i]==aj门)i--: for(i=0;i<20:i++) {for(Gj=2;j<a[i门:j++) if(a[i门%j==0)break: if(j>=a[i])b[k++]=a[i门: for(i=0;i<20:i++) printf("%4d",ai]): printf(" 其中的素数:n"): for(i=0:i<k:i++) printf("%4d",bi]): 【例2】已知一个一维数组a[10]={23,72,62,68,85,48,81,53,74,12},求出其中的最 大值,并将最大值移到第一个,并保证数组中各元素的相对位置不变。 【分析】给定的数组a[10]={23,72,62,68,85,48,81,53,74,12},其中的最大数max= 85,根据题目要求,程序结果应为a[10]={85,48,81,53,74,12,23,72,62,68},本题的关键是 ·160· 总复习方案·第六章数组 进行数组元素的移动。数组元素的移动的方法有两种:左移法和右移法。 【答案】 #include <stdio.h int main() {inta[10]={23,72,62,68,85,48,81,53,74,12}: int i,Is,max; for(i=0:i<10:i++) printf("%4d".ai): :求最大值 max=a[0]; for(i=1:i<10:i++) if(a[i]>max)max=a[i]; printf(" max=%d ",ali]): 当首元素不为最大值时,用左移法实现 while(a[o]!=max) /当首元素不为最大值时,用右移法实现 {ls=a[0]: while(a[o]!=max) for(i=1;i<10;i++) { ls=a[9]: a[i-1]=a[i]; for(i=8:iD>=0:i--) a[9]=ls;a[i-1]=ls; a[i+1]=a[i]: a[0]=ls;a[i+1]=ls; for(i=0:i<10:i++) printf("%4d",ai]); printf(" "): 【例3】有一个数组inta[10]={23,56,43,2,78,9,45),其中已有7个元素,现从键盘输 入一个数x及这个数要插入的位置d,请将x插入指定的位置d。如果d值大于数组中元素的 个数,则将x插在最后。 【分析】本题考查的是将数据插人到数组中指定的位置,若该位置不空,则要将其后的所 有元素依次后移一个位置,然后再插入。后移时要特别注意的有两点:一是应先将最后一个要 移动的数据后移,再移动倒数第二个,依次向前:二是插入数据后,数组元素的总个数要增加。 【答案】 #include "stdio.h" int main() {inta[10]={23,56,43,2,78,9,45},n=7,x,d,i,j: printf("数组中的初始数据为:n"): for(i=0;i<n;i++) printf("%5d",a[i门): printf(" "): printf("请输入要插入的数及其位置:x,d=? "); scanf("%d%d",&.x,&.d): ·161· 单招零距离·计算机专业综合·下册 if(d>=n) a[n]=x; else {for(j=n-1:j>=d:j--) aj+1]=aj]; a[d]=x; /faj+1]=x; n++; printf("在指定位置插入元素后数组中的数据为: "): for(i=0;i<n:i++) printf("%5d",ali]); printf(" "): } 【例4】删除一维数组inta[10]={23,45,78,2,45,46,2.78,9,45}中相同的元素,要求 相同的元素只保留一个,结果还存在原数组中。 【分析】给定的数组ita[10]={23,45,78,2,45,46,2,78,9,45},根据题日要求,程序结果 应为a[10]={23,45,78,2,46,9},实现去除重复元素的方法是:从第2个元素起,将数组元素逐 个和前面的元素进行比较,看是否已出现,若没有出现,再存入数组中,这种方法叫筛法。 【答案】 #include "stdio.h" int main() {inta[10]={23,45,78,2,45,46,2,78,9,45},i,j,k,bz: printf("a数组中的数据为:n"): for(i=0;i<10;i++) printf("%5d",ai]): printf(" "): k=1: for(i=1;i<10;i++) {bz=1: for(j=0;j<k;j++) if(aCi]==aj]) bz=0:break; } if(bz==1)a[k++]=a[i]; printf("处理后的a数组中的数据为: "): for(i=0;i<k;i++) printf("%5d",a[i]): printf(" "); ·162· 总复习方案·第六章数组 巩固练习 CY⑤ 1.以下程序的输出结果是 #include <stdio.h int main() {inta[☐={1,2,3,4},i,j,s=0: j=1: for(i=3:i>=0:i--) {s=s+a[门*j; j=j*10: printf("s=%d ",s); } 2.阅读程序写结果: #include<stdio..h≥ int main() {inti,j,x,n=10,a[10]: for(i=0:i<10:i++) {a[i]=10+i: printf("%3d",a]): } printf(" "); for(i=2:i<=5:i++) {x=a[2]; for(j=3;j<=n-1;j++) a0-1]=aG]: a[n-1]=x; for(i=0;i<n;i++) printf("%3d",a[i门): printf(" "); 3.阅读程序写结果: #include <stdio.h int main() int i,j,x,k,n=10; inta[10]={12,90,45,68,78,90,67,23,77,88}: x=90: k=0: ·163· 单招零距离·计算机专业综合·下册 for(i=0:i<n;i++) if(x==aTi]) {n--;k=1; for(j=i:j<n;j++) a[j]=a[j+1]; if(k==0) printf("%d is not been found ",x): for(i=0;i<n;i++) printf("%3d",ai]): printf(" "): 拓展练习 2 ⊙Y⊙ 1.阅读程序写结果: #include <stdio.h int main() int i,j,k=0; inta[9]={23,45,67,12,33,78,9,90,77}; intb[8]={13,45,33,90,66,99,100,-60: int c8]; for(i=0:i<9:i++) printf("%3d\t",ali); printf(" "); for(i=0;i<8;i++) printf("%3d\t",bi]); printf(" "): for(i=0:i<9;i++) forj=0;j<8:j++) if(a[i]==bj]) c[k++]=bj]; for(i=0:i<k;i++) printf("%3d川t",ci门): printf(" k=%3d",k); 2.现在一整数数组a,存放8个整数,现在要求将奇数重新排在a数组的左端,偶数重新 排在a数组的右端。请填空: #include <stdio.h> int main() ·164 总复习方案·第六章数组 int i,j,t,n=8; inta[8]={12,34,56,78,90,23,45,67}: for(i=0:i<=7;i++) printf("%d\t",a): printf(" "); i=0:j=n-1: while(i<j) while(ali]2) j-- t=ali],a[i]=aj],a]=t; for(i=0;i<n;i++) printf("%d\t",a[i门): printf(" "); } 3.程序设计题:已知数组中的元素已经按照升序排序好了,现在从键盘输入一个数x, 请将x插人到其中,并保持数组仍然有序。 include "stdio.h" int main() {inta[10]={2,9,13,23,45,56,78},n=7,x,i,j: printf("数组中的初始数据为:n"): for(i=0;i<n;i++) printf("%5d",a[i): printf(" "): printf("请输入要插入的数x=? "); scanf("%d",&.x): /米关米米兴为米米兴兴米米**¥兴米兴END为关并关米米***米兴兴**米/ printf("插入元素x后数组中的数据为: "); for(i=0:i<n;i++) printf("%5d",ai); printf(" "): ·165· 单招零距离·计算机专业综合·下册 技能实践 CY② 1.程序填空题:下列程序是将数据中第三个数(位置为2)移动到最左端。请填空: #include <stdio.h int main() {inta[10]=(12,34,56,78,90,21,23,35,37,39}: int i,t,x; for(i=0:i<10:i++) printf("%d\t",a[i门); printf(" "); x=a[2]; while( (1) ) {t=a[0]: for(i=0:i<9:i++) (2) a[i]=t; for(i=0:i<10:i++) printf("%d\t",ai]): printf(" "): 2.程序填空题:从键盘输人一串字符,从中删除指定的字符©h(要删除的字符也从键盘输 入),输出删除指定字符后的字符串。 #include "stdio.h" int main() char str[80],ch: int i,k=0; printf("请输入一个字符串: "): gets(str); printf("请输入要删除的字符: "): ch=getchar(); for(i=0: (1) :i++)》 if(str[i]!=ch) (2) (3); printf("输出删除指定字符后的字符串为: "); puts(str); } ·166· 总复习方案·第六章数组 3.程序改错题:下列程序是找出a数组中的十个整数,如果是素数就复制到b数组中,并 统计b数组元素的个数。 #include <stdio.h int main() {inta[10]={12,34,56,78,90,21,23,35,37,39: int i,j,n=0,x,b[10]; for(i=0:i<10:i十+) printf("d\t",a): printf(" "): for(i=0:i<10:i++) {x=a[i门: for(j=2;j=x2;j十+) ?米米米*兴米米米米米米米米*兴*米F0UND米关米米米关米米米兴米*米米, if(x%j=0)continue; if(j>x/2)b[++n]=x; /米黄举**米弟荣0米茶米茶关关关0F)UND米美装0关弟00米若0茶黄弟 for(i=0;i<10:i++) printf("%od\t",bCi]): printf(" "); } 4.程序编写题:将给定的数组中的元素是3或7的倍数的数删除,请给出删除前和删除后 的两种情况。 #include <stdio.h 共define N 10 int main() {inta[N]={12,34,56,78,90,21,23,35,37,39}; ·167· 单招零距离·计算机专业综合·下册 5.程序设计题:已知一个一维数组a[10]={23,72,62,68,85,48,81,53,74,12},求出其 中的最小值,并将最小值移到第一个,并保证数组中各元素的相对位置不变。 #include <stdio.h int main() 第六节 矩阵运算 知识体系 ⊙好Y⑤ 矩阵相加 矩阵相减 矩阵数乘 矩阵运算 矩阵相乘 矩阵转置 矩阵旋转 知识梳理 ⑤ 矩阵,又称纵横阵,是一个按照长方阵列排列的数的集合。在C语言中,通常用二维数组 来存储。当矩阵的长(二维数组的行数)和宽(二维数组的行数)相同时,称为方阵。 矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法、减法、数乘、转置、 旋转等。 1.矩阵相加:将两个矩阵对应的元素值相加(要求两个矩阵是同型矩阵,即两个矩阵的行 数和列数均相同)。 2.矩阵相减:将两个矩阵对应的元素值相减(要求两个矩阵是同型矩阵)。 3.矩阵数乘:一个常数乘以矩阵,其实质是将这个常数和矩阵中的对应元素相乘所得到 的矩阵。 ·168·

资源预览图

第五节 数组元素的复制、移动、插入、删除-【单招零距离】计算机专业综合(下)
1
第五节 数组元素的复制、移动、插入、删除-【单招零距离】计算机专业综合(下)
2
第五节 数组元素的复制、移动、插入、删除-【单招零距离】计算机专业综合(下)
3
第五节 数组元素的复制、移动、插入、删除-【单招零距离】计算机专业综合(下)
4
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。