实验5数组 习题及问题详解
for(m=0;m<SIZE;m++)
for(n=0;n<SIZE;n++)
scanf("%d",&a[m][n]);
sum1=sum2=__0__;
for(m=0;m<SIZE;m++)
{
sum1=sum1+a[m][m];
sum2=sum2+a[m][SIZE-1-m];
}
printf("sum1=%d sum2=%d\n",sum1,sum2);
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"
#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<n;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;
#include <stdio.h>
scanf("%d",&x);
for(i=0,p=N;i<N;i++)
if(x<a[i])
{
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("%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;
实验
班级:
学号:
:
日期:
一、
(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
二、
1
(1) #include"stdio.h"
void main()
{
int i,n[4]={0,0,0,0};
for(i=1;i<4;i++)
}
(4)程序说明:下面程序打印出如下所示的辉三角行(打印10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…….
#include"stdio.h"
void main()
{
int i,j,a[10][10]={{1},{1,1}};
for(i=2;i<10;i++)
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);
{
if }
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'};
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<i;j++)
a[i][j]=r[i-j];
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
}
(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).
#include"stdio.h"
#define SIZE 5
void main()
{
int a[SIZE][SIZE],m,n,sum1,sum2;
{
a[i][0]=1;_a[i][i]=1;
for(j=0;j<i;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个数存入一维数组,然后再按逆序重新存放后输出。
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};
printf("\n");
}
(2)程序说明:下面程序完成的是折半查找。A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。
其基本思想是:在查找围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。变量top,bottom,mid分别指向查找围的顶部、底部和中间位置。