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

相关推荐
zzzll11112 小时前
Claude Code离线安装方案揭秘
开发语言·php
wabs6663 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
mifengxing3 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法
wling03013 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
郝学胜-神的一滴3 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
Tongzhi20264 小时前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法
Wang's Blog4 小时前
AI Agent白手起家30: 动态示例选择器之根据长度选择 Few Shot 示例
算法
xrandzj4 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
DLYSB_5 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
oyguyteggytrrwwwrt6 小时前
自制交叉线路识别算法
算法