素数是只能被1和自己整除的数(不包括1)。 判断一个数字是不是素数的程序:
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int i;
int isPrime = 1; //素数为1
for(i = 2;i < a;i++){
if(a % i == 0){
isPrime = 0;
}
}
if(isPrime == 1){
printf("是素数");
}else{
printf("不是素数");
}
return 0;
}
13
是素数
--------------------------------
Process exited after 1.533 seconds with return value 0
6
不是素数
--------------------------------
Process exited after 1.82 seconds with return value 0
如果输入数字不是素数,上述程序在执行过程中,i的值会不断递增i++直到到达循环条件边界i>=a,而数学上只要数字a可以被任何一个数字整除,都可以证明a不是素数。可以修改程序使得第一次a % i == 0时就离开for循环,程序修改如下:
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int i;
int isPrime = 1; //素数为1
for(i = 2;i < a;i++){
if(a % i == 0){
isPrime = 0;
break;
}
}
if(isPrime == 1){
printf("是素数");
}else{
printf("不是素数");
}
return 0;
}
在程序的12行加入break语句,debug时候可以看到输入6时候,程序中for循环执行一轮后if语句判断成立,break跳出循环,进入到if-else判断中。 ::: tip 在switch-case语句中,case后的语句逐条执行,遇到break停止。 在任何循环中,break的作用是使得程序跳出循环。 continue表示跳过这一轮循环剩下的语句,进入到下一轮循环中。 :::
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int i;
int isPrime = 1; //素数为1
for(i = 2;i < a;i++){
if(a % i == 0){
isPrime = 0;
continue;
}
printf("i=%d\n",i);
}
if(isPrime == 1){
printf("是素数");
}else{
printf("不是素数");
}
return 0;
}
6
i=4
i=5
不是素数
--------------------------------
Process exited after 0.9202 seconds with return value 0
如上述程序,i=2或3时,if判断成立,continue语句执行,跳过打印输出i的值的语句;当i=4或5时,if判断不成立,if后面的语句不执行,执行打印输出i的值的语句。