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


    想想除了看书时之外
    有时也会幸运地有点想法
    所以再开一个类别来记录吧~
    在下希望这个分类下的博文越多越好 -.-

    ——中午记录———

    晚上有场个人赛
    感觉略紧张啊……
    万一爆零肿么办 -_-
    感觉晚上还会来编辑一次
    先立个flag

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

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

    结合最近的实际体验和一些测试
    在这里再补充说明一些地方

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

    我之前提到过

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

    加上自己的习惯 所以这些日子都是
    尽量对于循环变量随用随定义

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

    但是有时出现了一些问题
    比如印象最深的关于涉及到 循环中 break;
    例如当时有种素数判定方法:

       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 标记
    比如对于上述判定素数
    可写成:

    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 的使用范围

    已经知道
    对于自定义函数

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

    (只是为了说明函数中定义变量的问题)
    (这个函数可以直接写成)

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

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

    在其中定义的 变量c
    是无法被其他函数调用的
    (包括 main 函数)

    而 函数语句被 { } 括起来

    结合上面的讨论
    有种猜测:
    { } 花括号中定义的变量只能适用于花括号里面

    函数的 { } 是这样
    那么再讨论另一个使用花括号 { } 的地方
    while(){
    }

    这里写图片描述

    事实上发现的确会报错
    可见上述猜测对 while 是成立的

    想想
    其实还有其它有花括号
    比如
    if(){
    }
    所以再进行一下测试

    这里写图片描述

    结果证明同样符合猜测

    所以可以暂且得出结论

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

    算法是一种思维

    还有关于算法的一些思考……不过关于这一点
    想想
    “===程序设计灵魂==算法===”
    分类下还没有文章
    所以这一部分写到那里吧~
    哈哈哈哈哈

    ——晚上记录———

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

    算了 还是直接写在这里吧

    比赛链接:HPU15级个人赛

    呃……对于结果不想说话啦
    在下只是还要坚定自己的想法
    以及完善自己的想法
    另外……认真执行自己的想法

  • 相关阅读:
    关于POST的请求的问题的汇总
    EF关于报错Self referencing loop detected with type的原因以及解决办法
    系统体验设计需注意的地方
    win10文件共享的实现
    idea快速生成实体类Entity
    idea下使用码云插件进行git提交
    漏洞利用-FTP漏洞利用
    metasploit2
    day02-业务服务监控
    day01-系统基础信息模块
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569920.html
Copyright © 2020-2023  润新知