A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牛牛很牛 中级黑马   /  2016-6-2 10:37  /  1944 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 牛牛很牛 于 2016-6-2 10:54 编辑

#include<stdio.h>
#include<math.h>
void main()
{
    int m,i,k;
    printf("请输入一个整数:");
    scanf("%d",&m);
    k=(int)sqrt(m);
    for(i=2;i<=k;i++)   //for循环的循环范围从哪到哪  为何不加大括号?(加大括号反而运算结果有误)
        if(m%i==0)      //有何含义
            break;      //这一步判断完后break难道不是结束程序吗
    if(i>k)             //这个判断有何含义
        printf("%d 是素数。\n",m);
    else
        printf("%d 不是素数。\n",m);
}


以上是我不懂的地方,望大神不吝赐教,多谢多谢!

2 个回复

倒序浏览
我也只是说下我的看法
首先是for循环的范围。就是下面这一块

    for(i=2;i<=k;i++)   

        if(m%i==0)        //含义:m%i是取余数,素数的定义是只能被1和自己整出,也就是说除以其他数的余数都不为0,如果余数为0,那这个数自然不是素数,那么也就没有必要再去除以后面的数,而执行break跳出循环

            break;    //break是跳出当前的循环语句,不是结束程序

大括号起的作用主要就是划分区域用的,其实,你可以这样理解,一个大括号里的内容就是一条语句,普通的语句是以分号结尾的,这段代码for循环下整体就只有if这一个判断一句,break语句是属于if这个这个判断语句的。

if(i>k)    //前面的for循环代码,当i取值0至k-1都不能使m%i余数为0,接下来判断 i=k时的余数,如果不为0,那这数就是素数,但此时for循环还没有结束,在再执行一次i++后才结束,那么此时的i就比k要大,而且最多大1
回复 使用道具 举报
VamCriss 发表于 2016-6-3 23:08
我也只是说下我的看法
首先是for循环的范围。就是下面这一块

多谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马