c语言 最大值与最小值 不知道那里错了

#include<stdio.h>
#define size 10

int *maximum(int a[],int n);
int *minimum(int a[],int n);

int main()
{
int b[size],i;

printf("Enter 10 number");
for(i=0;i<size;i++)
scanf("%d",&b[i]);

printf("Largest : %3d\n",*maximum(b,size));
printf("Smallest : %3d\n",*minimum(b,size));

return 0;
}
int *maximum(int a[],int n)
{
int i,max;

for(i=0;i<n;i++)
if(a[i]<=a[i+1])
max=a[i+1];

return &a[i+1];
}
int *minimum(int a[],int n)
{
int i,min;

for(i=0;i<n;i++)
if(a[i]<=a[i+1])
min=a[i];

return &a[i];
}

第1个回答  2011-05-12
你算max的函数里是相邻两个数之间的比较,比如1,2,3,5,1,4,这个数组,按你的方法是1和2比较,max=2,2和3比较,max=3,3和5比较max=5,5和1比较,max=5,1和4比较,max=4。修改也很简单,如下:
int *maximum(int a[],int n)
{
int i,index,max; //index是下标
max = a[0];
for(i=1;i<n;i++)
if(max<=a[i])
{
index = i;
max = a[i];
}
return &a[index];
}
算最小值那个同理
第2个回答  2011-05-12
int *maximum(int a[],int n)
{
int i,max;

for(i=0;i<n;i++) //i循环到n-1时,下面的[i+1]指向数组的第N个数,溢出了。
if(a[i]<=a[i+1])
max=a[i+1];

return &a[i+1];
}
int *minimum(int a[],int n)
{
int i,min;

for(i=0;i<n;i++)
if(a[i]<=a[i+1])
min=a[i];

return &a[i];
}
另外 你用指针函数作,麻烦了,不容易理解,不如直接用返回整数值得函数作
我给你改了一下,可以用
#include<stdio.h>
#define size 10

void main()
{
int b[size],i;
int maximum(int a[],int n);
int minimum(int a[],int n);

printf("Enter 10 number");
for(i=0;i<size;i++)
scanf("%d",&b[i]);

printf("Largest : %3d\n",maximum(b,size));
printf("Smallest : %3d\n",minimum(b,size));

return 0;
}
int *maximum(int a[],int n)
{
int i,max=a[0];

for(i=0;i<n-1;i++)
if(max<=a[i+1])
max=a[i+1];

return max;
}
int *minimum(int a[],int n)
{
int i,min=a[0];

for(i=0;i<n-1;i++)
if(min>=a[i+1])
min=a[i];

return min;
}
我们正好上级课,给你调适好了
第3个回答  2011-05-12
#include<stdio.h>
#define size 10

int *maximum(int a[],int n);
int *minimum(int a[],int n);

int main()
{
int b[size],i;

printf("Enter 10 number :");
for(i=0;i<size;i++)
scanf("%d",&b[i]);
printf("Largest : %3d\n",*maximum(b,size));
printf("Smallest : %3d\n",*minimum(b,size));

return 0;
}
int *maximum(int a[],int n)
{
int i,max=0;/////用max来记录最大值的下标,初始下标为0

for(i=0;i<n;i++)
if(a[max]<=a[i])/////////
max=i;/////记录最大值下标

return &a[max];//////////返回最大值的地址
}
int *minimum(int a[],int n)
{
int i,min=0;////////用min来记录最小值的下标,初始下标为0

for(i=0;i<n;i++)
if(a[min]>=a[i])//////
min=i;////////记录最小值下标

return &a[min];/////////返回最小值的地址
}
第4个回答  2011-05-12
1 传参方式不对

2 return 方式不对

3 求最大值最小值函数算法不对

#include<stdio.h>

#define size 10

int maximum(int a[],int n);
int minimum(int a[],int n);

int main()
{
int b[size],i;

printf("Enter 10 number:");
for(i=0;i<size;i++)
{
scanf("%d",&b[i]);
}

printf("Largest : %d\n",maximum(b,size));
printf("Smallest : %d\n",minimum(b,size));

return 0;
}
int maximum(int a[],int n)
{
int i,max=a[0];

for(i=0;i<n;i++)
{
if(max<=a[i])
{
max=a[i];
}
}
return max;
}
int minimum(int a[],int n)
{
int i,min=a[0];

for(i=0;i<n;i++)
{
if(min>=a[i])
{
min=a[i];
}
}
return min;
}
第5个回答  2011-05-12
两个函数的返回值有问题。
当执行 return 的时候,i=n,那么第一个函数数组会越界,第二个将返回a[n]。
将函数声明返回值改为int ,返回值改为return max和return min
相似回答