注册 登录
编程论坛 C语言论坛

通过键盘输入10个整数,将其保存在一维数组中,编程把该数组中所有为偶数的数 放在另一个数组中,用指针的方法进行编程。

吴佳俊 发布于 2020-05-22 19:09, 4476 次点击
通过键盘输入10个整数,将其保存在一维数组中,编程把该数组中所有为偶数的数 放在另一个数组中,用指针的方法进行编程。求大佬,帮忙改改,并解释一下
#include<stdio.h>
void main()
{
    int a[10],b[10],i,j,*p;
    p=a;
    printf("input:");
    for(i=0;i<10;i++)
    {
        scanf("%d",p++);
    }
    for(i=0;i<10;i++)
    if(*(p+i)%2==0)
    {
        j=0;
        b[j]=*(p+i);
        j++;
    }
   
    for(p=b;p<(b+10);p++)
    printf("%d",*p);
}
7 回复
#2
rjsp2020-05-22 19:27
第二个循环伊始,p值不对,已经出了a数组。
第二个循环,永远都是b[0]呀?
#3
rjsp2020-05-22 19:29
第三个循环,b数组的10个元素未必全被赋值了
#4
rjsp2020-05-22 19:39
程序代码:
#include <stdio.h>

int main( void )
{
    int a[10];
    const size_t n = sizeof(a)/sizeof(*a);
    for( int* p=a; p!=a+n; ++p )
        scanf( "%d", p );

    int b[n];
    int* b_end = b;
    for( int* p=a; p!=a+n; ++p )
        if( (*p)%2 == 0 )
            *b_end++ = *p;

    for( int* p=b; p!=b_end; ++p )
        printf( "%d ", *p );
}
#5
吴佳俊2020-05-22 19:41
回复 2楼 rjsp
#include<stdio.h>
void main()
{                                       //大佬,我改了之后,运算结果为什么全是8???
    int a[10],b[10],i,j,*p;
    p=a;
    printf("input:");
    for(i=0;i<10;i++)
    {
        scanf("%d",p++);
    }
    p=a;
    for(i=0;i<10;i++)
    {
    if(*(p+i)%2==0)
    {
        for(j=0;j<10;j++)
        b[j]=*(p+i);        
    }
    }  
    for(p=b;p<(b+10);p++)
    printf("%2d",*p);
}
#6
吕孟伟2020-05-22 19:48
回复 5楼 吴佳俊
建议先读懂人家的代码,你再进行修改。
那你为什么要在if中再加一个for循环呢?
#7
rjsp2020-05-22 19:49
    p=a;
    j = 0;
    for(i=0;i<10;i++)
    {
        if(*(p+i)%2==0)
        {
            // for(j=0;j<10;j++)
            b[j++]=*(p+i);      

        }
    }

    for(p=b;p</*(b+10)*/ b+j;p++)
#8
吴佳俊2020-05-22 19:54
回复 6楼 吕孟伟
我有点懵,没刷新,没看到大佬帮忙编的程序
1