赞
踩
- #include<stdio.h>
- float a[100];
- void TwoMax(int i,int j,float *fmax2,float *fmax1){
- float lmax2,lmax1,rmax2,rmax1;
- int mid;
-
- if(i==j){
- *fmax1=*fmax2=a[i];
- } else if(i=j-1){
- if(a[i]>a[j]){
- *fmax1=a[i];
- *fmax2=a[j];
- } else{
- *fmax1=a[j];
- *fmax2=a[i];
- }
- }else{
- mid=(i+j)/2;
- TwoMax(i,mid,&lmax2,&lmax1);
- TwoMax(mid+1,j,&rmax2,&rmax1);
-
- if(lmax1>rmax1){
- if(lmax2>rmax2){
- *fmax1=lmax1;
- *fmax2=lmax2;
- }else
- {
- *fmax1=lmax1;
- *fmax2=rmax1;
- }
- }else{
- if(rmax2>lmax2){
- *fmax1=rmax1;
- *fmax2=rmax2;
- }else{
- *fmax1=rmax1;
- *fmax2=lmax1;
- }
- }
- }
- }
-
- float second(int n){
- float max2,max1;
- TwoMax(0,n-1,&max2,&max1);
- return max2;
- }
- int main(){
- int n, i;
- float max2;
- printf("请输入数组长度:");
- scanf("%d", &n);
- printf("请依次输入数组的数:");
- for (i = 0; i < n; i++) {
- scanf("%f", &a[i]);
- }
- max2=second(n);
- printf("第二大的数为:%.0f\n", max2);
- return 0;
- }
解析:
这段代码是用来找出数组中第二大的数的。下面逐行解释代码的功能:
这段代码通过递归的方式,将数组分为两半,并分别找出左半部分和右半部分的两个最大数,然后比较这四个数的大小,得到第二大的数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。