【看书】关于for循环中定义变量的后续讨论
2016-01-12 14:32
363 查看
想想除了看书时之外
有时也会幸运地有点想法
所以再开一个类别来记录吧~
在下希望这个分类下的博文越多越好 -.-
感觉略紧张啊……
万一爆零肿么办 -_-
感觉晚上还会来编辑一次
先立个flag
【看书】for循环中的定义变量
结合最近的实际体验和一些测试
在这里再补充说明一些地方
我之前提到过
提示2-4 建议尽量缩短变量的定义范围。例如,在for循环的初始化部分定义循环变量。
加上自己的习惯 所以这些日子都是
尽量对于循环变量随用随定义
PS:易语言 记次循环首(次数,n) 也是这种直接写出来的模式 (不过其实也需要先定义 不过个人养成了让它报错然后再直接定义的坏习惯)
但是有时出现了一些问题
比如印象最深的关于涉及到 循环中 break;
例如当时有种素数判定方法:
循环for便不能写成
否则跳出循环后是没有 i 这个变量的
所以如果在for前没有对于 i 定义
会报错
而如果定义了
又相当于没有对 i 赋值
所以会得到错误结果
可见
现在对于这种情况我一般是采取
对于这种需要 break 然后判断循环变量的
还是使用在for之前就定义 然后
for还写成
或者使用一个 flag 标记
比如对于上述判定素数
可写成:
这样会相对麻烦
但对于一些情况还是挺方便理解的
毕竟还是只需要对循环变量随用随定义
循环前只需要 int flag
需要注意的是
flag必须要在循环前定义
在循环里定义同样是无法在循环结束调用的
这引出了下一部分的讨论
也就是对循环体中的定义变量适用范围问题
对于自定义函数
(只是为了说明函数中定义变量的问题)
(这个函数可以直接写成)
为了避免强迫症 还是再提一下
在其中定义的 变量c
是无法被其他函数调用的
(包括 main 函数)
而 函数语句被 { } 括起来
结合上面的讨论
有种猜测:
{ } 花括号中定义的变量只能适用于花括号里面
函数的 { } 是这样
那么再讨论另一个使用花括号 { } 的地方
while(){
}
事实上发现的确会报错
可见上述猜测对 while 是成立的
想想
其实还有其它有花括号
比如
if(){
}
所以再进行一下测试
结果证明同样符合猜测
所以可以暂且得出结论
{ } 花括号中定义的变量只能适用于花括号里面
想想
“===程序设计灵魂==算法===”
分类下还没有文章
所以这一部分写到那里吧~
哈哈哈哈哈
这一篇写的有点长了哦
算了 还是直接写在这里吧
比赛链接:HPU15级个人赛
呃……对于结果不想说话啦
在下只是还要坚定自己的想法
以及完善自己的想法
另外……认真执行自己的想法
上次的文章:【看书】for循环中的定义变量 ↩
有时也会幸运地有点想法
所以再开一个类别来记录吧~
在下希望这个分类下的博文越多越好 -.-
——中午记录———
晚上有场个人赛感觉略紧张啊……
万一爆零肿么办 -_-
感觉晚上还会来编辑一次
先立个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循环中的定义变量 ↩
相关文章推荐
- PAT_B_1015. 德才论 (25) or PAT_A_1062. Talent and Virtue (25)
- UITableViewCell重影问题
- 苦逼也聊模式--(0)--开篇
- 【Linux命令】mysql数据库常用操作命令
- Maven多模块项目 eclipse暖部署 Maven项目实现 tomcat热部署
- iOS网络请求NSURLSession
- Atom 编辑器的使用
- 关于 Hibernate 级联操作
- laravel5中间件的使用例子
- 黄聪:WordPress 备案期间临时关闭站点设置404
- 开始学nodejs——net模块
- ios获取设备信息总结
- IOS生成与读取二维码名片
- repeater嵌套
- 词自动纠错
- 电子商务行业数据集成案例介绍
- 岗位 人员 职位 机构之间的关系
- STS: Port 8080 required by Pivotal tc Server Developer is already in use
- iOS 开发之 Cocoapods
- 优化WordPress中文章与评论的时间显示