[英]How can I combine two functions?
我正在我的項目中處理獲取數組並找到最大和最小數字的東西,我用兩個單獨的函數完成了它,我想將它們組合成一個 function。 我怎樣才能正確地做到這一點?
第一個 function 找到數組中的最大值,第二個 function 找到最小值,我試圖將它放到一個名為 MinArray 的 function 示例中。
編碼:
#include <stdio.h>
#define MAX_SIZE 100
int maximum(int array[], int index, int len);
int minimum(int array[], int index, int len);
int main()
{
int array[MAX_SIZE], N, max, min;
int i;
printf("Enter size of the array: ");
scanf("%d", &N);
printf("Enter %d elements in array: ", N);
for (i = 0; i < N; i++)
{
scanf("%d", &array[i]);
}
max = maximum(array, 0, N);
min = minimum(array, 0, N);
printf("Minimum element in array = %d\n", min);
printf("Maximum element in array = %d\n", max);
return 0;
}
int maximum(int array[], int index, int len)
{
int max;
if (index >= len - 2)
{
if (array[index] > array[index + 1])
return array[index];
else
return array[index + 1];
}
max = maximum(array, index + 1, len);
if (array[index] > max)
return array[index];
else
return max;
}
int minimum(int array[], int index, int len)
{
int min;
if (index >= len - 2)
{
if (array[index] < array[index + 1])
return array[index];
else
return array[index + 1];
}
min = minimum(array, index + 1, len);
if (array[index] < min)
return array[index];
else
return min;
}
這里有兩個選擇。 Output arguments 或返回一個結構。
struct vector2d {
int x;
int y;
};
struct vector2d minmax1(int array[], int index, int len)
{
struct vector2d ret;
int max, min;
// Calculate max and min however you want
ret.x = max;
ret.y = min;
return ret;
}
void minmax1(int array[], int index, int len, int *minval, int *maxval)
{
int max, min;
// Calculate max and min however you want
*minval = min;
*maxval = max;
}
另一個可行的選擇:
忘記這些功能,而是對您的數據進行qsort
。 然后只需抓住項目編號0
和項目編號n
- 瞧,這是你的最小值和最大值。 作為獎勵,從現在開始可以使用“O(log n)”進一步搜索數據,因為它是排序的。
對於數組的最小值和最大值的搜索組合function,只聲明兩個參數就足夠了。
給你。
#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 current = { .min = 0, .max = 0 };
if ( !( n < 2 ) )
{
struct Pair prev = minmax_element( a + 1, n - 1 );
if ( a[prev.min + 1] < a[current.min] ) current.min = prev.min + 1;
if ( a[current.max] < a[prev.max + 1] ) current.max = prev.max + 1;
}
return current;
}
int main(void)
{
const size_t N = 10;
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 element is %d at position %zu\n",
a[minmax.min], minmax.min );
printf( "The maximum element is %d at position %zu\n",
a[minmax.max], minmax.max );
return 0;
}
這里有幾個可能的程序輸出。
9 1 2 9 1 0 7 1 5 5
The minimum element is 0 at position 5
The maximum element is 9 at position 0
或者
9 4 2 9 3 9 9 5 7 0
The minimum element is 0 at position 9
The maximum element is 9 at position 0
或者
4 3 4 9 1 3 6 9 3 3
The minimum element is 1 at position 4
The maximum element is 9 at position 3
定義一個這樣的結構來返回:
typedef struct
{
int min;
int max;
}vector;
Function 1:
vector MinMax(int array[], int index, int len)
{
vector temp;
temp.min = minimum(array,index,len);
temp.max = maximum(array,index,len); //using the two function written by you
return temp;
}
Function 2(或):(使用調試器了解 function 是如何工作的)
vector MinMax(int array[], int len) //len is from 0
{
static vector v; // static variable
v.min = array[len]; // assign value of array respect to len
v.max = array[len];
if( (len-1) >= 0 ) // check (len-1) is <= 0 to call function again
{
MinMax(array,len-1);
}
if(v.min > array[len]) //compare and store
v.min = array[len];
if(v.max < array[len]) //compare and store
v.max = array[len];
return v; //return
}
謝謝。(抱歉英語不好,我英語不好)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.