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

相关推荐
超级大福宝1 小时前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
Wect2 小时前
LeetCode 530. 二叉搜索树的最小绝对差:两种解法详解(迭代+递归)
前端·算法·typescript
Rabbit_QL2 小时前
【BPE实战】从零实现 BPE 分词器:训练、编码与解码
python·算法·nlp
Railshiqian2 小时前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
小O的算法实验室2 小时前
2024年IEEE TII SCI1区TOP,面向动态多目标多AUV路径规划的协同进化计算算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
Charlie_lll2 小时前
力扣解题-88. 合并两个有序数组
后端·算法·leetcode
菜鸡儿齐2 小时前
leetcode-最小栈
java·算法·leetcode
雪人不是菜鸡2 小时前
简单工厂模式
开发语言·算法·c#
岛雨QA3 小时前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc3 小时前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法