题目:输出100~200内所有素数,并计数。
在编写这个代码的过程中,我发现了好几个我存在的错误和问题,这篇博客来和大家分享一下如何用C语言写这个代码及我所出现的问题。希望能给大家带来帮助。
首先来引一下素数的概念:只能被1和其本身整除的数字称为素数,也称为质数。
范围:100~200
思路:因为任何数都能被1和本身整除,我们就要找这中间的所有数都不能被其整除。例如:如果定义一个数字为i,那么它不能被2~i-1内的所有数整除,如此就需要循环语句,使i分别与2~i-1内的数字相除取模。下面来上代码:
#include <stdio.h>
int main() {
//只能被1和其本身整除
//如果数字是i,那么它不能被2~i-1内的数整除
int i = 0; //100~200内的数
int count = 0;//计数
for (i = 100; i <= 200; i++)
{
int a = 0; //2~i-1内的数
int flag = 1;//跳出循环的值
for (a = 2; a <= i - 1; a++)
{
if (i % a == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n%d",count);
return 0;
}
说明:用一个for循环让 i 与所有在 2 ~ i-1 内的数a相除,取模。只要有一个为0(能被整除),就跳出循环(break),使flag = 0;若不为0,说明 2 ~ i-1 内所有的数都不能被整除,则flag值不变,flag = 1,此时i为素数,输出i。
我在写代码时出现的错误:
1,把a和flag定义在了for循环的外面。如下
#include <stdio.h>
int main() {
//只能被1和其本身整除
//如果数字是i,那么它不能被2~i-1内的数整除
int i = 0;
int count = 0;
int a = 0;
int flag = 1;
//错误1:把a,flag定义到for循环外面了
for (
此时打印出的结果是空白的
原因:将a和flag定义在for循环之内,是因为从100~200中的每一次循环都需要经过这两个变量,故它们应定义在for循环之内。
2,用了 i % a !=0 时出现的错误
我当时写的时候就在想,直接用 i % a !=0 输出素数岂不是更简单吗,然后就有了这段代码
#include <stdio.h>
int main() {
//只能被1和其本身整除
//如果数字是i,那么它不能被2~i-1内的数整除
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int a = 0;
int flag = 1;
//错误1:把a,flag定义到for循环外面了
for (a = 2; a <= i - 1; a++)
{
if (i % a != 0)
printf("%d ",i);//错误2
}
}
printf("\n%d",count);
return 0;
}
注意看我标注的错误2这里,我直接就printf输出了,这是错误的,printf应该在第二个for循环之外。像上面的代码意思是当 i 只是不能被 2 ~ i-1中的一个数整除,然后就直接输出了,没有循环到所有的数。
OK,结束