实验5数组 习题及答案 下载本文

实验5 数组

班级: 姓名: 学号: 日期: 一、实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出方法; (2)掌握字符数组和字符串函数的使用;

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

二、实验内容

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

(1) #include \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(\}

(2)#include \

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(\

printf(\}

(3)#include \

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(\}

(4)#include \

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

for(i=0;i<5;i++) {

for(j=0;j<5;j++)

printf(\printf(\} }

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。并上机进行调试验证) (1)程序说明:下列程序完成的是插入排序功能:数组a 中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。

#include \#define N 10 void main() {

int a[11]={1,10,20,30,40,50,60,70,80,90} ,x,i,p; scanf(\for(i=0,p=N;i

p=i; _break_; }

for(i=N-1;i>=p; _i--__) a[i+1]=a[i]; _a[p]=x___; printf(\for(i=0;i<=N;i++) printf(\printf(\}

(2)程序说明:下面程序完成的是折半查找。A 数组中存放的是n 个由大到小已经排好序的数列,从这n 个数中查找x 的值是否存在。

其基本思想是:在查找范围里,将x 与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。变量top,bottom,mid 分别指向查找范围的顶部、底部和中间位置。

#include \#define n 10 main() {

int a[n],find;

int x,i,top,bottom,mid;

printf(\for(i=0;i

scanf(\&a[i]___);

printf(\scanf(\

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(\}

else if(x>a[mid]) bottom=mid-1; else

top=mid+1; }

if(find==0) printf(\}

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

#include\#define SIZE 5 void main() {

int a[SIZE][SIZE],m,n,sum1,sum2; for(m=0;m

sum1=sum1+a[m][m];

sum2=sum2+a[m][SIZE-1-m]; }