C99 не позволяет использовать вызовы функций для функций, которые не были предварительно объявлены. И это также не позволяет пропустить возвращаемый тип функции в объявлении функции. До C99 предполагалось, что функции с отсутствующим возвращаемым типом имеют возвращаемый тип int.
Так что вам нужно 1) объявить функцию перед ее использованием и 2) явно указать тип возвращаемого значения как void, потому что функция возвращаетНичего.
Также внутри функции вы используете избыточный вызов printf из-за следующего (неясного) оператора цикла
for (i = 0; i < size - 1; i++) {
^^^^^^^^^^^^
Поскольку функция не изменяет массив, она должна быть объявлена с помощьюквалификатор const
.
И размер массива должен иметь тип size_t
. Это тип значения, возвращаемого оператором sizeof
.
Цикл в main может быть оптимизирован. Вам не нужно менять два элемента, если их индексы равны друг другу.
Вот ваша обновленная программа.
#include <stdio.h>
void print_array( const int parray[], size_t size );
int main(void)
{
int a1[] = { 1, 2, 5, 3, 5, 4, 6, 9, 11 };
size_t arr_size = sizeof( a1 ) / sizeof( a1[0] );
printf( "Elements in original array are: " );
print_array( a1, arr_size );
for ( size_t i = 0, j = 0; i < arr_size; i++ )
{
if ( a1[i] % 2 == 0 )
{
if ( i != j )
{
int temp = a1[j];
a1[j] = a1[i];
a1[i] = temp;
}
j++;
}
}
printf( "\nElements in new array are: " );
print_array( a1, arr_size );
}
void print_array( const int parray[], size_t size )
{
for( size_t i=0; i < size; i++ )
{
printf( "%d, ", parray[i] );
}
putchar( '\n' );
}