C程序没有提供素数

时间:2017-06-03 12:47:52

标签: c eclipse

我在Ubuntu Mate中安装了Eclipse。当我编译以下程序时,它编译它而不会给出任何错误。它在Eclipse文本编辑器窗口中没有显示任何警告或错误,但是当我编译它时,它表示所需项目中存在错误。继续推出?"。

这是我的代码:

#include <stdio.h>
int main(){
int a,b,num,div,exi;
printf("this program find out the prime numbers\nnow enter the number until you want to find prime numbers here:- ");
scanf("%d",&b);


for(num=1;num<=b;num++)
{
  for(div=2;div<=(num/2);div++)
  {
    a=num%div;
    if(a!=0)
    {
      continue;
    }
    else
    {
      printf("%d \n",num);
      break;
    }
  }
}



printf("enter any digit to exit");
scanf("%d",&exi);
printf("you entered the %d,thus good bye",exi);
}

当我点击&#34;是&#34;按钮它给我以下输出:

this program find out the prime numbers
now enter the number until you want to find prime numbers here:- 20
4 
6 
8 
9 
10 
12 
14 
15 
16 
18 
20 
enter any digit to exit7
you entered the 7,thus good bye

这不是我想要的输出,但Eclipse并没有告诉我程序中的错误是什么,以便我可以修复它。另外,您能否告诉我我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

Eclipse可以告诉您程序不起作用。它只能告诉您代码是否无法编译成程序。

你的代码可以编译,所以eclipse不会给出任何错误。

但是你的程序不起作用,因为它不打印质数。

让我们来看看你的内循环:

  for(div=2;div<=(num/2);div++) // Here you want to test if num can be divided
                                // by 2 or 3 or 4 or .....
                                // That is fine
  {
    a=num%div;                  // So here you do the check, i.e. you calculate
                                // the reminder
    if(a!=0)
    {
      // Reminder is non-zero. That will happen for e.g. 5%2 (which is 1)
      // So you continue the loop if num is a prime candidate
      continue;
    }
    else
    {
      // Reminder is zero. That will happen for e.g. 4%2
      // So you print the numbers that are NOT primes and stop the loop
      printf("%d \n",num);
      break;
    }
  }

所以最后,你的程序与你想要的完全相反。它打印所有非素数并忽略素数。

所以切换到处都是,在检查完所有值之前不要打印!因此 - 在内循环中使用一个标志并在外循环中打印。

类似的东西:

#include <stdio.h>
int main()
{
   int a,b,num,div,exi;
   printf("this program find out the prime numbers\nnow enter the number until you want to find prime numbers here:- ");
   scanf("%d",&b);


    for(num=2;num<=b;num++)  // Start from 2
    {
        int flag = 1; // Assume prime
        for(div=2;div<=(num/2);div++)
        {
            a=num%div;
            if(a==0)
            {
                flag = 0;  // No - not a prime
                break;
            }
       }
       if (flag) // Was it a prime?
       {
            printf("%d \n",num);  // Yes
       }
     }



      printf("enter any digit to exit");
      scanf("%d",&exi);
      printf("you entered the %d,thus good bye",exi);
  }

注意:我试图将此答案中的代码保留为与问题中的代码类似。但是,代码可以通过多种方式提高性能。只需在SO上搜索“prime”,你就会找到更优化的解决方案。