![](/img/trans.png)
[英]Write a C program to arrange the numbers in an array as a series of odd and even numbers
[英]Write a C program to create new array from a given array of integers shifting all even numbers before all odd numbers
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");
}
C99 不允許對未預先聲明的函數使用 function 調用。 它也不允許在 function 聲明中省略 function 返回類型。 在 C99 之前,假定沒有返回類型的函數具有返回類型 int。
因此,您需要 1)在使用之前聲明 function 和 2)明確指定其返回類型為 void,因為 function 不返回任何內容。
同樣在 function 中,由於以下(不清楚)循環語句,您正在使用冗余 printf 調用
for (i = 0; i < size - 1; i++) {
^^^^^^^^^^^^
由於 function 不會更改數組,因此應使用限定符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' );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.