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

摘要:
如果没有肿胀怎么办-_-我觉得我晚上会来编辑国旗。上次,我在书中看到了for循环中定义的变量。1.在for循环中定义的变量,结合最近的实际经验和一些测试,将在这里进行补充,以解释for的局限性。我提到了提示2-4。建议尽可能缩短变量的定义范围。认真实现自己的想法上一篇:在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级个人赛

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


  1. 上次的文章:【看书】for循环中的定义变量

免责声明:文章转载自《【看书】关于for循环中定义变量的后续讨论》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇史上最全Linux提权后获取敏感信息方法使用EPPLUS操作EXcel下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)source insight的使用方法逆天整理

转载自:https://www.cnblogs.com/xunbu7/p/7067427.html A. why SI:   为什么要用Source Insight呢?因为她比完整的IDE要更快啊,比一般的编辑器便捷啊!她有逆天的查看定义,查看调用,查看引用功能以及方便的Context Window上下文显示,像这样的东西非常有利于查看大量代码!   那么...

Arduino语法-变量和常量

变量的声明: int led=11 一般变量的声明方法为类型名+变量名+变量初始化值。变量名的写法约定为首字母小写 变量的作用范围又称为作用域,变量的作用范围与该变量在哪儿声明有关,大致分为如下两种: (1)全局变量:若在程序开头的声明区或是在没有大括号限制的声明区,所声明的变量作用域为整个程序。即整个程序都可以使用这个变量代表的值或范围,不局限于某个括...

c#命名法 【转】

一、匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中。      Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。 匈 牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用...

java基础1-变量+包机制+javadoc命令

1.sout+tab:System.out.println的快捷键 2.强制转换:(高转低) 由低到高:byte,short,char→int→long→float→double 运算时,先转为相同类型再进行计算 //强制转换(类型)变量名 int i=128; byte b = (byte)i; System.out.println(i);/...

ueditor解决超链接、预览无效问题

最近在某项目中引用了ueditor,并没有注意到除了文本编辑与上传图片以外的功能是否完好。后面测试提了俩bug,发现超链接与预览无效的问题,业务需求确实需要这俩功能,还是得解决。 在点击超链接或预览按钮的时候,发现控制台报错:Uncaught ReferenceError: editor is not undefined at link.html,大致就是...

6Java控制结构

顺序结构 从上到下依次执行,中间没有判断和跳转 比如Java中定义变量中的前向应用,先定义,在使用 分支结构(if, else, switch) 单分支 if // if 的快速入门 import java.util.Scanner; class if01{ public static void main(String[] args) {...