用函数查找数组中的最大和最小数

时间:2019-09-30 10:51:17

标签: c arrays pointers

我正在尝试编写一个C程序,该程序根据输入的数字计算最小值和最大值。我设法找到了最小值和最大值,但是由于某种原因,我无法在函数外部打印出这些值。这是我的代码:

<style name="DatePicker" parent="Theme.MaterialComponents.Light.Dialog">
    <item name="colorPrimary">#377dff</item>
    <item name="colorPrimaryDark">#1C5CD3</item>
    <item name="colorAccent">#377dff</item>
</style>

2 个答案:

答案 0 :(得分:2)

此:

largest=smallest=a[0];

错了。您正在为指针分配一个整数。相反,您应该做的是:

*largest = a[0];
*smallest = a[0];

其他作业也一样,内容如下:

if (*largest < a[i])
    *largest = a[i];

/* ... */

if (*smallest > a[i])
    *smallest = a[i];

/* ... */

printf("Largest is %d\n", *largest);
printf("smallest is %d\n", *smallest);

main中xy的声明应该只是int(而不是int *):

int x, y;

printf中对main的呼叫也是错误的:

printf("Largest value stored is %d and the smallest is %d.", x, y);
//                         no asterisk needed here ----------^

答案 1 :(得分:1)

最大和最小参数具有指针类型

void find_largest_smallest(int a[], int n, int *largest, int *smallest)
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^  

因此,在该函数中,必须取消对指针的引用才能访问指向对象。

例如

void find_largest_smallest(int a[], int n, int *largest, int *smallest)
{
    *largest = *smallest = a[0];
    int i;
    for ( i = 1; i<n; i++ )
    {
        if ( *largest<a[i] )
            *largest=a[i];
    }


    for ( i = 1; i<n; i++ )
    {
        //printf("%d\n", a[i]);
        if ( *smallest>a[i] )
            *smallest=a[i];
    }
    printf("Largest is %d\n", *largest);
    printf("smallest is %d\n", *smallest);
}

请注意,仅使用一个循环就可以找到最大和最小的元素。除此之外,该函数应该计算指向最大和最小元素的指针,而不是指向它们的值,因为通常用户可以传递等于0的数组大小。在这种情况下,该函数将具有未定义的行为。

在main中,变量x和y的类型也应该为int。那是

int x;
int y;

//...

printf("Largest value stored is %d and the smallest is %d.", x, y );