C++ 翁凯老师的一个例子 定义函数时 是否在main里?或者是否在for循环中,会导致奇怪的问题!素数加和

楼主写C的过程中对于函数定义不太关注,如下是求m到n的素数求和例子

```
#include<stdio.h>
int isPrime = 1;       //喜欢把函数定义放在main外
int sum = 0;
int cnt = 0;
int i;
int main()
{
    int m,n = 0;
    scanf("%d %d",&m,&n);
    if(m == 1) m=2;
    for ( i=m;i<=n;i++){
        int k;
        for (k=2;k<i-1;k++){
            if( i%k == 0 ){
                isPrime = 0;
                break;
            }
        }
        if ( isPrime ){
            sum += i;
            cnt ++;
        }

        
    }
    printf("%d:%d\n",cnt,sum);
    return 0;
}
```
当输入(3 8)时,输出为(1 :3),调试过程发现走到后部if(isPrime)出现
问题;然后多次提哦啊是最后照抄原版

```
#include<stdio.h>

int main()
{

    int sum = 0;
    int cnt = 0;
    int i;
    int m,n = 0;
    
    scanf("%d %d",&m,&n);
    //if(m == 1) m=2;
    for ( i=m;i<=n;i++){
        int isPrime = 1;
        int k;
        for (k=2;k<i-1;k++){
            if( i%k == 0 ){
                isPrime = 0;
                break;
            }
        }
        if ( isPrime ){
            sum += i;
            cnt ++;
        }

        
    }
    printf("%d:%d\n",cnt,sum);
    return 0;
}
```
几次调试发现isPrime必须在第一个for循环里,我的理由是:
每次遍历必须对isPrime置一次“1”,如果在一开始定义,会导致后期isPrime值得变化

导致结果出错

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值