实验5数组习题及答案.docx
- 文档编号:24129703
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:16
- 大小:45.84KB
实验5数组习题及答案.docx
《实验5数组习题及答案.docx》由会员分享,可在线阅读,更多相关《实验5数组习题及答案.docx(16页珍藏版)》请在冰豆网上搜索。
实验5数组习题及答案
实验5数组
班级:
学号:
:
日期:
一、实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
二、实验内容
1.阅读下面程序,写出程序运行结果,并且上机进行验证。
(1)#include"stdio.h"
voidmain()
{
inti,n[4]={0,0,0,0};
for(i=1;i<4;i++)
{
if(i==3)break;
n[i]=n[i-1]+1;
}
printf("n[i-1]=%dn[i]=%d\n",n[i-1],n[i]);
}
(2)#include"stdio.h"
voidmain()
{
charch[]={'0','1','2','3','4','5','6','7','8','9'};
inti=0,m=2,r,x=42;charb[80];
while(x)
{
r=x%m;x/=m;
b[i++]=ch[r];
}
for(--i;i>=0;i--)
printf("%c",b[i]);
printf("\n");
}
(3)#include"stdio.h"
voidmain()
{
inta[][3]={9,7,5,3,1,2,4,6,8};
inti,j,s1=0,s2=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i==j)s1=s1+a[i][j];
if(i+j==2)s2=s2+a[i][j];
}
printf("s1=%ds2=%d",s1,s2);
}
(4)#include"stdio.h"
voidmain()
{
intr[5]={1,2,3,4,5};
inti,j,a[5][5];
for(i=0;i<=4;i++)
{for(j=i;j<=4;j++)
a[i][j]=r[j-i];
for(j=0;j
a[i][j]=r[i-j];
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。
并上机进行调试验证)
(1)程序说明:
下列程序完成的是插入排序功能:
数组a中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。
#include"stdio.h"
#defineN10
voidmain()
{
inta[11]={1,10,20,30,40,50,60,70,80,90},x,i,p;
scanf("%d",&x);
for(i=0,p=N;i if(x { p=i; _break_; } for(i=N-1;i>=p;_i--__) a[i+1]=a[i]; _a[p]=x___; printf("%d",x); for(i=0;i<=N;i++) printf("%5d",a[i]); printf("\n"); } (2)程序说明: 下面程序完成的是折半查找。 A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。 其基本思想是: 在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。 变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。 #include"stdio.h" #definen10 main() { inta[n],find; intx,i,top,bottom,mid; printf("inputthesortednumbers: \n"); for(i=0;i scanf("%d",__&a[i]___); printf("inputthenumbertofind: \n"); scanf("%d",&x); find=0;top=0;bottom=n-1; if(x<=a[0]&&top<=bottom) while(! find&&top<=bottom) { mid=mid=(bottom+top)/2; if(x==a[mid]) { find=1; printf("x=%dposition=%d\n",x,mid); } elseif(x>a[mid]) bottom=mid-1; else top=mid+1; } if(find==0)printf("thenumber%disnotinthetable",x); } (3)程序说明: 下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线). #include"stdio.h" #defineSIZE5 voidmain() { inta[SIZE][SIZE],m,n,sum1,sum2; for(m=0;m for(n=0;n scanf("%d",&a[m][n]); sum1=sum2=__0__; for(m=0;m { sum1=sum1+a[m][m]; sum2=sum2+a[m][SIZE-1-m]; } printf("sum1=%dsum2=%d\n",sum1,sum2); } (4)程序说明: 下面程序打印出如下所示的杨辉三角行(打印10行)。 1 11 121 1331 14641 15101051 ……. #include"stdio.h" voidmain() { inti,j,a[10][10]={{1},{1,1}}; for(i=2;i<10;i++) { a[i][0]=1;_a[i][i]=1; for(j=0;j a[i][j]=a[i-1][j]+a[i-1][j-1]; } for(i=0;i<10;i++) { for(j=0;j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } } 3.程序设计(根据题意编写程序并上机进行调试)。 (1)编写程序完成如下功能: 输入10个数存入一维数组,然后再按逆序重新存放后输出。 #include voidmain() { inta[10],i,temp; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); for(i=0;i<5;i++) { temp=a[i]; a[i]=a[9-i]; a[9-i]=temp; } for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); } (2)编写程序完成如下功能: 从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。 #include #include voidmain() { charch1[20],ch2[10]; inti,j; scanf("%s",ch1); scanf("%s",ch2); j=strlen(ch1); for(i=0;i ch1[j]=ch2[i]; ch1[j]='\0'; printf("%s\n",ch1); } (3)编写程序完成如下功能: 现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。 算法: 两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。 编程并上机调试运行。 (1)用选择法对10个整数排序。 10个整数用scanf函数输入。 #include voidmain() { inti,j,min,temp,a[11]; printf("enterdata: \n"); for(i=1;i<=10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } printf("Theorginalnumbers: \n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for(i=1;i<=9;i++) { min=i; for(j=i+1;j<=10;j++) if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThesortednumbers: \n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); } (2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。 如果该数不在数组中,则输入“无此数”。 以15个数用赋初值的方法在程序中给出。 要找的数用scanf函数输入。 #include voidmain() { inti,number,top,bott,mid,loca,a[15],flag=1,sign; charc; printf("enterdata: \n"); scanf("%d",&a[0]); i=1; while(i<15) { scanf("%d",&a[i]); if(a[i]>=a[i-1]) i++; else printf("enterthisdataagain: \n"); } printf("\n"); for(i=0;i<15;i++) printf("%5d",a[i]); printf("\n"); while(flag) { printf("inputnumbertolookfor: "); scanf("%d",&number); sign=0; top=0; bott=14; if((numbera[14])) loca=-1; while((! sign)&&(top<=bott)) { mid=(bott+top)/2; if(number==a[mid]) { loca=mid; printf("Hasfound%d,itspostionis%d\n",number,loca+1); sign=1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 数组 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)