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