#include <stdio.h>
main()
{
int i,l,t=1,m,a[15]={0};
for(i=0;i<15;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<15;i++)
{
if(a[i]>=3 && a[i]<=8)
{
for(l=i+1;l<15;l++)
{
if(a[i]>a[l])
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}
printf(" No%d \t %d \n",t++,a[i]);
}
}
system("pause");
}
在ci中的这段代码中,想要以升序打印数组的元素,但元素的值必须是3和8之间的结果。我得到的结果排除了超过8的值,但它们包含的值低于3为什么会这样?提前谢谢。
答案 0 :(得分:3)
我建议你单独进行排序,然后只打印3到8之间的元素,然后按照你想要的顺序得到它。
// sort the array
for(i=0;i<15;i++)
{
for(l=i+1;l<15;l++)
{
if(a[i]>a[l])
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}
}
for (i = 0; i < 15; i++)
{
if (a[i] < 3)
continue;
if (a[i] > 8)
break;
printf(" No%d \t %d \n",t++,a[i]);
}
编辑:修改后的打印循环
答案 1 :(得分:1)
看起来你正在运行某种排序算法,但是你跳过3到8之间的所有元素。
您看到打印数量低于3的原因是因为您的printf
位于交换循环之后:到内循环结束时,可以插入小于a[i]
的数字。 i
- 位置。如果您在循环之前移动printf
,则打印的数字将全部来自[3..8]
范围,包括两端。
答案 2 :(得分:0)
您的外部循环从您的排序中排除了3和8:
for(i=0;i<15;i++)
{
if(a[i]>=3 && a[i]<=8) /* <--- exclusion here */
{
/* code nested in outer loop and exclusion */
}
}
但是,你的内部循环没有这样的排除:
for(l=i+1;l<15;l++)
{
if(a[i]>a[l]) /* <--- no exclusion! */
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}
我建议修改内部循环以从搜索中排除低于3的值:
for(l=i+1;l<15;l++)
{
if(a[l]>=3 && a[i]>a[l])
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}