C和指针_编程练习_第6章_第4题

本文介绍了C语言编程中关于指针的第六章练习题目,详细解析了第4题的解题思路和程序运行结果,帮助读者深入理解C语言中的指针操作。
摘要由CSDN通过智能技术生成
/*
        质数就是只能被1和自己整除的整数. Eratosthenes筛选法是一种计算质数的有效方法.
        这个算法的第一步就是写下所有从2至某个上限之间的所有整数. 在算法的剩余部分, 你遍历整个列表并剔除所有不是质数的整数.
        后面的步骤是这样的:
        找到表中第一个不被剔除的整数(也就是2), 然后将列表后面所有逢双的数都剔除, 因为它们都可以被2整除, 因此不是质数. 
        接着, 再回到列表的头部重新开始, 此时列表中尚未被剔除的第一个元素是3, 所有在3之后把每逢第3个数(3的倍数)剔除.
        完成这一步之后, 再回到列表开头, 3后面的下一个数是4, 但是它是2的倍数, 已经被剔除了, 所以将其跳过, 轮到5, 将所有5的倍数剔除. 这样以此类推, 反复进行, 最后列表中未被剔除的数均为质数.

        编写一个程序, 实现这个算法, 使用数组表示你的列表. 每个数组元素的值用于标记对应的数是否已经被剃除. 开始这个数组所有元素的值都设为TURE, 当算法要求"剔除"其对应的数时, 就把这个元素设置为FALSE. 
        如果你的程序运行于小于16位的机器上, 小心考虑是否要把某个变量声明为long.
        一开始先是用包含1000个元素的数组. 如果你使用字符数组, 使用相同的空间, 你将会比使用整数数组找到更多的质数.
        你可以使用下标来表示指向数组首元素和尾元素的指针, 但你应该使用指针来访问数组元素.

        注意除了2以外, 所有的偶数都不是质数. 稍微多想一下, 你可以是程序的空间效率大为提高, 方法是数组中的元素只会对应奇数. 这样, 在相同的数组空间内, 你可以寻找到的质数数量大约是原来的两倍.
*/

typedef char bool;
#define true 1
#define false 0
#define SIZE 1000    //注意: SIZE定义的值需满足如下条件: 3 + (SIZE * 2) + 1 < MAX [unsigned int]
#define PRIME_PER_LINE 8 

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   
        //IsPrime对应SIZE个从3开始的奇数. 即IsPrime[i]表示的是: 3 + (i * 2) 这个整数是否为质数
        bool *IsPrime = (bool*) malloc
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值