这是一个简单的程序,用于查找数组的最小元素。但是以下程序的先前版本给出了一个错误,其中最小和最大数字显示为 0。在该程序的以下版本中,编译器给出了分段错误。
#include <stdio.h>
void minimum();
void maximum();
int n;
int main()
{
int array[n];
printf("Enter the size of your array:\n");
scanf("%d", &n);
printf("Enter the elements of your array:\n");
for (int i = 0; i < n; i++)
{
printf("Enter element %d:\n", i + 1);
scanf("%d", array);
}
minimum(array[n]);
maximum(array[n]);
return 0;
}
void minimum(int arr[n])
{
int* min;
min = &arr[0]; // Initialize min to the value of the first element of the array
for (int i = 1; i < n; i++)
{
if (*(arr+i)<*min)
{
*min = *(arr+i);
}
}
printf("The smallest element in the array is: %d\n", *min);
}
void maximum(int arr[n])
{
int* max;
max = &arr[0]; // Initialize min to the value of the first element of the array
for (int i = 1; i < n; i++)
{
if (*(arr+i)>*max)
{
*max = *(arr+i);
}
}
printf("The greatest element in the array is: %d\n", *max);
}
在这个程序的早期版本中,我尝试将两个参数传递给函数声明,第一个只有一个 int*,第二个只有一个 int* 和一个 int,这两个参数都导致最小和最大数字都是 0,尽管它应该有是其他一些数字。我还尝试将最小值和最大值与数组指针一起传递给函数,例如
void min(int*, int*);
这也给出了 nim 和 max 都等于 0 的输出。
#include <stdio.h>
void minimum(int *, int);
void maximum(int *, int);
int main()
{
int n;
int array[100];
printf("Enter the size of your array:\n");
scanf("%d", &n);
printf("Enter the elements of your array:\n");
for (int i = 0; i < n; i++)
{
printf("Enter element %d:\n", i + 1);
scanf("%d", array);
}
minimum(array, n);
maximum(array, n);
return 0;
}
void minimum(int *arr, int n)
{
int *min = &arr[0]; // Initialize min to the value of the first element of the array
for (int i = 1; i < n; i++)
{
if (*(arr+i)<*min)
{
*min = *(arr+i);
}
}
printf("The smallest element in the array is: %d\n", *min);
}
void maximum(int *arr, int n)
{
int *max = &arr[0]; // Initialize min to the value of the first element of the array
for (int i = 1; i < n; i++)
{
if (*(arr+i)>*max)
{
*max = *(arr+i);
}
}
printf("The greatest element in the array is: %d\n", *max);
}
minimum(array[n]);
您不只向数组传递数组的单个元素,它的 id 过程会调用未定义的行为。
array
,因为索引是从0
到n - 1
。