| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 940 人关注过本帖
标题:陈述for语句的执行过程
只看楼主 加入收藏
MICHEALJORRY
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-3-17
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:8 
陈述for语句的执行过程
#include"stdio.h"
#include"math.h"
void main()
{
    int n,i,j;
    printf("请输入n的值:\n");
    scanf("%d",&n);
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)                  /*定义一个值j,来作为判断是否是素数的依据*/
            j=0;
        if(n%i!=0)
            j=1;
    }
    if(j==0)
        printf("%d不是素数!\n",n);
    if(j==1)
        printf("%d是素数!\n",n);
}
请大虾们看一下这个程序,希望写出计算机在执行for语句时的详细过程!!! 谢啦
搜索更多相关主题的帖子: 语句 
2010-03-25 22:11
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:1 
#include"stdio.h"
#include"math.h"
void main()
{
    int n,i,j;
    printf("请输入n的值:\n");
    scanf("%d",&n);//输入n;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)   // 使n对i取余               /*定义一个值j,来作为判断是否是素数的依据*/
            j=0;  //能整除j就为0
        if(n%i!=0)
            j=1;//不能就为1
    }
    if(j==0)
        printf("%d不是素数!\n",n);
    if(j==1)
        printf("%d是素数!\n",n);
}

坚持做对的事情,而不是容易的事情。
2010-03-25 22:41
liyang04300
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2010-3-17
收藏
得分:1 
for语句中,首先i=2,用输入的n值去余i,即n%i,也就是n除以i的余数!很显然这里的n必须大于或等于4,如果小于4,for语句就不执行!当余数为0时,说明n被整除!说明n不是素数(质数),此时j=0 。当执行第二个语句时n%i!=0 说明n为素数。当然仅仅靠这一次循环是无法断定n是否为素数!因为是个for循环语句,i会不断执行自加!sqrt(n)的意思是取n的平方根。一直到i小于或等于n的平方根时循环才停止,这时就跳出循环,再根据j的值来判定n是否为素数!当然程序本身就存在错误!
2010-03-25 22:46
keybord
Rank: 2
等 级:论坛游民
帖 子:53
专家分:25
注 册:2009-10-9
收藏
得分:1 
你的程序想实现什么功能嘛?
2010-03-26 09:55
MICHEALJORRY
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-3-17
收藏
得分:0 
没有错误吧!我执行过了,可以运行

编译新手
2010-03-26 13:02
MICHEALJORRY
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-3-17
收藏
得分:0 
3楼有好方法吗?如果是函数调用就不用了

编译新手
2010-03-26 13:04
evilperfect
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2010-3-26
收藏
得分:1 
for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)   
            j=0;
        if(n%i!=0)
            j=1
    }

这段判断素数的代码绝对性的错误! 因为 j 值之依赖于<=sqrt(n)的最小的那个数
正确的判断素数的代码为
for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)  break;   
    }
if(i>sqrt(n))
        printf("%d是素数!\n",n);
else
        printf("%d不是素数!\n",n);
    }
2010-03-26 22:43
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:1 
不用j做单独的判断,如果再循环里发现能被整除,直接break,跳出循环,提高效率。
2010-03-27 00:19
初学者jie
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2009-10-20
收藏
得分:1 
#include"stdio.h"
#include"math.h"
void main()
{
    int n,i,j;
    printf("请输入n的值:\n");
    scanf("%d",&n);//输入n;
    for(i=2;i<=sqrt(n);i++)
{  if(n%i==0) printf("%d 不是素数!",n);
else if(i>sqrt(n) printf("%d 是素数!",n);
}
}
2010-03-27 01:53
快速回复:陈述for语句的执行过程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025457 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved