实验5数组 习题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5 数组

班级:学号:

姓名:日期:

一、实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;

(2)掌握字符数组和字符串函数的使用;

(3)掌握与数组有关的算法(特别是排序算法)。

二、实验内容

1.阅读下面程序,写出程序运行结果,并且上机进行验证。

(1) #include "stdio.h"

void main()

{

int i,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]=%d n[i]=%d\n",n[i-1],n[i]);

}

(2)#include "stdio.h"

void main()

{

char ch[]={'0','1','2','3','4','5','6','7','8','9'};

int i=0,m=2,r,x=42; char b[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"

void main()

{

int a[][3]={9,7,5,3,1,2,4,6,8};

int i,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=%d s2=%d",s1,s2);

}

(4)#include "stdio.h"

void main()

{

int r[5]={1,2,3,4,5};

int i,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"

#define N 10

void main()

{

int a[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"

#define n 10

main()

{

int a[n],find;

int x,i,top,bottom,mid;

printf("input the sorted numbers:\n");

for(i=0;i

scanf("%d",__&a[i]___);

printf("input the number to find:\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=%d position=%d\n",x,mid);

}

else if(x>a[mid])

bottom=mid-1;

else

top=mid+1;

}

if(find==0) printf("the number %d is not in the table",x);

}

(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml 和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).

#include"stdio.h"

#define SIZE 5

void main()

{

int a[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];

}

相关文档
最新文档