查找C语言中第一个正元素和最后一个负元素的位置和值

查找C语言中第一个正元素和最后一个负元素的位置和值,c,arrays,C,Arrays,我有一个C语言的一维数组。输入元素数(n),然后输入元素本身。我想找到第一个正元素和最后一个负元素的位置和值。我怎么做?我在想这样的事情,但是有一个语义错误,我被卡住了。我只是个初学者,非常感谢你的帮助。提前谢谢你 #include <stdio.h> int main() { int Array[100], i, n; printf("Enter n: "); scanf("%d", &n); printf("Enter %d elem

我有一个C语言的一维数组。输入元素数(n),然后输入元素本身。我想找到第一个正元素和最后一个负元素的位置和值。我怎么做?我在想这样的事情,但是有一个语义错误,我被卡住了。我只是个初学者,非常感谢你的帮助。提前谢谢你

#include <stdio.h>

int main()
{
    int Array[100], i, n;

    printf("Enter n: ");
    scanf("%d", &n);

    printf("Enter %d elements\n", n);

    for (i = 0; i < n; i++)
    {
        printf("Enter number%d: ", i + 1);
        scanf("%d", &Array[i]);
    }

    for (i = 0; i < n; i++)
    {
        if (Array[i] > 0)
        {
            printf("The first positive element is %d\n", Array[i]);
        }
    }

    for (i = 100; i < n; i--)
    {
        if (Array[i] < 0)
        {
            printf("The last negative element is %d\n", Array[i]);
        }
    }
}
#包括
int main()
{
int数组[100],i,n;
printf(“输入n:”);
scanf(“%d”和“&n”);
printf(“输入%d个元素\n”,n);
对于(i=0;i0)
{
printf(“第一个正元素是%d\n”,数组[i]);
}
}
对于(i=100;i
第一个阳性的测试不会退出,因此您将获得所有测试结果

阴性测试需要从n-1开始,而不是从100开始,并在测试完元素0后终止。当找到一个时,它也需要断开。

行中:

 for (i=100; i<n; i--)
这样,就可以从最后一个插入的元素开始,直到达到数组的最大值0为止。 此外,在你的if中,你可以休息一下;命令在printf之后。这样,当您遇到具有所需特征的元素时,您将退出循环。如果不使用break,则可以打印每个正负元素,而不仅仅是第一次遇到的问题:

  • 在你的第二个循环中-你没有中断,这意味着它将继续运行(并打印!!),即使在找到第一个阳性后
  • 在第三个循环中-
    i=100;i
    。错了!它应该是
    i=n-1;i>=0
    ,因为数组只有100个元素长。同样的问题也与之前一样,没有
    break
  • 缩进(使代码可读)
  • 如果
    n>100
    ,会发生什么情况?(提示:您将向您不拥有的内存中插入元素-->UB

  • 以下是一个固定版本:

    #include <stdio.h>
    
    int main()
    {
        int Array[100], i, n;
        printf("Enter n: ");
        scanf("%d", &n);
        if( n > 100)
        {
             printf("error\n");
             return 1;
        }
        printf("Enter %d elements\n", n);
    
        for(i=0; i<n; i++)
        {
            printf("Enter number%d: ",i+1);
            scanf("%d", &Array[i]);
        }
        for(i=0; i<n; i++)
        {
            if (Array[i]>0)
            {   
                printf("The first positive element is %d\n", Array[i]);
                break;
            }
        }
    
        for (i=n-1; i>=0; i--)
        {
            if (Array[i]<0)
            {  
                printf("The first negative element is %d\n", Array[i]); 
                break;
            }
        }
        return 0;
    }
    
    #包括
    int main()
    {
    int数组[100],i,n;
    printf(“输入n:”);
    scanf(“%d”和“&n”);
    如果(n>100)
    {
    printf(“错误\n”);
    返回1;
    }
    printf(“输入%d个元素\n”,n);
    对于(i=0;i=0;i--)
    {
    
    if(数组[i]在未发布错误全文的情况下不会发布“存在错误”。您忘记了
    break;
    内部
    if(数组[i]>0)
    在print语句之后。@下划线\u d我很抱歉。我说有语义错误是指程序运行成功,但它没有做正确的事情。@GauravPathak谢谢!正在阅读
    数组[100]
    是未定义的行为。事实上,任何
    n
    值都可能存在未定义的行为,因为您可能正在访问
    数组中未初始化的位置。需要为n-1。10个元素为0到9@LoztInSpace为(i=n;i--;)写入
    可以解决这个问题。请注意,后减量在第2条中,而不是在第3条中。我肯定有些读者不喜欢这种语法,但这是我的第二天性。(还有,我通常的“请停止使用后减量/默认情况下使用后减量/不需要的地方”。)它需要是n-1,而不是99。范围检查也是一个因素谢谢您的评论!
    #include <stdio.h>
    
    int main()
    {
        int Array[100], i, n;
        printf("Enter n: ");
        scanf("%d", &n);
        if( n > 100)
        {
             printf("error\n");
             return 1;
        }
        printf("Enter %d elements\n", n);
    
        for(i=0; i<n; i++)
        {
            printf("Enter number%d: ",i+1);
            scanf("%d", &Array[i]);
        }
        for(i=0; i<n; i++)
        {
            if (Array[i]>0)
            {   
                printf("The first positive element is %d\n", Array[i]);
                break;
            }
        }
    
        for (i=n-1; i>=0; i--)
        {
            if (Array[i]<0)
            {  
                printf("The first negative element is %d\n", Array[i]); 
                break;
            }
        }
        return 0;
    }