c - 素数计划

标签 c numbers

我想用 C 语言编写一个程序,它将接受用户输入,但我无法理解循环的逻辑。

for ( c = 2 ; c <= n - 1 ; c++ )

程序代码如下:-

#include<stdio.h>
#include<conio.h>

void main()
{
   int n, c;

   printf("Enter a number to check if it is prime\n");
   scanf("%d", &n);

   for ( c = 2 ; c <= n - 1 ; c++ )
   {
      if ( n % c == 0 )
      {
         printf("%d is not prime.\n", n);
         break;
      }
   }
   if ( c == n )
      printf("%d is prime.\n", n);

   getch();
}

我使用了 for 循环,它将在 for 循环中结束 n - 1 的语句。如果我将输入 11 那么它将以 11 - 1 = 10 结束然后它将如何放弃 if(c == n 的逻辑) { printf("%d", n);?

最佳答案

If I will give the input 11 then it will end up on 11 - 1 = 10 then how it will give up the logic of if(c == n) { printf("%d", n);?

现在正确理解你的 for 循环条件:

for ( c = 2 ; c <= n - 1 ; c++ )
              ^^^^^^^^^^^^
              2 <= 11 - 1  -> True   // {for block executes }
              3 <= 11 - 1  -> True   // {for block executes }
                 :
                 :
              9 <= 11 - 1  -> True   // {for block executes }
              10 <= 11 - 1  -> True  // {for block executes }
              11 <= 11 - 1  -> False  breaks //{And Now for block NOT executes}

if (c == n)
    ^^^^^^
   11 == 11 -> True  // {if block executes} 

根据for循环条件c <= n - 1 , 当 c 时循环中断值变为等于 n .所以如果n等于11 c = 2 的循环条件为真至 c = 10 , 在每次迭代中 cc++ 时递增 1(使用 c 递增)变成 11 (不是说 n )然后条件 c <= n - 1变为假并循环中断。

在 if 条件下(for 循环之后)cn 相比的值.即:

if ( c == n )
//   11 == 11  that is true

n = 11它变成了c = 11如果条件评估为 true 和 printf()与 if 执行相关联。


了解 for 循环仅在 c = n 时终止也很重要。什么时候n是质数,但如果假设n是一个非素数,则 for 循环将因 c 而中断值小于 n - 1由于break;嵌套语句 if阻塞在 for 循环中。

for( c = 2; c <= n - 1; c++ ) 
{
  if(n % c == 0)<=="for Non-prime `n`, if condition will be true for some `c < n - 1`"
  {  ^^^^^^^^^^^ True 
     printf("%d is not prime.\n", n);
     break; <== "move control outside for-loop"
  }  //      | 
}    //      |
// <---------+ // if break; executes control moves here with c < n - 1
if (c == n)<== "this condition will evaluates FALSE"  
   ^^^^^^^^ False

例如如果n = 8然后在 for 循环的第一次迭代中,值为 c = 2如果条件if(n % c == 0)评估为 if(8 % 2 == 0) == if( 0 == 0) = 真和 break; if block 内的语句将控制移到 for 循环外(如图所示)。

因为这次 for 循环没有因 c <= n - 1 而终止状况但因 if(n % c == 0) 而刹车所以外面的for循环c值小于 n因此 if (c == n)评估为 False。

关于c - 素数计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404638/

相关文章:

c - C 语言的简单非并发 Web 服务器

c - 是否可以使函数从堆栈上的字符串执行代码?

c - 在 C 中创建链表时出现意外结果

iphone - 在 Objective-C 字符串格式中添加零

javascript - 使用javascript返回每第三个奇数?

GCC 能否准确捕获无用的条件语句?

c - 单行打印中序树遍历的数据,以空格分隔,以换行符结尾

random - 从 32 位有限集生成伪随机非重复整数

python - 为什么数字在 python 中表示为对象?

python - 从Python中的字符串中删除所有非数字字符