获取整型数组的第二大的数,完全采用数组来实现(当然也可以借助单链表来做)。
大体思想就是:先由小到大排序,然后可以获得最大的数,接着可以得到第二大的数,这里考虑到了数组中可能会出现重复数据的情况。gcc调试通过。
?
#include<stdio.h>
#include<stdlib.h>
#define N 12
void GetSecondNumber(int array[N])
{
int i,j,tmp,array_backup[N];
printf("原数组为:\n");
for(i=0;i<N;i++)
{
printf("%5d",array[i]);
}
printf("\n");
// 数组的备份,为了以后查找第二大的数的下标
for(i=0;i<N;i++)
{
array_backup[i]=array[i];
}
// 对原数组进行冒泡排序
for(i=0;i<N-1;i++)
{
for(j=0;j<N-i-1;j++)
{
if(array[j]>array[j+1])
{
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
printf("排序后的数组为:\n");
for(i=0;i<N;i++)
{
printf("%5d",array[i]);
}
printf("\n");
// 以下为寻找第二大的数并匹配其下标
i=N-1;
if(array[i]>array[i-1])
{
printf("该数组中第二大的数是:%5d\n",array[i-1]);
printf("其下标是:");
for(j=0;j<N;j++)
{
if(array[i-1]==array_backup[j])
printf("%3d,",j);
}
printf("\n");
exit(0);
}
while(array[i]==array[i-1])
{
--i;
if(i-1==0)
{
printf("该数组中没有第二大的数。\n");
exit(0);
}
}
printf("该数组中第二大的数是:%d\n",array[i-1]);
printf("其下标是:");
for(j=0;j<N;j++)
{
if(array[i-1]==array_backup[j])
printf("%3d,",j);
}
printf("\n");
}
int main()
{
int i,array[N];
printf("请依次输入 %d 个数值,建立测试数组:\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&array[i]);
}
GetSecondNumber(array);
return 0;
}
?
?
?
调试环境:Ubuntu Desktop 8.04.4??? VI 7.1.138??? GCC 4.2.4
QQ:81064483
E-mail:AllenNewOK@126.com
复习之用,不足之处,烦请高手们指点。< ^_^ >