标题:自学C语言 烦迷糊了 求高手点拨下
只看楼主
feng198823
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-12-6
结帖率:66.67%
 问题点数:0 回复次数:6 
自学C语言 烦迷糊了 求高手点拨下
// x1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"



int main()
{
 
int n,i;

   printf("please enter a integer number,n=?");

   scanf("%d",&n);

   for (i=2;i<=n-1;i++)[color=#FF0000]
   
       if (n%i==0) break;
        
if(i<n)[/color] printf("%d is not a prime number.\n",n);
  else printf ("%d is a prime number.\n",n);

    return 0;

    }


      我有点犯迷糊    for (i=2;i<=n-1;i++)    i=n-1  i++   在for循环最大值i=n-1,后面条件判断   if(i<n)判断的是质数   i的值本来就小于N啊     我看不懂i在哪地方自增1等于N了    求高手指点下我是自学的  没人教我
搜索更多相关主题的帖子: include please number return C语言 
2014-12-10 21:56
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
得分:0 
“ 在for循环最大值i=n-1”仔细想想,这只是条件成立时i的值,先不看break,即然条件成立i就要再加一次

人有多懒,编程就有多难。
2014-12-10 22:46
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
程序代码:
#include <stdio.h>

int main(void) {
    int n, i;
    printf("INPUT N: ");
    scanf("%d", &n);

    for(i = 2; i < n / 2; i++)
        if(0 == n % i) {
            i = 0;
            break; //能被1和自身之外的数整除 非素数 结束循环 i当作判断标识置为0
        }

    //i非0时 打印为素数 否则非素数
    if(i) printf("%d is a prime number.\n", n);

    else printf("%d is not a prime number.\n", n);

    return 0;
}

/*
//// 或者用GOTO 更易理解
[color=#0000FF]#include <stdio.h>

int main(void) {
    int n, i;
    printf("INPUT N: ");
    scanf("%d", &n);

    for(i = 2; i < n / 2; i++)
        if(0 == n % i) {
            printf("%d is not a prime number.\n");
            goto END;
        }

    printf("%d is a prime number.\n", n);
END:
    return 0;
}
[/color]*/

Only the Code Tells the Truth             K.I.S.S
2014-12-10 22:52
feng198823
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-12-6
得分:0 
回复 3楼 longwu9t
我好像明白了     当i等于n-1时候条件成立    for循环了一次   n%i==0不成立时   又去判别 for(i=2;i<=n-1;i++);的时候i又自增了一次 发现i已经大于n-1了  循环就结束了    这时i的值就和n一样了
2014-12-10 23:13
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:0 
用3楼的方法很好,先设定一个i=1,不满足时i变为0,看最后i的值

一片落叶掉进了回忆的流年。
2014-12-11 00:24
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
得分:0 
以下是引用feng198823在2014-12-10 21:56:25的发言:

// x1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"



int main()
{
 
int n,i;

   printf("please enter a integer number,n=?");

   scanf("%d",&n);

   for (i=2;i<=n-1;i++)
   
       if (n%i==0) break;
        
if(i<n) printf("%d is not a prime number.\n",n);
  else printf ("%d is a prime number.\n",n);

    return 0;

    }


      我有点犯迷糊    for (i=2;i<=n-1;i++)    i=n-1  i++   在for循环最大值i=n-1,后面条件判断   if(i<n)判断的是质数   i的值本来就小于N啊     我看不懂i在哪地方自增1等于N了    求高手指点下我是自学的  没人教我

假设n = 5,你的代码会输出什么呢?自己拿纸和笔推导一下就什么都明白了……并且代码还可以更优化哟,因为所有比2大的偶数都可以直接判断为不是素数,另外当 i <= n/2 时循环就可以结束了。

[ 本帖最后由 yahwei 于 2014-12-11 11:58 编辑 ]

[qq]949654600[/qq]
2014-12-11 11:44
阿一w
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2014-12-11
得分:0 
哥们我也是自学。现在卡在指针这了。哥们加油。for(初始化;循环条件;循环每轮动作) 你这样记着,然后你用IDE的调试功能看看就知道了。
2014-12-13 09:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-439821-1-1.html




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

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