实验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]; }