-
方法一
此方法的核心就在于for循环是如何结束的,其一:不符合循环判断条件,循环结束;其二:在循环体中break提前结束循环。
#include <stdio.h>
#include <math.h>
int main()
{
//定义一个变量用来接收用户输入的数据
int num;
//打印提示语(可有可无)
printf("请输入一个大于等于2的正整数: ");
//获取用户输入
scanf("%d", &num);
//首先判断键入的数字是否大于2
if(num >= 2){
int i;
//通过for循环求出2到该数字平方根的所有数字
for(i = 2; i <= sqrt(num); i++){
//判断:num是否可以被当次循环的数字整除
if(num % i == 0){
//如果if的判断条件为假,执行for循环的表达式“i++”
//一旦进入判断,说明i是num的因数
//break提前结束循环
break;
}
}//根据for循环的执行顺序:表达式1->表达式2->循环体->表达式3
//循环体中if语句的判断结果若始终为假,将再次返回到表达式3
//执行for循环的表达式“i++”后,for循环的判断条件为假,循环结束
//判断:i是否大于数字num的平方根
if(i > sqrt(num)){
//条件成立:是质数并格式化打印语句
printf("%d 是质数\n", num);
//否则:不是质数并格式化打印语句
}else{
printf("%d 不是质数\n", num);
}
//键入的数字小于2,打印“ERROR!”
}else{
printf("ERROR!");
}
}
代码运行结果:
-
方法二
此方法中用到一个变量flag去记录是否为质数的状态,默认为1(是质数),经过外层for循环和内层的判断,最终得到flag。最后判断flag的值,为1,是质数;为0,则不是质数。
#include <stdio.h>
#include <math.h>
int main()
{
//定义一个变量用来接收用户输入的数据
int num;
//定义一个变量记录状态(是否为质数),默认是质数
int flag = 1;
//打印提示语句(可有可无)
printf("请输入一个大于等于2的正整数:");
//获取用户输入
scanf("%d", &num);
//判断用户输入的数字是否大于等于2
if(num >= 2){
//使用for循环求出2到该数字的平方根的所有数字
for(int i = 2; i <= sqrt(num); i++){
//判断该数字是否能被当次循环的i整除
if(num % i == 0){
//如果未能整除,则继续执行for循环
//如果整除,说明该数不是质数,状态更新为0
flag = 0;
//使用break提前结束循环
break;
}
}
//判断flag是否为1,是1就是质数
//if的判断条件的值无非就是真与假,所以这里只写一个flag就够了
if(flag)
//格式化打印出是质数
printf("%d 是质数\n", num);
else
//否则,该数字就不是质数,格式化打印出不是质数
printf("%d 不是质数\n", num);
//否则打印ERROR
}else{
printf("ERROR\n");
}
}
代码运行结果: