输出100~200内的素数(C语言)

题目:输出100~200内所有素数,并计数。

在编写这个代码的过程中,我发现了好几个我存在的错误和问题,这篇博客来和大家分享一下如何用C语言写这个代码及我所出现的问题。希望能给大家带来帮助。

首先来引一下素数的概念:只能被1和其本身整除的数字称为素数,也称为质数。

范围:100~200

思路:因为任何数都能被1和本身整除,我们就要找这中间的所有数都不能被其整除。例如:如果定义一个数字为i,那么它不能被2~i-1内的所有数整除,如此就需要循环语句,使i分别与2~i-1内的数字相除取模。下面来上代码:

#include <stdio.h>
int main() {
	//只能被1和其本身整除
	//如果数字是i,那么它不能被2~i-1内的数整除
	int i = 0;    //100~200内的数
	int count = 0;//计数
	
	for (i = 100; i <= 200; i++) 
	{
		int a = 0;  //2~i-1内的数
		int flag = 1;//跳出循环的值
		for (a = 2; a <= i - 1; a++) 
		{
			if (i % a == 0)
			{
				flag = 0;
			    break;
			}
		}
		if (flag == 1)
		{ 
		    printf("%d ", i);
			count++;         
		}
	}
	printf("\n%d",count);
	return 0;
}

说明:用一个for循环让 i 与所有在 2 ~ i-1 内的数a相除,取模。只要有一个为0(能被整除),就跳出循环(break),使flag = 0;若不为0,说明 2 ~ i-1 内所有的数都不能被整除,则flag值不变,flag = 1,此时i为素数,输出i。

我在写代码时出现的错误:

1,把a和flag定义在了for循环的外面。如下

#include <stdio.h>
int main() {
	//只能被1和其本身整除
	//如果数字是i,那么它不能被2~i-1内的数整除
	int i = 0;
	int count = 0;
	int a = 0;
	int flag = 1;
	//错误1:把a,flag定义到for循环外面了
    for (  

此时打印出的结果是空白的

原因:将a和flag定义在for循环之内,是因为从100~200中的每一次循环都需要经过这两个变量,故它们应定义在for循环之内。

2,用了 i % a !=0 时出现的错误

我当时写的时候就在想,直接用 i % a !=0 输出素数岂不是更简单吗,然后就有了这段代码

#include <stdio.h>
int main() {
	//只能被1和其本身整除
	//如果数字是i,那么它不能被2~i-1内的数整除
	int i = 0;
	int count = 0;
	
	for (i = 100; i <= 200; i++) 
	{
		int a = 0;
		int flag = 1;
		//错误1:把a,flag定义到for循环外面了
		for (a = 2; a <= i - 1; a++) 
		{
			if (i % a != 0)
			printf("%d ",i);//错误2
		}		
	}
	printf("\n%d",count);
	return 0;
}

注意看我标注的错误2这里,我直接就printf输出了,这是错误的,printf应该在第二个for循环之外。像上面的代码意思是当 i 只是不能被 2 ~ i-1中的一个数整除,然后就直接输出了,没有循环到所有的数。

OK,结束

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值