当前位置:编程学习 > C/C++ >>

c语言 求一组数中的最大2个值。

答案:先找最大值,再找次大值呀,给你一个简单的版本,当然你可以继续优化。 #include <stdio.h> void find(int arr[], int size) { int i, first = 0, second; for(i = 1; i < size; i++) { if(arr[first] < arr[i]) first = i; } if(first == 0) { second = 1; i = 2; } else { second = 0; i = 1; } for(; i < size; i++) { if((i != first) && (arr[second] < arr[i])) second = i; } printf("first = %d, second = %d\n", arr[first], arr[second]); } int main() { int arr[5]; int i; for(i = 0; i < 5; i++) scanf("%d", &arr[i]); find(arr, 5); return 0; }
其他:#include<stdio.h>

//如果*a>*b,交换2个数
void swap(int *a, int *b)
{
	if(*a>*b)
	{
		int temp=*a;
		*a=*b;
		*b=temp;
	}
}

void fun(int a[], int n)
{
	int i;
	int max[2];
	if(n<2)
	{
		printf("less than 2 numbers in array!\n");
		return;
	}
	else
	{
		max[0]=a[0];
		max[1]=a[1];
		swap(max,max+1);
		for(int i=2;i<n;i++)
		{
			if(a[i]>max[0])
			{
				max[0]=a[i];
				swap(max,max+1);
			}
		}
	}
	printf("max numbers are %d , %d \n",max[0],max[1]);
}

void main()
{
	int a[100];
	int n;
        do
        {
             printf("input a integer between 1 and 100");
	     scanf("%d",&n);
        }while(n<1 || n>100);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}

	fun(a,n);
} #include "stdio.h"
void GetMax (WORD *gLocal_buff,    // 数据
                          WORD g2Local_1,   // 数据长度
                          WORD *gLocal_max1,  // 最大
                          WORD *gLocal_max2);
void main(){

	WORD a[10] = {1,2,3,4,5,6,7,8,9,10};
	int max1,max2;
	max1 =0;
	max2 =0;
	GetMax(a,10,&max1,&max2);
	printf("最大=%4d 第二大=%4d",max1,max2);
	

}


void GetMax (WORD *gLocal_buff,    // 数据
                          WORD g2Local_1,   // 数据长度
                          WORD *gLocal_max1,  // 最大
                          WORD *gLocal_max2){// 第二大

	WORD g2Local_2;
	WORD g2Local_3;
	WORD g2Local_Max1;
	WORD g2Local_Max2;

	g2Local_Max1= 0;
	g2Local_Max1= 0;

	for (g2Local_2=0;g2Local_2<g2Local_1;g2Local_2++){
		
		g2Local_3 = *(gLocal_buff +g2Local_2) ;
		if (g2Local_3 > g2Local_Max1;{
			g2Local_Max1= g2Local_3;
		}   
		
	}

	for (g2Local_2=0;g2Local_2<g2Local_1;g2Local_2++){
		
		g2Local_3 = *(gLocal_buff +g2Local_2) ;
		if (g2Local_3 > g2Local_Max2 && g2Local_3< g2Local_Max1){
			g2Local_Max2= g2Local_3;
		}   
		
	}
	*gLocal_max1 = g2Local_Max1;
	*gLocal_max2 = g2Local_Max2;
}

(直接写,算法不算好,但是可以用,直接调用GetMax 函数就可以得出数据中最大的二个数了) VC6.0下编译通过,绝对能运行!有注释语句方便理解!C++语言写的!
#include <iostream>  
using namespace std;  
int main()  
{   
	int i,j,k,t,n,max,second;
	int num1,num2;
	cin>>n;
	cin>>num1>>num2;
	max=num1;
	second=num2;
	if(max<second)
	{
		k=max;
		max=second;
		second=k;
	}/*交换两个数的值,保证max为最大数*/
	for(i=0;i<n-2;i++)
	{
		cin>>j;
		if(max<j)
		{
			t=max;
			max=j;
			second=t;
		}
		else if(second<j)
			second=j;
	}
    cout<<max<<" "<<second<<endl;
	return 0;  
} void GetTop2 (int source[], int length, int result[2] )
{//source是源数组 ,length是源数组的元素个数, 结果放在result里
int Max_1;//最大的数
int Max_2;//第二大的数
int CurrNum;//临时数
if(source[0]>source[1])
{
Max_1 = source[0];
Max_2 = source[1];
}else{
Max_1 = source[1];
Max_2 = source[0];
}

for(int i=2;i<length;i++)
{
CurrNum = source[i];
if(CurrNum > Max_1)
{
 Max_1 = CurrNum;
 Max_2 = Max_1;
}else 
if(CurrNum < Max_1 && CurrNum > Max_2)
{
 Max_2 = CurrNum;
}
}
result[0] = Max_1;
result[1] = Max_2;
} main()
{ printf("不会!");
} if(i=1)
   max=min=a;
改为
if(i==1)
   max=min=a;
你原来那样会导至i的值永远到不了4。
还有最后
数为:%d/n其中奇数个数
中/n
改为
\n。

上一个:C语言小问题 在线等
下一个:(C语言)有四个警告,不能出运行结果,请帮忙看下,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,