如果满足条件,则递减数组并打印值

时间:2014-12-01 12:30:38

标签: c arrays loops absolute-value

我想减少指向数组最后一个元素的指针,并检查指针的值是否小于5的条件,什么都不做,然后转到下一轮循环,如果不是,那就是if值等于或大于5,打印该值。因此,对于示例中的数组,我只想打印6,这是第一次遇到等于或大于5的值。我尝试了下面的代码,但在编译时没有错误,它不打印任何值。我很感激你对此的评论。

#include<stdio.h>

//The is a C program to decrement an array from the last element to the first. 
    int x[11] = {5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2}; 
    int *lastElem, count;
int main (void) {
    lastElem = &x[10];
    for (count = 0; count < 11; count++)
        if (abs(*lastElem) < 5)
        continue;
        else 
        printf("%d\n", *lastElem--); 
    return 0;
}

4 个答案:

答案 0 :(得分:3)

您的减量逻辑存在问题。如果该值小于5,则您错过了该下降。

检查以下代码。

#include<stdio.h>

//The is a C programme to decrement an array from the last element to the first. 
    int x[11] = {5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2};
    int *lastElem, count;
int main (void) {
    lastElem = &x[10];
    for (count = 0; count < 11; count++)
    {
        if (*lastElem >= 5)
            {
            printf("%d\n", *lastElem);
             break ;
             }
        lastElem--;
    }
return 0;
}

编辑:

当您修改问题以包含absolute value比较时,更改如下所示。

注意:当进行一些重大更改[会改变行为和输出]到原始问题时,请记下这一点,如果可能的话,请正确提及编辑。

#include<stdio.h>
#include <stdlib.h>

//The is a C programme to decrement an array from the last element to the first. 
int x[11] = {5, -6, -4, -3, -2, -1, 4, 3, 2, 1, -2};
int *lastElem, count;
int main (void) {
        lastElem = &x[10];
        for (count = 0; count < 11; count++)
        {
                if ( abs(*lastElem) >= 5)
                {
                        printf("%d\n", *lastElem);
                        break;
                }
                lastElem--;
        }
        return 0;
}

答案 1 :(得分:3)

您永远不会将另一个地址分配给lastElem而不是初始值(即第10个元素)。此外,如果要向后移动,请将count设置为10,并将其计数为0.在每个循环中,您必须将&x[count]分配给lastElem(或者减少它,因为它是指针和地址将根据它指向的对象递减。

答案 2 :(得分:1)

printf("%d\n", *lastElem--);并不总是执行,只会在abs(*lastElem) >= 5时执行。这就是你应该怎么做的

#include<stdio.h>

//The is a C programme to decrement an array from the last element to the first. 
int x[11] = {5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2}; 
int *lastElem, count, value;
int main (void) 
{
    lastElem = &x[10];
    for (count = 0; count < 11; count++)
    {
        value = *(lastElem--);
        if (value < 5)
            continue;
        printf("%d\n", value);
        break;
    }
    return 0;
}

这将使用continue

答案 3 :(得分:1)

以下是执行此任务的其他答案中唯一正确的代码。:)

实际上,你需要一个程序向后搜索满足给定条件的数组。如果有这样的元素则输出它。

#include <stdio.h>
#include <stdlib.h>

int main( void ) 
{
    int a[] = { 5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2 }; 
    const size_t N = sizeof( a ) / sizeof( *a );
    int *first = a, *last = a + N;

    while ( first != last && ( unsigned int )abs( *( last - 1 ) ) < 5 ) --last;

    if ( first != last ) printf( "%d\n", *--last );

    return 0;
}

输出

6

下面展示了此类任务的一般方法

#include <stdio.h>
#include <stdlib.h>

int * find_backward( const int a[], size_t n, int ( *predicate )( int ) )
{
    const int *first = a, *last = a + n;

    while ( first != last && !predicate( *( last -1 ) ) ) --last;

    return ( int * )last;
}

int is_greater_or_equal_to_5( int x )
{
    return 5 <= ( unsigned int )abs( x );
}

int main( void ) 
{
    int a[] = { 5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2 }; 
    const size_t N = sizeof( a ) / sizeof( *a );


    int *target = find_backward( a, N, is_greater_or_equal_to_5 );  

    if ( target != a ) printf( "%d\n", *--target );

    return 0;
}

使用此方法,您可以使用任何整数数组(即使是零大小)以及通过谓词设置的任何条件。

例如,如果要查找可被3整除的数组的最后一个元素,则可以编写

#include <stdio.h>
#include <stdlib.h>

int * find_backward( const int a[], size_t n, int ( *predicate )( int ) )
{
    const int *first = a, *last = a + n;

    while ( first != last && !predicate( *( last -1 ) ) ) --last;

    return ( int * )last;
}

int divisible_by_3( int x )
{
    return x % 3 == 0;
}

int main( void ) 
{
    int a[] = { 5, 6, -4, -3, -2, -1, 4, 3, 2, 1, -2 }; 
    const size_t N = sizeof( a ) / sizeof( *a );


    int *target = find_backward( a, N, divisible_by_3 );    

    if ( target != a ) printf( "%d\n", *--target );

    return 0;
}

输出

3

考虑到这个函数也允许处理常量数组。:)