我想用 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 on11 - 1 = 10
then how it will give up the logic ofif(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
, 在每次迭代中 c
当 c++
时递增 1(使用 c
递增)变成 11
(不是说 n
)然后条件 c <= n - 1
变为假并循环中断。
在 if 条件下(for 循环之后)c
与 n
相比的值.即:
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/