从c中的数组中删除偶数



你好,我花了大约2个小时的时间试图创建一个程序,该程序将从c中的dinamyc分配数组(带malloc)中删除偶数。有人能帮我提供一些提示或创建代码吗。

附言:这是我在这里的第一个话题,所以请随时给我一些关于如何正确发布问题的提示。

让我们假设您已经动态分配了一个由n个元素组成的数组并对其进行了初始化

在这种情况下,删除具有偶数值的元素的函数可以看起来像

size_t remove_even( int *a, size_t n )
{
    size_t m = 0;
    for ( size_t i = 0; i < n; i++ )
    {
        if ( a[i] % 2 != 0 )
        {
            if ( i != m ) a[m] = a[i];
            ++m;
        }
    }
    return m;
}

它可以称为以下方式

size_t m = remove_even( p, n );
for ( size_t i = 0; i < m; i++ ) printf( "%d ", a[i] );
printf( "n" );

其中p是指向动态分配的n个元素数组的指针。

该函数实际上不删除任何内容。它只是将奇数元素移动到数组的开头。

然后,您可以使用标准的C函数realloc以物理方式删除删除的元素。

例如

int *tmp = realloc( p, m * sizeof( int ) );
if ( tmp != NULL ) p = tmp;

这是一个演示程序

#include <stdlib.h>
#include <stdio.h>
size_t remove_even( int a[], size_t n )
{
    size_t m = 0;
    for ( size_t i = 0; i < n; i++ )
    {
        if ( a[i] % 2 != 0 )
        {
            if ( i != m ) a[m] = a[i];
            ++m;
        }
    }
    return m;
}
#define N   10
int main( void )
{
    int *a = malloc( N * sizeof( int ) );
    for ( size_t i = 0; i < N; i++ ) a[i] = i;
    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    printf( "n" );
    size_t m = remove_even( a, N );
    int *tmp = realloc( a, m * sizeof( int ) );
    if ( tmp != NULL ) a = tmp;
    for ( size_t i = 0; i < m; i++ ) printf( "%d ", a[i] );
    printf( "n" );
    free( a );
}

其输出为

0 1 2 3 4 5 6 7 8 9 
1 3 5 7 9 

在编写代码之前,您需要检查一些内容,但我发现没有显示使用的代码。

SO不是一个教程网站,所以这意味着你应该向我们展示一些实际编译的代码,并在这里询问这些代码是否有问题。

无论如何,直到,这个代码应该会给你一个关于如何检查数字是odd还是even:的想法

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int n;
    printf("Enter an integer:>  ");
    if((scanf("%d", &n)) != 1){
        printf("Error, Fix it!n");
        exit(1);
    }
    if (n%2 == 0){
        printf("Evenn");
    }else{
        printf("Oddn");
    }
    return 0;
}

这里的全部内容并不是要检查数组中的数字是odd还是even,而是要找到一种方法来检查一个数字是odd还是even,然后才应该检查该数组中是否有oddeven数字。我希望你能理解我的观点。

从C中的数组中删除偶数的一个简单方法是创建一个由从1到原始数组中存在的最大元素的所有奇数元素组成的新数组,然后比较原始数组和奇数元素数组(并进行交集),并将其放在两个数组中存在相同元素的另一个数组中。

这是程序:

#include<stdio.h>
int main(){
int a[20],n,i,max,j,k=0,l=0;
printf("enter limit of array ");
scanf("%d",&n);
printf("enter the elements ");
for (i=0;i<n;i++){
    scanf("%d",&a[i]);
}
max=a[0];
for (i=0;i<n;i++){
    if (a[i]>max){
        max=a[i];
    }
}
int b[max],c[n],count=0;
for (j=2;j<=max;j=j+2){
    c[k++]=j;
    count++;
}
for (i=0;i<n;i++){
    for (j=0;j<count;j++){
        if (a[i]==c[j])
        b[l++]=a[i];
    }
}
for (i=0;i<count;i++){
    printf("%d ",b[i]);
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新