《C程序设计教程(第四版)——谭浩强》
例题4.10 求100~200中的全部素数。
代码:
//《C程序设计教程(第四版)——谭浩强》
//例题4.10 求100~200中的全部素数。
#include <stdio.h>
#include <math.h>
int main()
{	
	int i=0;
	for(i=100;i<=200;i++)
	{
		int judge_num=1;
		int j=0;
		for(j=2;j<=sqrt(i);j++)//j<=i-1
		{
			if(i%j==0)
			{
				//不是素数
				judge_num=0;
				break;
			}
			else
			{
				judge_num=1;
			}
		}
			
		if(judge_num==1)
		{
			printf("%d ",i);
		}
		
	}
	return 0;
}运行结果:

编写代码时遇到的问题:
1.break的作用
跳出本次循环
2.双重循环的错误使用,理解错误
调试:
1.代码调试过程:
【第一版代码】!!!错误!!!
#include <stdio.h>
#include <math.h>
int main()
{	
	int i=0;
	for(i=100;i<=200;i++)
	{
		int j=0;
		for(j=2;j<=sqrt(i);j++)//j<=i-1
		{
			if(i%j==0)
			{
				//不是素数
				printf("%d不是素数",i);
				break;
			}
			else
			{
				//不是素数
				printf("%d是素数",i);
			}
		}
			
		
	}
	return 0;
}
错误原因:重复循环文字,当在第二个循环中,i在从2~i½中循环,只要有一次i%j=0,那么这个数就不是素数。因此这样一直在重复不需要的重复,这里我们需要定义一个数来判断是否为素数。
【第二版代码】!!!错误!!!
#include <stdio.h>
#include <math.h>
int main()
{	
	int i=0;
	for(i=100;i<=200;i++)
	{
		int judge_num=1;
		int j=0;
		for(j=2;j<=sqrt(i);j++)//j<=i-1
		{
			if(i%j==0)
			{
				//不是素数
				judge_num=0;
				break;
			}
			else
			{
				//不是素数
				judge_num=1;
				break;
			}
		}
			
		if(judge_num==1)
		{
			printf("%d ",i);
		}
		
	}
	return 0;
}
错误原因:只取余了一次2,并没有取3、4、5、6、……的余,因为break的错误添加,去掉就正确了。







![[引人深思]博彩用户真的赢了吗?——多维度揭示赌博危害](https://img-blog.csdnimg.cn/img_convert/6c35964a5271dc66e67067e0feff2772.png)











