目录
程序一:有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中。
程序三:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列。
程序六:由N个有序整数组成的数列已放在一维数组中,程序的功能是:利用折半查找算法查找整 数m在数组中的位置。
程序十: 输出二维数组的鞍点。鞍点乃该元素在该行上最大,在该列上最小。
程序一: 有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中。
main()
{
int a[8]={1,3,5,7,9,11,13};
int i,j,end=8-2,k;
scanf("%d",&k);
while(end>=0&&a[end]>k)//边比较边移动
{
a[end+1]=a[end];
end--;
}
a[end+1]=k;
for(i=0;i<8;i++)
printf(" %d",a[i]);
}
程序二:删除指定下标的元素值。
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[8]={1,3,5,7,9,11,13,15};
int i,j=0,k;
printf("删除前:");
for(i=0;i<8;i++)
printf(" %d",a[i]);
printf("\n");
printf("请输入需要删除的下标元素:");
scanf("%d",&k);
if(k>=0&&k<8)
{
for(i=0;i<8;i++)
if(i!=k) a[j++]=a[i];
}
else
{
printf("输入下标不合法\n");
exit(0);
}
printf("删除后:");
for(i=0;i<8-1;i++)printf(" %d",a[i]);
printf("\n");
}
程序三:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列。
main()
{
int a[10]={1,1,2,2,3,3,4,5,6,8};
int i,j=0;
printf("删除前:");
for(i=0;i<10;i++)
printf(" %d",a[i]);
printf("\n");
for(i=0;i<10;i++)
{
if(a[i+1]!=a[i])
a[j++]=a[i];
}
printf("删除后:");
for(i=0;i<j;i++)
printf(" %d",a[i]);
}
程序四:冒泡排序
main()
{
int a[10]={1,9,5,7,4,11,3,5,17,19};
int i,j,t;
for(i=0;i<10-1;i++)
{
for(j=0;j<10-1-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
程序五:选择排序
main()
{
int a[10]={1,9,5,7,4,11,3,5,17,19};
int i,j,t,m;
for(i=0;i<10-1;i++)
{
m=i;
for(j=i+1;j<10;j++)
if(a[m]<a[j]) m=j;
if(i!=m)
{
t=a[i];
a[i]=a[m];
a[m]=t;
}
}
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
程序六:由N个有序整数组成的数列已放在一维数组中,程序的功能是:利用折半查找算法查找整数m在数组中的位置。
#define N 6
main()
{
int a[N]={1,3,5,7,9,11};
int i,low=0,high=N-1,mid,k;
printf("请输入需要查找的值");
scanf("%d",&k);
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==k)
{
printf("找到了下标是:%d",mid);
break;
}
else if(a[mid]>k)
high=mid-1;
else low=mid+1;
}
if(low>high)printf("查找失败");
}
程序七: 求出二维数组的每行最大值并存放在x所指的数组中。
#define N 3
main()
{
int a[N][N],x[N];
int i,j,max=0,t=1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf(" %d",&a[i][j]);//输入N行N列元素
printf("\n");
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf(" %d",a[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
max=0;
for(j=1;j<N;j++)
if(a[i][max]<a[i][j])max=j;
x[t++]=a[i][max];
}
for(i=1;i<t;i++)
printf("第%d行最大值是:%d\n",i,x[i]);
}
程序八: 求出二维数组的每列最大值并存放在x所指的数组中。
main()
{
int a[3][3]={{12,3,5},{4,5,6},{78,60,1}},x[N];
int i,j,max=0,t=1;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
{
max=0;
for(j=1;j<3;j++)
if(a[max][i]<a[j][i])max=j;
x[t++]=a[max][i];
}
for(i=1;i<t;i++)
printf("第%d列最大值是:%d\n",i,x[i]);
}
程序九:将一个二维数组行和列的元素互换。
main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int i,j,max=0,t=1;
printf("交换前:\n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("交换后:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",a[j][i]);
printf("\n");
}
}
程序十: 输出二维数组的鞍点。鞍点乃该元素在该行上最大,在该列上最小。
#define N 3
main()
{
int a[N][N]={{9,6,66},{10,23,55},{5,7,8}},pos,flag=0;
int i,j,max;
for(i=0;i<N;i++)
{
max=a[i][0];
for(j=0;j<N;j++)
{
if(a[i][j]>max)
max=a[i][j];
pos=j;
}
for(j=0;j<N;j++)
if(a[j][pos]<max)break;
if(j==N)
{
printf("找到了该鞍点为第%d第%d列%d",i,pos,a[i][pos]);
flag=1;
break;
}
}
if(flag==0)printf("没有鞍点\n");
}