答案:先找最大值,再找次大值呀,给你一个简单的版本,当然你可以继续优化。
#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语言)有四个警告,不能出运行结果,请帮忙看下,