本文经3-4个晚上整理,但仍有众多纰漏,还请在留言区提建议-;
本文未完,更新中。。。
温馨提示:本文为C语言数组专题小白特供,大佬请自行忽略。。
1.将两个升序数列合并为一个升序数列(在一个升序数列中插入若干个数)
解法一
#include <stdio.h>
int main()
{
int a[100],i,j,c=0,h,b;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
scanf("%d",&b);
while(b!=-1)
{
a[i]=b;
scanf("%d",&b);
c++; //可以得到输入数组的个数
i++;
}
for(i=0;i<c+4;i++) //冒泡排序法
{
for(j=0;j<c+4;j++)
{
if(a[j]>a[j+1])
{
h=a[j];
a[j]=a[j+1];
a[j+1]=h;
}
}
}
for(i=0;i<c+5;i++)
printf("%d ",a[i]);
return 0;
}
本解法以冒泡排序为主体;先将第二个数组中的各个元素接到a[i]数组的后面,之后再排序;
解法二
#include <stdio.h>
int main()
{
int n1,n2,i,j,k,l;
scanf("%d %d",&n1,&n2);
int a[n1],b[n2],c[n1+n2];
for(i=0;i<n1;i++)
scanf("%d",&a[i]);
for(j=0;j<n2;j++)
scanf("%d",&b[j]);
i=0;j=0;k=0;
while(i<n1&&j<n2) //循环将较小数放入新的数组中
{
if(a[i]<b[j])
{
c[k]=a[i];
i++;
k++;
}
else
{
c[k]=b[j];
j++;
k++;
}
}
if(i==n1) //第一个数组全部元素已经放入新数组中,将第二个数组中的剩余元素放入新数组中
{
while(j<n2)
{
c[k]=b[j];
k++;
j++;
}
}
if(j==n2)
{
while(i<n1)
{
c[k]=a[i];
k++;
i++;
}
}
for(l=0;l<(n1+n2);l++)
printf("%d",c[l]);
return 0;
}
2.选择排序与冒泡排序的比较
1.冒泡排序
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N-(i+1);j++)
if(a[j]>a[j+1]) //比较大小
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
2.选择排序
//降序排序
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N-1;j++)
if(a[i]<a[j])//进行比较
//比较后进行交换
{
w=a[i];
a[i]=a[j];
a[j]=w;
}
}
综上可见,冒泡排序是将最大(最小)的数通过循环上浮(下沉)[与前一个数或与后一个数的比较来实现]。而选择排序是通过第一个数与其后N-1个数进行比较,将最大(最小)的数通过交换排到最前面,再拿第二个数与后面N-2个数比较,取该数组中第二大的数,以此类推。
3.利用数组完成:十进制到二进制的转换
#include<stdio.h>
#define N 100
int main()
{
int a[N],b,n,i=0;
scanf("%d",&n);
while(n!=0)
{
a[i++]=n%2; //将每一次的余数保留在数组的一个存储空间里;
n=n/2;
}
for(b=i-1;b>0;b--) //注意b应该从i-1取起,因为a[i]是随机数;
printf("%d",a[b]);
return 0;
}
4.利用数组:输出Fibonacci数列的前n项
#include<stdio.h>
#define N 1000
int main()
{
int a[N],n,i;
scanf("%d",&n);
a[0]=1;
a[1]=1;
for(i=1;i<n;i++)
a[i+1]=a[i]+a[i-1];
for(i=0;i<n;i++)
{
printf("%-5d",a[i]);
if((i+1)%5==0) //每隔5个换行
printf("\n");
}
return 0;
}
5.数组元素前移
#include<stdio.h>
#define N 10
int main()
{
int a[N],i,k,temp;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
temp=a[0];
for(k=0;k<10;k++)
{
a[k-1]=a[k];
if(k==9)
a[9]=temp;
}
for(i=0;i<10;i++)
printf("%-3d",a[i]);
return 0;
}
6.
#include<stdio.h>
#include<math.h>
int main()
{
int a[5][5],b[100],max,temp,i,j,p;
for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++)
scanf("%d",&a[i][j]);
}
for(i=0; i<=4; i++)
{
max=a[i][0];
for(j=0; j<=4; j++)
{
if(fabs(a[i][j])>fabs(max))
{
max=a[i][j];
b[i]=j;
}
}
}
for(i=0; i<=4; i++)
{
p=b[i];
if(a[i][i]!=a[i][p])
{
temp=a[i][i];
a[i][i]=a[i][p];
a[i][p]=temp;
}
}
for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++)
{
printf("%d",a[i][j]);
if(j!=4)
printf(" ");
}
printf("\n");
}
return 0;
}
这道题的解法在思路上是正确的,但细节错误仍然存在。。。请想法的读者在留言区留言;
仍在更新中。。。