您的位置:首页 > 其它

【看书】关于for循环中定义变量的后续讨论

2016-01-12 14:32 363 查看
想想除了看书时之外

有时也会幸运地有点想法

所以再开一个类别来记录吧~

在下希望这个分类下的博文越多越好 -.-

——中午记录———

晚上有场个人赛

感觉略紧张啊……

万一爆零肿么办 -_-

感觉晚上还会来编辑一次

先立个flag

【关于for循环中定义变量的后续讨论】

上次在书中看到了关于for循环中定义的变量问题1

【看书】for循环中的定义变量

结合最近的实际体验和一些测试

在这里再补充说明一些地方

for(int i=0 ; i<n ; i++)
的局限性

我之前提到过

提示2-4 建议尽量缩短变量的定义范围。例如,在for循环的初始化部分定义循环变量。

加上自己的习惯 所以这些日子都是

尽量对于循环变量随用随定义

PS:易语言 记次循环首(次数,n) 也是这种直接写出来的模式 (不过其实也需要先定义 不过个人养成了让它报错然后再直接定义的坏习惯)

但是有时出现了一些问题

比如印象最深的关于涉及到 循环中 break;

例如当时有种素数判定方法:

[code]   for(i=2;i<=sqrt(m);i++)
      if(m%i==0)
         break;
   if(i>k)
       printf("%d 是素数。\n",m);
   else
       printf("%d 不是素数。\n",m);


循环for便不能写成

for(int i=2;i<=sqrt(m);i++)


否则跳出循环后是没有 i 这个变量的

所以如果在for前没有对于 i 定义

if(i>k)


会报错

而如果定义了

又相当于没有对 i 赋值

所以会得到错误结果

可见
for(int i=0 ; i<n ; i++)
也是不可以滥用的

现在对于这种情况我一般是采取

对于这种需要 break 然后判断循环变量的

还是使用在for之前就定义 然后

for还写成
for(i=0 ; i<n ; i++)


或者使用一个 flag 标记

比如对于上述判定素数

可写成:

[code]int flag;
for(int i=flag=2; i<=sqrt(m); i++) {
        if(m%i==0) {
            flag=0;
            break;
        }
    }
    if(flag)
        printf("%d 是素数。\n",m);
    else
        printf("%d 不是素数。\n",m);


这样会相对麻烦

但对于一些情况还是挺方便理解的

毕竟还是只需要对循环变量随用随定义

循环前只需要 int flag

需要注意的是

flag必须要在循环前定义

在循环里定义同样是无法在循环结束调用的

这引出了下一部分的讨论

也就是对循环体中的定义变量适用范围问题

while等{}花括号中int i 的使用范围

已经知道

对于自定义函数

[code]int sum(int a,int b) {
    int c=a+b;
    return c;
}


(只是为了说明函数中定义变量的问题)

(这个函数可以直接写成)

[code]int sum(int a,int b) {
    return a+b;
}


为了避免强迫症 还是再提一下

在其中定义的 变量c

是无法被其他函数调用的

(包括 main 函数)

而 函数语句被 { } 括起来

结合上面的讨论

有种猜测:

{ } 花括号中定义的变量只能适用于花括号里面

函数的 { } 是这样

那么再讨论另一个使用花括号 { } 的地方

while(){

}



事实上发现的确会报错

可见上述猜测对 while 是成立的

想想

其实还有其它有花括号

比如

if(){

}

所以再进行一下测试



结果证明同样符合猜测

所以可以暂且得出结论

{ } 花括号中定义的变量只能适用于花括号里面

算法是一种思维

还有关于算法的一些思考……不过关于这一点

想想

“===程序设计灵魂==算法===”

分类下还没有文章

所以这一部分写到那里吧~

哈哈哈哈哈

——晚上记录———

所以顺带这一部分如果有的话也新开一篇文章吧-.-

这一篇写的有点长了哦

算了 还是直接写在这里吧

比赛链接:HPU15级个人赛

呃……对于结果不想说话啦

在下只是还要坚定自己的想法

以及完善自己的想法

另外……认真执行自己的想法
上次的文章:【看书】for循环中的定义变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: