获取整型数组的第二大的数,完全采用数组来实现(当然也可以借助单链表来做)。
大体思想就是:先由小到大排序,然后可以获得最大的数,接着可以得到第二大的数,这里考虑到了数组中可能会出现重复数据的情况。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
复习之用,不足之处,烦请高手们指点。< ^_^ >