C++调用函数输出一个数组的最大最小值?

2024-11-22 08:09:28
推荐回答(3个)
回答(1):

先不说你取最大最小的算法是否有问题
main函数里,你f()和c()的调用就有问题啊……
a[k]和a[o]是2个INT型的数,你f()和c()都是需要3个参数,且有2个int型和一个int数组型。
再说你的k和o都没赋初值。
还有这句:if(a[i]s=a[i];a[i]=a[i+1];a[i+1]=s;
你想要做什么我还是没看明白,是想这样?
if(a[i]{
s=a[i];
}
a[i]=a[i+1];
a[i+1]=s;
还是想这样?
if(a[i]{
s=a[i];
a[i]=a[i+1];
a[i+1]=s;
}
还有,你的数组a不是10个元素吗?那如果在你的f()和c()函数里,如果i=9时,a[10]不就已经越界了吗?这是内存溢出啊……
*p=a[10];这句也是同样的问题,如果你想把指针p指向数组a,只需要这么写:p=a;

再说算法吧,只需要每次和当前的值比较一下,把最小的(或最大的数)拿出来就行了。
我改写了你的这两个函数。
以下是我写的程序:
int max( int *a, int length )
{
int result = a[0];
int i = 0;
while ( i+1 < length )
{
if ( result < a[i+1] )
{
result = a[i+1];
}
//这个if还可以写为以下1句,我给注了,你可以看一下。
//result = result i++;
}
cout< return result;
}

int min( int *a, int length )
{
int result = a[0];
int tmp = 0;
int i = 0;
while ( i+1 < length )
{
if ( result > a[i+1] )
{
result = a[i+1];
}
//这个if还可以写为以下1句,我给注了,你可以看一下。
//result = result>a[i+1]?a[i+1]:result;
i++;
}
cout< return result;
}

int main( int argc,char** argv)
{
int a[10] = {1,2,4,5,11,23,3,8,9,12};
int *p,l,h,k,o;
l=max(a,10);
h=min(a,10);
system("PAUSE");
return 0;
}

回答(2):

看了你的程序,很乱。所以我自己写了一条
如下:
#include
void outMax(int *a);
void outMin(int *a);//函数声明
void main()
{
int a[10];
for(int i=0;i<10;i++) cin>>a[i];
outMax(a);
outMin(a);
}

void outMax(int *a){//通过指针把数组的首地址传给这两个函数
int temp;
temp=a[1];//先假设第一个数为最大,通过与后面的比较,
//若后面的值中有比第一个大的就把值赋给temp,让temp里面永远放最大值
for(int i=1;i<10;i++){
if(a[i]>temp) temp=a[i];
}
cout<<"最大值是:"<}

void outMin(int *a){
int temp;
temp=a[1];
for(int i=1;i<10;i++){//跟上面那一条差不多,只是把大于改为小于而已
if(a[i] }
cout<<"最小值是:"<}

楼主写程序的时候最好一块一块写。看你的写法很混乱。由小模块拼起来的才比较好,多注重一下你的C中的基础要点,如函数的传递,以及在定义中传递的参数问题

回答(3):

哪个部分有错啊?