更改代码以跟踪最小和最大元素的索引并不难。
只需在变量mx 和mn 中存储相应的最小和最大元素的索引,而不是例如它们的值。
mx = 0;
mn = 0;
for ( i = 1; i < n; i++ )
{
if ( arr1[i] > arr1[mx] )
{
mx = i;
}
else if ( arr1[i] < mn )
{
mn = i;
}
}
但我想指出的是,尝试始终编写更通用的代码。
您可以编写一个单独的函数,返回一对最大和最小元素的索引。
你来了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct Pair { size_t min; size_t max; }
minmax_element( const int a[], size_t n )
{
struct Pair minmax = { .min = 0, .max = 0 };
for ( size_t i = 1; i < n; i++ )
{
if ( a[i] < a[minmax.min] )
{
minmax.min = i;
}
else if ( a[minmax.max] < a[i] )
{
minmax.max = i;
}
}
return minmax;
}
int main(void)
{
size_t n = 1;
printf( "Input the number of elements to be stored in the array: " );
scanf( "%zu", &n );
int a[n];
srand( ( unsigned int )time( NULL ) );
for ( size_t i = 0; i < n; i++ )
{
a[i] = rand() % ( int )n;
}
for ( size_t i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
struct Pair minmax = minmax_element( a, n );
printf( "The minimum value is %d at position %zu\n", a[minmax.min], minmax.min );
printf( "The maximum value is %d at position %zu\n", a[minmax.max], minmax.max );
return 0;
}
程序输出可能看起来像
Input the number of elements to be stored in the array: 10
7 1 7 3 1 7 8 5 0 3
The minimum value is 0 at position 8
The maximum value is 8 at position 6
或者,该函数可以使用两个附加参数来定义:指向最小元素索引的指针和指向最大元素索引的指针。
你来了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void minmax_element( const int a[], size_t n, size_t *min, size_t *max )
{
*min = 0;
*max = 0;
for ( size_t i = 1; i < n; i++ )
{
if ( a[i] < a[*min] )
{
*min = i;
}
else if ( a[*max] < a[i] )
{
*max = i;
}
}
}
int main(void)
{
size_t n = 1;
printf( "Input the number of elements to be stored in the array: " );
scanf( "%zu", &n );
int a[n];
srand( ( unsigned int )time( NULL ) );
for ( size_t i = 0; i < n; i++ )
{
a[i] = rand() % ( int )n;
}
for ( size_t i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
size_t min, max;
minmax_element( a, n, &min, &max );
printf( "The minimum value is %d at position %zu\n", a[min], min );
printf( "The maximum value is %d at position %zu\n", a[max], max );
return 0;
}
程序输出可能看起来像
Input the number of elements to be stored in the array: 10
2 0 4 2 4 3 0 9 1 0
The minimum value is 0 at position 1
The maximum value is 9 at position 7