C Primer Plus 编程习题第七章第9题

编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数

#include <stdio.h>
#include <math.h>

int main(int argc, const char * argv[]) {
    int i,j;
    float num;
    printf("Please input:");
    while (scanf("%f",&num) == 1)                                       //将输入函数scanf写入whileh循环判断中,方便程序可以循环执行,因为当scanf函数读取到正确的数据时返回1,所以此语句在输入非数字时会跳出循环中断执行
    {
        if ((int)num !=num)                                             //判断s输入是否为整数,将float类型的变量num强制转换为int类型,判断其是否相等
        {
            printf("error!\n");
            printf("Please input valuable data:");
            continue;                                                   //此时输入数字不为整数,利用continue重新跳回循环语句判断,再次输入数据
        }
        for (i = num; i > 0; i--)                                       //将输入的值赋给变量ℹ️,ℹ️通过递减循环取出比num小的所有正整数
        {
            for (j = 2; j <= (int)sqrt((double)i); j++)                 // 将变量初始化为2,递增到√i,求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
            {
                if (i%j == 0 )                                          //判断是否能整除
                {
                    break;                                              //能整除则ℹ️为非素数,剩下的j则不必再递增进行判断,直接跳出循环
                }
            }
            if (i%j != 0)                                               //若i能被j整除则说明是经过break语句直接跳出,此时ℹ️为非素数,不必打印;否则说明循环完成,此时ℹ️为素数
                printf("%d ",i);
        }
        printf("\nplease input another data:");
    }
    printf("\n done\n");


    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值