用于显示后续元素大于前一元素的次数的程序

时间:2016-09-28 14:18:26

标签: c

我一直想写一个代码来显示suceceding元素大于前面元素的次数,但我不认为我的逻辑是正确的。这是我的代码。请给我建议改进代码以获得所需的输出。

int main(void)
{
    int arr[10] = { '\0' };
    int i = 0, n = 0, count = 0, j = 0;
    printf("\nEnter the number of elements in the array: ");
    scanf("%d", &n);
    printf("\nEnter the elements");
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    printf("\nThe array elements are: ");
    for (i = 0; i < n; i++)
    {
        printf("%d\t", arr[i]);
    }
    for (i = arr[0], j = arr[1]; i < arr[n], j = arr[n]; i++, j++)
    {
        if (i < j)
            count++;
    }
    printf("\nThe count is: %d", count);

    return 0;
}

3 个答案:

答案 0 :(得分:1)

你的最后一个循环是远离的。通常更容易将索引增加到数组中 例如,假设你有这个数组:

5 4 3 2 1

您的代码执行此操作:

  1. 您的for循环将5分配给i,将4分配给j
  2. 然后你比较ij(这是正确的目前
  3. 接下来,您会增加ij,现在分别为65。这不是你想要的。
  4. 此外,循环中的条件是错误的。一旦您正在查看的值(例如第一个元素)大于最后一个元素,它就会突破循环。在我的示例数组中,它会立即中断。 (i=5不低于arr[n]=1

    相反,您应该将索引增加到数组中,并在到达最后一个索引时跳出循环。

    for(i = 0, j = 1; j < n; i++, j++) {
        if(arr[i]<arr[j])
            count++;
    }
    

    您还要确保n小于或等于10,否则您将在数组外写字。
    添加

    if(n > 10) {
        n = 10;
    }
    

    if(n > 10) {
        printf("Max number of elements is 10.\n");
        return -1;
    }
    
    获得n

答案 1 :(得分:0)

问题出在最后一个for循环中。你正在做一些非常奇怪的迭代。

简化:

for(i=0;i<n;i++){
      if(arr[i]<arr[i+1])
          count++;
}

答案 2 :(得分:0)

这应该适合你。主要成分是循环

    for (i = 0; i < n-1; i++)
    {
        if (arr[i] < arr[i+1])
            count++;
    }

让我们说你有5个元素。 {0}将从0到3进行评估。 在这种情况下,您要将iarr[i]进行比较。这意味着,循环将进行比较 arr[i+1]arr[0]arr[1]arr[1]arr[2]arr[2],最后arr[3]arr[3],是你想要实现的目标。

arr[4]