鱼C论坛

 找回密码
 立即注册
查看: 1429|回复: 7

[已解决]从a数组中找出偶数放入b数组

[复制链接]
发表于 2020-5-5 00:04:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求:
在整形数组a中找出偶数放到b数组中,对b数组按从小到大的顺序进行排序后以格式"%3d"输出,要求每行3个数

自己写的:
#include<stdio.h>
int main()
{
        int i,j,temp,n=0;
        int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
        j=0;
        for(i=0;i<10;i++)
        {
                if(a[i]%2==0)
                        b[j++]=a[i];        
        }
        for(i=0;i<10;i++)
        {
                if(b[n]>b[i])
                {
                        temp=b[n];
                        b[n]=b[i];
                        b[i]=temp;
                }
                n++;
        }
        for(i=0;i<10;i++)
        {
                printf("%.3d",b[i]);
                if((i+1)%3==0)
                        printf("\n");
        }
        return 0;
}

结果是这样的:
006020014
088062010
197574225342017606422352
4201854

怕不是这个数组b根本没有赋值成功?
最佳答案
2020-5-5 15:49:47
Marcccccy 发表于 2020-5-5 15:37
重新改了一下代码:

自己电脑上的VC++运行结果是没错的,但放到学校的平台上结果就变了???我好困惑… ...

冒泡排序的确不太对,帮你改了
满意请给最佳
#include<stdio.h>
int main()
{
    int i,j,temp,n=0;
    int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
    j=0;
    for(i=0;i<10;i++)
    {
        if(a[i]%2==0)
            b[j++]=a[i];        
    }
    for(i=0;i<j-1;i++)//冒泡j-1轮
    {
        for(n=0;n<j-1-i;n++)//每次都是前j-1-i个进行比较,因为后面的已经通过前i次冒泡排好了
        {
            if(b[n]>b[n+1])
            {
                temp=b[n];
                b[n]=b[n+1];
                b[n+1]=temp;
            }
        }
    }
    for(i=0;i<j;i++)
    {
        printf("%3d",b[i]);
        if((i+1)%3==0)
            printf("\n");
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-5 09:30:31 | 显示全部楼层
}
        for(i=0;i<10;i++)
        {
                if(b[n]>b[i])     ====>>>n=0 i=0 b[n]和b[i]不是一个数么,怎么比较,i=1或n=1才好比较
                {
                        temp=b[n];
                        b[n]=b[i];
                        b[i]=temp;
                }
                n++;
        }
        for(i=0;i<10;i++)
        {  
                printf("%.3d",b[i]);   ====》》》 %.3浮点数才这样表示,整型直接 %3d就行了
                if((i+1)%3==0)
                        printf("\n");
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 09:34:38 | 显示全部楼层
大问题有两个。给你指出来,自己修改吧。我手机上不方便操作。b并没有全部赋值。
第一、你是把a中的偶数拿出来给b赋值了,所以b中赋值的数有j项,后两个循环不应该是i<10而是i<j
第二,格式化输出%d不能控制小数的位数,你可能是打算控制其宽度吧。应该是%3d,不是%.3d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 11:10:30 | 显示全部楼层
sunrise085 发表于 2020-5-5 09:34
大问题有两个。给你指出来,自己修改吧。我手机上不方便操作。b并没有全部赋值。
第一、你是把a中的偶数拿 ...

啊啊是的呢!自己写代码总是出现各种问题,谢谢您辽!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 11:11:48 | 显示全部楼层
chxchxkkk 发表于 2020-5-5 09:30
}
        for(i=0;ib)     ====>>>n=0 i=0 b[n]和b不是一个数么,怎么比较,i=1或n=1才好比较
         ...

啊啊明白辽!!谢谢您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 15:37:26 | 显示全部楼层
重新改了一下代码:
#include<stdio.h>
int main()
{
        int i,j,temp,n=0;
        int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
        j=0;
        for(i=0;i<10;i++)
        {
                if(a[i]%2==0)
                        b[j++]=a[i];        
        }
        for(i=0;i<j;i++)
        {
                for(n=0;n<j;n++)
                {
                        if(b[n]>b[n+1])
                        {
                                temp=b[n];
                                b[n]=b[n+1];
                                b[n+1]=temp;
                        }
                }
        }
        for(i=0;i<j;i++)
        {
                printf("%3d",b[i]);
                if((i+1)%3==0)
                        printf("\n");
        }
        return 0;
}
自己电脑上的VC++运行结果是没错的,但放到学校的平台上结果就变了???我好困惑……老师说是冒泡排序控制的不对,让我再研究一下……但是是真的不明白啊
Expected                                                      |        Yours
  6 10 14                                                      |          1  6 10
 20 62 88                                                      |         14 20 62
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 15:49:47 | 显示全部楼层    本楼为最佳答案   
Marcccccy 发表于 2020-5-5 15:37
重新改了一下代码:

自己电脑上的VC++运行结果是没错的,但放到学校的平台上结果就变了???我好困惑… ...

冒泡排序的确不太对,帮你改了
满意请给最佳
#include<stdio.h>
int main()
{
    int i,j,temp,n=0;
    int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
    j=0;
    for(i=0;i<10;i++)
    {
        if(a[i]%2==0)
            b[j++]=a[i];        
    }
    for(i=0;i<j-1;i++)//冒泡j-1轮
    {
        for(n=0;n<j-1-i;n++)//每次都是前j-1-i个进行比较,因为后面的已经通过前i次冒泡排好了
        {
            if(b[n]>b[n+1])
            {
                temp=b[n];
                b[n]=b[n+1];
                b[n+1]=temp;
            }
        }
    }
    for(i=0;i<j;i++)
    {
        printf("%3d",b[i]);
        if((i+1)%3==0)
            printf("\n");
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 15:56:24 | 显示全部楼层
sunrise085 发表于 2020-5-5 15:49
冒泡排序的确不太对,帮你改了
满意请给最佳

啊啊蟹蟹您!!自己的基础实在太差了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表