在C中的数组内交换奇数和偶数

时间:2015-11-26 22:38:49

标签: c arrays

输入数组例如是Array [10] = {12,23,0,-7,138,22,7,99,10,-2}

我想在一端打印出偶数的数组,在另一端打印奇数,如下所示:Array [10] = {12,0,-2,10,22,138,-7,99,7 ,23}

int main()
{
    int N = 0, i = 0, j = N-1, index = 0;
    printf("Enter N (0>N<10): ");
    scanf("%d", &N);

    int Array[N];
    for(i=0;i<N;i++){
        printf("Enter the value number %d :", i+1);
        scanf("%d", &Array[i]);
    }
    printf("Array[%d] ={",N);
    for(i=0;i<N;i++){
        printf("%d\t", Array[i]);
    }
    printf("}");

    // swaping odd and even numbers

    int Array2[N];
    while (i < j){
        if(Array[i]%2 == 0){
            Array2[i] = Array[index];
            i++;
        }
        else{
            Array2[j] = Array[index];
            j++;
        }
        index++;
    }

    // view the new array

    printf("\n Array[%d] ={",N);
    for(i=0;i<N;i++){
        printf("%d\t", Array2[i]);
    }
    printf("}");

    return 0;
}

这似乎不起作用。任何帮助将不胜感激。

注意:我知道数组[N]部分不是它应该如何完成的,它只是为了简化事情。

4 个答案:

答案 0 :(得分:1)

在你的陈述中:

else{
            Array2[j] = Array[index];
            j++;
        }

您需要j--;而不是j++

答案 1 :(得分:1)

在你的陈述中:

if(Array[i]%2 == 0){

您不想检查要排序的项目(Array[index])吗?

答案 2 :(得分:0)

本声明中程序的开头

int N = 0, i = 0, j = N-1, index = 0;

j设置为-1,因为N初始化0

所以这个循环

while (i < j){
//...

将迭代永远不会取决于它是否有意义。:)

至于循环,它不会交换偶数和奇数。

如果我理解你的方法,你需要像下面这样的东西。您可以修改演示程序,以便用户可以使用数组元素的值。

#include <stdio.h>

#define N   10

int main( void )
{
    int a[N] = { 12, 23, 0, -7, 138, 22, 7, 99, 10, -2 };
    int i, j;

    printf( "Array[%d] = { ", N );
    i = 0;
    do
    {
        printf( "%d", a[i] );
    } while ( ++i < N && printf( ", " ) );
    printf( " };\n");

    i = 0; j = N;
    while ( i != j )
    {
        if ( a[i] % 2 == 0 )
        {            
            ++i;
        }
        else if ( a[--j] % 2 == 0 )
        {
            int tmp = a[j];
            a[j] = a[i];
            a[i] = tmp;
        }
    }

    printf( "Array[%d] = { ", N );
    i = 0;
    do
    {
        printf( "%d", a[i] );
    } while ( ++i < N && printf( ", " ) );
    printf( " };\n");

    return 0;
}

程序输出

Array[10] = { 12, 23, 0, -7, 138, 22, 7, 99, 10, -2 };
Array[10] = { 12, -2, 0, 10, 138, 22, 7, 99, -7, 23 };

答案 3 :(得分:0)

干运行,你就会明白这个概念

#include <stdio.h>
int main()
{
    int arr[10];
    int i,temp;
    printf("Enter elements into arry\n");
    for(i=0;i<=9;i++)
    {
        printf("Element #%d-->",i);
        scanf("%d",&arr[i]);
    }
        for(i=0;i<=9;i=i+2)
        {
            if((arr[i]%2)!=0)
            {
                if((arr[i+1]%2)!=0)
                {
                    arr[i]=arr[i];
                    arr[i+1]=arr[i+1];
                }
                else if((arr[i+1]%2)==0)
                {
                    temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
            else
            {
                if((arr[i+1]%2)==0)
                {
                    arr[i]=arr[i];
                    arr[i+1]=arr[i+1];
                }
                else if((arr[i+1]%2)!=0)
                {
                    temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
        }
        for(i=0;i<=9;i++)
    {
        printf("Element #%d-->%d\n",i,arr[i]);
    }

    return 0;
}