从c中的数组中删除偶数
Remove even numbers from array in c
你好,我花了大约 2 个小时来创建一个程序,该程序将从 c.Can 中的 dinamyc 分配数组(使用 malloc)中删除偶数。有人帮我提供一些提示或创建代码。
p.s。这是我在这里的第一个主题,请随时给我一些关于如何正确 post 问题的提示。
假设您已经动态分配了一个包含 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("Even\n");
}else{
printf("Odd\n");
}
return 0;
}
这里的全部内容不是关于检查数组中的数字是否为odd
或even
,而是要找到一种方法来检查数字是否为odd
或even
然后才应该检查该数组中是否有 odd
或 even
数字。我希望你明白我的意思。
在 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;
}
你好,我花了大约 2 个小时来创建一个程序,该程序将从 c.Can 中的 dinamyc 分配数组(使用 malloc)中删除偶数。有人帮我提供一些提示或创建代码。
p.s。这是我在这里的第一个主题,请随时给我一些关于如何正确 post 问题的提示。
假设您已经动态分配了一个包含 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("Even\n");
}else{
printf("Odd\n");
}
return 0;
}
这里的全部内容不是关于检查数组中的数字是否为odd
或even
,而是要找到一种方法来检查数字是否为odd
或even
然后才应该检查该数组中是否有 odd
或 even
数字。我希望你明白我的意思。
在 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;
}