从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示:
int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例:
Input 10 numbers:
-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0
---------------------------------------------------------------------------题目
我编的程序如下:
#include
int FindMax(int num[],int n, int *pMaxPos);
int FindMin(int num[],int n,int *pMinPos);
int main(void)
{
int x=10;
int y=10;
int i;
int a[10];
int *ptr1=a;
int *ptr2=a;
printf("Input 10 numbers:\n");
for(i=0;i scanf("%d",&a[i]);
FindMax(a,x,ptr1);
FindMin(a,y,ptr2);
printf("%d",*ptr1);
printf("\n%d",*ptr2);
}
int FindMax(int num[],int n, int *pMaxPos)
{
int j,t1;
t1=num[0];
for(j=1;j {
if(num[j]>=t1)
{
t1=num[j];
*pMaxPos=j;
}
}
printf("max point to %d\n",*pMaxPos);
return t1;
}
int FindMin(int num[],int n,int *pMinPos)
{
int i,t;
t=num[0];
for(i=1;i<n;i++)
{
if(num[i]<t)
{
t=num[i];
*pMinPos=i;
}
}
printf("min point to %d\n",*pMinPos);
return t;
并没有按照题目输出的格式,是因为想要搞清楚*pMinPos和*pMinPos在函数中到底发生了怎样的变化,为什么我运行出来的结果如下图?求大神帮忙把我的程序改错,让指针能够顺利地指向下标并在主函数里顺利地输出正确结果
你只需要把main里面改一下就行了:
//FindMax(a,x,ptr1);
//FindMin(a,y,ptr2);
printf("%d",FindMax(a,x,ptr1););
printf("\n%d",FindMin(a,y,ptr2););
上面只是针对要输出你的答案,需要改的地方还很多。
//你的程序虽然能出结果。但很多地方错了。
#include
int FindMax(int num[],int n, int *pMaxPos);
int FindMin(int num[],int n,int *pMinPos);
int main(void)
{
int maxPos;
int minPos;
int i;
int a[10];
printf("Input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("max:%d\n",FindMax(a,10,&maxPos));
printf("max point to %d\n",maxPos);
printf("min:%d\n",FindMin(a,10,&minPos));
printf("min point to %d\n",minPos);
}
int FindMax(int num[],int n, int *pMaxPos)
{
int i;
int t=num[0];
*pMaxPos=0;
for(i=1;i {
if(num[i]>=t)
{
t=num[i];
*pMaxPos=i;
}
}
return t;
}
int FindMin(int num[],int n,int *pMinPos)
{
int i;
int t=num[0];
*pMinPos=0;
for(i=1;i<n;i++)
{
if(num[i]<t)
{
t=num[i];
*pMinPos=i;
}
}
return t;
}
int *ptr1=a;
int *ptr2=a;
你让ptr1 ptr2指向a 意思就是指向a的第一个元素。 然后你用ptr1 ptr2传到函数里,传的是ptr1 ptr2的一份拷贝, 接着你修改了*ptr1 *ptr2就是修改了a[0]的值。
还有你之所以要传指针,是为了能在main函数里用那两个值(max值和min值的位置)。然后你又在两个函数里面直接输出它们的结果,这样根本就是白用,完全没必要。
你的目的是传入指向maxPos minPos的指针,然后在函数里面修改,然后修改后的值能在main中使用。所以你传的对象就不对!!!(你传的是ptr1=a;ptr2=a)
如果哪里不懂可以来问。