鱼C论坛

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

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

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

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

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

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

自己写的:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i,j,temp,n=0;
  5.         int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
  6.         j=0;
  7.         for(i=0;i<10;i++)
  8.         {
  9.                 if(a[i]%2==0)
  10.                         b[j++]=a[i];       
  11.         }
  12.         for(i=0;i<10;i++)
  13.         {
  14.                 if(b[n]>b[i])
  15.                 {
  16.                         temp=b[n];
  17.                         b[n]=b[i];
  18.                         b[i]=temp;
  19.                 }
  20.                 n++;
  21.         }
  22.         for(i=0;i<10;i++)
  23.         {
  24.                 printf("%.3d",b[i]);
  25.                 if((i+1)%3==0)
  26.                         printf("\n");
  27.         }
  28.         return 0;
  29. }
复制代码


结果是这样的:
  1. 006020014
  2. 088062010
  3. 197574225342017606422352
  4. 4201854
复制代码


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

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

冒泡排序的确不太对,帮你改了
满意请给最佳
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i,j,temp,n=0;
  5.     int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
  6.     j=0;
  7.     for(i=0;i<10;i++)
  8.     {
  9.         if(a[i]%2==0)
  10.             b[j++]=a[i];        
  11.     }
  12.     for(i=0;i<j-1;i++)//冒泡j-1轮
  13.     {
  14.         for(n=0;n<j-1-i;n++)//每次都是前j-1-i个进行比较,因为后面的已经通过前i次冒泡排好了
  15.         {
  16.             if(b[n]>b[n+1])
  17.             {
  18.                 temp=b[n];
  19.                 b[n]=b[n+1];
  20.                 b[n+1]=temp;
  21.             }
  22.         }
  23.     }
  24.     for(i=0;i<j;i++)
  25.     {
  26.         printf("%3d",b[i]);
  27.         if((i+1)%3==0)
  28.             printf("\n");
  29.     }
  30.     return 0;
  31. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
重新改了一下代码:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i,j,temp,n=0;
  5.         int a[10]={7,6,20,3,14,88,53,62,10,29},b[10];
  6.         j=0;
  7.         for(i=0;i<10;i++)
  8.         {
  9.                 if(a[i]%2==0)
  10.                         b[j++]=a[i];       
  11.         }
  12.         for(i=0;i<j;i++)
  13.         {
  14.                 for(n=0;n<j;n++)
  15.                 {
  16.                         if(b[n]>b[n+1])
  17.                         {
  18.                                 temp=b[n];
  19.                                 b[n]=b[n+1];
  20.                                 b[n+1]=temp;
  21.                         }
  22.                 }
  23.         }
  24.         for(i=0;i<j;i++)
  25.         {
  26.                 printf("%3d",b[i]);
  27.                 if((i+1)%3==0)
  28.                         printf("\n");
  29.         }
  30.         return 0;
  31. }
复制代码

自己电脑上的VC++运行结果是没错的,但放到学校的平台上结果就变了???我好困惑……老师说是冒泡排序控制的不对,让我再研究一下……但是是真的不明白啊
  1. Expected                                                      |        Yours
  2.   6 10 14                                                      |          1  6 10
  3. 20 62 88                                                      |         14 20 62
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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