Напишите программу на C для создания нового массива из заданного массива целых чисел, сдвигая все четные числа перед всеми нечетными числами - PullRequest
0 голосов
/ 07 ноября 2019

Произошла ошибка сборки в print_array(int parray[], int size). Почему в списке ошибок отображается:

missing type specifier - int assumed. Note: C++ does not support default-int

Вот мой код:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int arr_size;
    int a1[] = { 1, 2, 5, 3, 5, 4, 6, 9, 11 };
    arr_size = sizeof(a1) / sizeof(a1[0]);
    printf("Elements in original array are: ");
    print_array(a1, arr_size);

    int size = arr_size, index = 0;
    for (int i = 0; i < size; i++) {
        if (a1[i] % 2 == 0) {
            int temp = a1[index];
            a1[index] = a1[i];
            a1[i] = temp;
            index++;
        }
    }
    printf("\nElements in new array are: ");
    print_array(a1, arr_size);
}
print_array(int parray[], int size)
{
    int i;
    for (i = 0; i < size - 1; i++) {
        printf("%d, ", parray[i]);
    }
    printf("%d ", parray[i]);
    printf("\n");
}

1 Ответ

1 голос
/ 07 ноября 2019

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' );
}
...