我正在尝试编写一个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>
答案 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中x
和y
的声明应该只是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 );