【发布时间】:2018-12-18 00:15:46
【问题描述】:
此代码仅允许用户填充数组:
它应该在不使用任何排序功能的情况下检查它是按降序还是升序排列,或者可能都不是。但是它不能正常工作,因为它既不是升序也不是降序时不排序
#include <stdio.h>
int main ()
{
int array[10];
int i;
int c;
int d;
printf("Enter the element of array:\n");
for(i=0; i<10; i++)
{
scanf("%d",&array[i]);
}
for(i=0; i<10; i++)
{
printf("%d\n",array[i]);
}
for(i=0; i<9; i++)
{
if(array[i]<array[i+1])
{
c=1;
}
else if(array[i]>array[i+1])
{
d=1;
}
}
if(c==1)
{
printf("ASCENDING");
}
else if(d==1)
{
printf("DESCENDING");
}
else
{
printf("NONE");
}
return 0;
}
【问题讨论】:
-
从 0 到 N-2 遍历数组,检查下一个元素是否大于或等于当前元素。如果不是,则不排序。与检查小于或等于降序相同。
-
对于 0 到 last_index - 1 之间的所有 i,升序表示
[i] <= [i+1]。降序与>=类似。 -
您在循环中正确地进行了测试,但您需要进行一些更改才能正常工作。首先,您没有初始化
c和d,因此它们可以包含任何内容。特别是,如果其中任何一个碰巧持有1,您就会面临这种“错误警报”的风险。其次,它只需要一个元素实例,以将c或d设置为1。所以,首先初始化它们。这决定了它们的初始值的含义,与1的含义。然后修改循环中的逻辑或最后的最终测试以获得您真正想要的行为。 -
如果你想要简单的解决方案,复制数组,
qsort复制升序,然后memcmp原始,qsort复制降序,memcmp原始,否则两者都不是。