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

相关推荐
生成论实验室14 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
li16709027025 分钟前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
We་ct42 分钟前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
风筝在晴天搁浅43 分钟前
字节高频题 小于n的最大数
算法
LabVIEW开发1 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序
AI科技星1 小时前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
skywalk81631 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
风筝在晴天搁浅1 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
小书房1 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii