C语言典型例题58

《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的错误添加,去掉就正确了。

相关推荐
安全感0.0几秒前
C/C++内存管理
c语言·c++
h177113472052 分钟前
定制相亲交友系统如何提升用户体验
大数据·开发语言·人工智能·小程序·系统开发
黄卷青灯774 分钟前
c++ 编辑器 和 编译器 的详细解释
开发语言·c++·编辑器·编辑器 和 编译器
罗伯特_十三10 分钟前
Java 单例模式
java·开发语言·单例模式
z2014z16 分钟前
Lua热更
开发语言·lua
wangchen_031 分钟前
C++类和对象(4)
开发语言·c++
妄想...31 分钟前
最大余额法,解决百分比计算相加不等于100%(扇形/饼图百分比使用的此算法)
前端·javascript·算法
杨半仙儿还未成仙儿34 分钟前
Java异常处理详细讲解及常见面试问题
java·开发语言·面试
JovaZou35 分钟前
[Python学习日记-21] Python 中的字符编码(上)
开发语言·python·学习
鱼跃鹰飞39 分钟前
Leetcode面试经典150题-148.排序链表
算法·leetcode·链表·面试