第06章 数组补充练习题答案.docx
- 文档编号:30736120
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:28
- 大小:20.54KB
第06章 数组补充练习题答案.docx
《第06章 数组补充练习题答案.docx》由会员分享,可在线阅读,更多相关《第06章 数组补充练习题答案.docx(28页珍藏版)》请在冰豆网上搜索。
第06章数组补充练习题答案
第六章基础知识练习答案
一、选择题
1D
2D
3C
4D
5C
6A
7D
8C
9D
10B
11C
12A
13C
14A
15D
16D
二、填空题
1、00
2、0出错
3、连续数组名
4、行下标2
5、字符数组cin.getline(str,80);
6、29
7、-1
8、0
9、63
10、1019
11、第一个修改
12、2357111317192329
13、221y=0
14、0246
15、Fortranl
16、Howdoesshe
17、16
18、#&%
19、ASZ
20、
14
25
36
21、51234
22、1346
23、
1000
0100
0010
0001
24、57
25、
(1) (2)b[k]! =0(3)i%m==0(4)n==0 26、 (1)a+4 (2)b[0] 27、 (1)a[i] (2)continue 28、 (1)i==j (2)j=2(3)j>=0(4)i+j 29、 (1)k (2)-1(3)str[i]=str[j](4)s 30、 (1)a (2)a(3)sum/n(4)x[i] 31、 (1)n*n (2)m[i]=a%10(3)t*=10(4)k==n*n 32、 (1)str[i] (2)j=i(3)k+1 33、 (1)if((j%2)! =0)continue (2)a[i]>a[j] 34、 (1)n (2)! (a[j]==a[i-j-1])(3)b 35、 (1)a[i] (2)5(3)a[i]=a[j],a[j]=m,m=a[i] 三、补充实验题解答 1、编程实现两个3⨯4阶矩阵相加。 #include voidinput(inta[3][4]) { for(inti=0;i<3;i++) for(intj=0;j<4;j++) cin>>a[i][j]; } voidfun(inta[3][4],intb[3][4],intc[3][4]) { for(inti=0;i<3;i++) for(intj=0;j<4;j++) c[i][j]=a[i][j]+b[i][j]; } voidoutput(inta[3][4]) { for(inti=0;i<3;i++){ for(intj=0;j<4;j++) cout< cout< } } voidmain() { inta[3][4],b[3][4],c[3][4]; input(a); input(b); fun(a,b,c); output(c); } 2、程序将两个已按升序排列的数组合并成一个升序数组。 两个数组中重复的数只保存一次。 #include voidfun(intx[],inty[]) { inti,j,l; for(i=j=0;i<6;i++){ for(;x[i]>y[j];j++); for(l=4+j;l-j>=0;l--)y[l+1]=y[l]; y[j]=x[i]; } for(i=0;y[i];i++){ if(y[i]==y[i+1]) for(j=i;y[j];j++)y[j]=y[j+1]; } } voidmain() { inta[10]={3,6,8,11,13,20}; intb[20]={2,4,6,8,20}; fun(a,b);//b的最后一个元素大于等于a的最后一个元素 for(intk=0;b[k]! =0;k++) cout< cout< } 3、设计一个函数voidInstr(chara[],charb[],intn),将字符串b插入到字符串a的第n个字符处,字符串a的第n个字符及右边的字符向右移动。 假定a中的字符串长度大于n。 #include #include voidInstr(chara[],charb[],intn) { chart[100]; strcpy(t,a+n-1);//a+n-1的含义是从a的第n个字符开始拷贝 a[n-1]='\0'; strcat(a,b); strcat(a,t); } voidmain() { chars1[100]=""; chars2[100]="abcdefghijklmn"; intn; cin>>n; Instr(s1,s2,n); cout< } voidInstr(chara[],charb[],intn)也可以写成: voidInstr1(chara[],charb[],intn) { intk=n; chart[100]; for(inti=0;b[i]! ='\0';i++,k++)t[i]=a[k-1]; t[i]='\0';a[n-1]='\0'; strcat(a,b); strcat(a,t); } 4、编程实现对输入的两个字符串str1和str2,判断str2是否为str1的子串。 若tr2是为str1的子串,显示子串在父串中的起始位置。 要求用函数实现判断。 #include intfun(charstr1[],charstr2[]) { inti,j,k; for(i=0;str1[i];i++) for(j=i,k=0;str2[k]==str1[j];k++,j++) if(str2[k+1]=='\0')returni+1; return0; } voidmain() { intm=0; chars1[100],s2[100]; cin.getline(s1,100); cin.getline(s2,100); if(fun(s1,s2))cout< "< elsecout< "< } 5、编写程序,实现把字符数组b插入到字符数组a中最大字符后边。 #include #include voidmain() { chara[40],b[]="abc",max; inti,j=0; cout<<"inputastring: \n"; cin.getline(a,39); cout< max=a[0]; for(i=0;a[i]! ='\0';i++) if(a[i]>max){ max=a[i];j=i;} cout<<"a[j]="< for(i=strlen(a)+3;i>j;i--) a[i]=a[i-3]; a[i+1]='a';a[i+2]='b';a[i+3]='c'; cout< } 6、编写一个函数,对于一个任意长度、任意数据类型的数组中的各元素倒序存放。 (用函数重载,实现整型数组、实型数组和字符数组的元素倒序) #include voidreverse(inta[],intn) { intt,i,j,m=(n-1)/2; for(i=0;i<=m;i++){ j=n-1-i; t=a[i];a[i]=a[j];a[j]=t; } } voidreverse(floata[],floatn) { floatt,m=(n-1)/2; for(inti=0;i<=m;i++){ intj=n-1-i; t=a[i];a[i]=a[j];a[j]=t; } } voidreverse(chara[],intn) { chart; intm=(n-1)/2; for(inti=0;i<=m;i++){ intj=n-2-i; t=a[i];a[i]=a[j];a[j]=t; } } voidmain() { intx[]={34,23,45,-56,12,0,67,-67}; floaty[]={45.78,23.45,78.9,-23.6,89.0,12.6,-10.56}; charz[]="youarestudents."; cout<<"输出整型数组: \n"; for(inti=0;i cout< cout< reverse(x,sizeof(x)/sizeof(int)); cout<<"输出逆序整型数组: \n"; for(i=0;i cout< cout< cout<<"输出实型数组: \n"; for(i=0;i cout< cout< reverse(y,sizeof(y)/sizeof(float)); cout<<"输出逆序实型数组: \n"; for(i=0;i cout< cout< cout<<"输出字符数组: \n"; for(i=0;z[i];i++) cout< cout< reverse(z,sizeof(z)/sizeof(char)); cout<<"输出逆序字符数组: \n"; for(i=0;z[i];i++) cout< cout< } 7、用一个二维数组存储下面的数据表,要求求出每位同学的总成绩和平均成绩、每门课的总成绩和平均成绩。 姓名英语计算机文化基础高等数学 张清879090 李明899889 黄英838978 刘欣939890 #include #include #include #include voidmain() { intsum=0,sun0=0,sun1=0,sun2=0; floatarv,arg0,arg1,arg2; chara[4][10]={"张清","李明","彭洗","刘欣"}; intb[4][3]={{87,90,90},{89,98,89},{83,89,78},{93,98,90}}; cout<<"姓名"<<'\t'<<"英语"<<'\t'<<"计算机文化基础"<<'\t'<<"高等数学"<<'\t'<<"sum"< for(inti=0;i<4;i++) { cout< sum=0; for(intj=0;j<3;j++){ cout< sum+=b[i][j];} arv=sum/3.0; cout< sun0+=b[i][0]; sun1+=b[i][1]; sun2+=b[i][2]; cout<<'\n'; } arg0=sun0/4.0; arg1=sun1/4.0; arg2=sun2/4.0; cout<<'\t'< cout<<'\t'< } 9、编写一程序,将一个二维数组顺时针旋转900。 112233旋转后变为774411 445566885522 778899996633 #include constintSIZE=3; typedefintMatrix[SIZE][SIZE]; voidprint(Matrix); voidrotate(Matrix); voidmain() { Matrixm={11,22,33,44,55,66,77,88,99}; print(m); rotate(m); print(m); } voidprint(Matrixa) { for(inti=0;i for(intj=0;j cout< cout<<'\n'; } cout<<'\n'; } voidrotate(Matrixb) { Matrixtemp; for(inti=0;i for(intj=0;j temp[i][j]=b[SIZE-1-j][i]; //旋转180度b[SIZE-1-i][SIZE-1-j] for(i=0;i for(intj=0;j b[i][j]=temp[i][j]; } 10.数学家把相差为2的质数(即素数)称为“孪生质数”,编程求出1000以内的孪生质数及孪生质数的对数。 孪生质数对数如(3,5)、(11,13)、(827,829)等。 #include #include #include intisprime(intx) { intk,i; k=(int)sqrt(x); for(i=2;i<=k;i++) if(x%i==0) return(0); return (1); } voidmain() { inta[500],count,k=0; intb[50][2]; for(inti=3;i<1000;i+=2) if(isprime(i))a[k++]=i;/* for(i=0;i cout< count=0; for(i=0;i { if(a[i+1]-a[i]==2) { b[count][0]=a[i]; b[count++][1]=a[i+1]; } } for(i=0;i { if(i%5==0)cout< cout<<'('< } cout< } 11.冒泡排序 #include voidbubble(int[],int); voidmain() { inta[]={73,6,37,4,32,12,9,55,26,2}; intlen=sizeof(a)/sizeof(int); for(inti=0;i cout< cout< bubble(a,len); } voidbubble(intb[],intn) { inti,temp; for(intj=1;j { for(i=0;i if(b[i]>b[i+1]){ temp=b[i]; b[i]=b[i+1]; b[i+1]=temp; } for(i=0;i cout< cout< } } 12.选择排序 #include voidsort(int[],int); voidmain() { inta[]={73,6,37,4,32,12,9,55,26,2}; intlen=sizeof(a)/sizeof(int); for(inti=0;i cout< cout< sort(a,len); } voidsort(intb[],intn) { intj,temp; for(inti=0;i { for(j=i+1;j if(b[i]>b[j]){ temp=b[i]; b[i]=b[j]; b[j]=temp; } for(j=0;j cout< cout< } } 13.插入排序 #include voidisort(int[],int); voidmain() { inta[]={73,6,37,4,32,12,9,55,26,2}; intlen=sizeof(a)/sizeof(int); for(inti=0;i cout< cout< isort(a,len); } voidisort(intd[],intn) { intinserter,index; for(inti=1;i { inserter=d[i]; index=i-1; while(index>=0&&inserter { d[index+1]=d[index];//后挪一个位置 index--; } d[index+1]=inserter;//插入 for(intj=0;j { cout< if(j==i)//已排序与末排序的分界线 cout<<'|'; } cout< } } 14.折半查找,插入排序 #include voidinsert(int*p,intsize,inta) { intlow=0,high=size-1,mid,posi; while(low { mid=(low+high)/2; if(a==*(p+mid)) { posi=mid+1;break;} if(a<*(p+mid))high=mid-1; elselow=mid+1; } if(a<*(p+low))posi=low; elseposi=low+1; for(inti=size;i>posi;i--) *(p+i)=*(p+i-1); *(p+posi)=a; } voidmain() { inta[10]={1,3,5,7,9,11,13,15,17},t; cout<<"Plaseinputanumber: "; cin>>t; insert(a,9,t); for(inti=0;i<10;i++)cout< cout<<'\n'; } 四、课后习题 6-1、 #include voidmain() { inta[10],b[10],c[10]; intmax2,max1,j=0,k=0,n,m; for(inti=0;i<10;i++) cin>>a[i]; for(i=0;i<10;i++) {if(a[i]%2) {b[j++]=a[i]; n=j; } else {c[k++]=a[i]; m=k; } } max1=b[0]; for(i=0;i { cout< if(b[i]>max1)max1=b[i]; } cout<<"max1="< max2=c[0]; for(i=0;i { cout< if(c[i]>max2)max2=c[i]; } cout<<"max2="< } 6-3、 #include voidinput(inta[10]) { for(inti=0;i<10;i++) cin>>a[i]; } voidsort(inta[10]) { inti,j,k; for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[i]>a[j]){ k=a[i];a[i]=a[j];a[j]=k; } } voidprint(inta[10]) { for(inti=0;i<10;i++) cout< } voidmain() { intb[10]; cout<<"输入10个数: \n"; input(b); cout<<"输出这10个数: \n"; print(b); s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第06章 数组补充练习题答案 06 数组 补充 练习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)