如何解决我用 C 写了一个代码,但它不起作用?
问题:用 C 编写程序以从数组中查找素数。
我写了一个代码,但它不起作用。你能帮我看看问题出在哪里吗?
我的代码:
#include <stdio.h>
int main()
{
int n,count = 0,x = 0;
scanf("%d",&n);
int numbers[n],prime[n];
for (int i = 0; i < n; i++)
{
scanf("%d",&numbers[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 2; j < n; j++)
{
if (numbers[i] % j == 0)
{
x++;
break;
}
}
if (x > 0)
{
}
else
{
prime[count] = numbers[i];
count++;
}
}
for (int i = 0; i < count; i++)
{
printf("%d ",prime[i]);
}
return 0;
}
请帮助我找到解决方案。
提前致谢。
解决方法
你的程序没有多大意义。
对于初学者来说,声明的数组应该具有元素类型 unsigned int
而不是 int
。
因为用户可以在数组中输入任意数字,所以这个循环
for (int j = 2; j < n; j++)
没有意义。
例如,如果 numbers[0]
等于 2
,那么您的程序不会将此数字视为质数,尽管 2
是质数。
此外,您忘记在内部 for 循环之前重新初始化变量 x
。
不需要定义第二个数组来输出第一个数组中的素数。
程序可以如下所示。
#include <stdio.h>
int main(void)
{
size_t n;
if ( scanf( "%zu",&n ) == 1 && n != 0 )
{
unsigned int numbers[n];
for ( size_t i = 0; i < n; i++ )
{
scanf( "%u",numbers + i );
}
for ( size_t i = 0; i < n; i++ )
{
int prime = numbers[i] % 2 == 0 ? numbers[i] == 2 : numbers[i] != 1;
for ( unsigned int j = 3; prime && j <= numbers[i] / j; j +=2 )
{
prime = numbers[i] % j != 0;
}
if ( prime ) printf( "%u ",numbers[i] );
}
putchar( '\n' );
}
return 0;
}
如果输入是
25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
那么输出将是
2 3 5 7 11 13 17 19 23
,
如果你想检查一个质数,你应该对 2,(value-1)
范围内的所有值进行检查,为了做到这一点,你应该按如下方式更正第二个循环:
x = 0; // reset the counter
for (int j = 2; j < numbers[i]; j++) { // corrected loop
/* do your checks */
}
/* EDIT: previous code was wrong as suggested in the comments */
if (x==0 && numbers[i]!=1 && numbers[i]!=0) { // added to avoid 0 and 1 as prime nums
/* store value */
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。