C Primer Plus学习笔记(五)- C控制语句:循环
伪代码的概念:
伪代码是一种用简单的句子表示程序思路的方法,它与计算机语言的形式相对应。伪代码有助于设计程序的逻辑。确定程序的逻辑无误之后,再把伪代码翻译成实际的编程代码。使用伪代码的好处之一是,可以把注意力集中在程序的组织和逻辑上,不用在设计程序时还要分心如何用编程语言来表达自己的想法
while语句
while 循环的通用形式:
while (expression)
statement
statement 部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句
expression部分都使用关系表达式。如果 expression 为真(非零),执行 statement 部分一次,然后再次判断 expression。在 expression 为假(0)之前,循环的判断和执行一直重复进行。每一次循环都被称为一次迭代。
while 循环有一点很重要:在构建 while 循环时,必须让测试表达式的值有所变化,表达式最终要为假
while 循环是使用入口条件的有条件循环。满足测试表达式描述的条件才能进入循环体
用关系运算符和表达式比较大小
< 小于
<= 小于等于
== 等于
> 大于
>= 大于等于
!= 不等于
关系运算符还可用于比较字符,比较的是机器字符码(ASCII),不能用关系运算符比较字符串
比较浮点数时,尽量只使用 < 和 >,因为浮点数的四舍五入会导致在逻辑上应该相等的两个数却不相等
真值:
C语言中,所有的非零值都视为真,只有0被视为假
简单的关系表达式由关系运算符及其运算对象组成。如果关系为真,关系表达式的值为1;如果关系为假,关系表达式的值为0
_Bool类型:
在编程中,表示真或假的变量称为布尔变量,_Bool 是 C 语言中布尔变量的类型名
_Bool 类型的变量只能储存1(真)或0(假),如果把其他非零数值赋给_Bool 类型的变量,该变量会被设置为1
优先级和关系运算符:
关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高
x > y + 2 和 x > (y + 2)相同;x = y > 2 和 x = (y > 2)相同
x_bigger = x > y 和 x_bigger = (x > y)相同
关系运算符之间有两种不同的优先级:
高优先级组:<<= >>=
低优先级组:== !=
ex != wye == zee 和 (ex != wye) == zee相同,首先C判断 ex 和 wye 是否相等,然后用得出的值1或0再与 zee 比较
不确定循环和计数循环:
一些 while 循环是不确定循环。不确定循环就是指在测试表达式为假之前,预先不知道要执行多少次循环
还有一类是计数循环,这类循环在执行循环之前就知道要重复执行多少次
创建一个重复执行固定次数的循环涉及3个行为:
1.必须初始化计数器
2.计数器与有限的值作比较
3.每次循环时递增计数器
for循环
for 循环把上面3个行为组合在一起
for 循环的形式:
for (initialize; test; update)
statement
initialize 表达式在执行 for 语句之前只执行一次;然后对 test 表达式求值,如果表达式为真,执行循环一次;接着对 update 表达式求值,并再次检查 test 表达式
#include <stdio.h> int main(void)
{
const int num = 22;
int count; for (count = 1; count <= num; count++)
printf("Hello World!\n"); return 0;
}
运行结果
关键字 for 后面的圆括号中有3个表达式,分别用两个分号隔开
第1个表达式是初始化,只会在 for 循环开始时执行一次;第2个表达式是测试条件,在执行循环前对表达式求值,如果表达式为假,则结束循环;第3个表达式执行更新,在每次循环结束时求值
也可以用字符代替数字计数
可以省略一个或多个表达式,但是不能省略分号,只要在循环中包含能结束循环的语句即可
#include <stdio.h> int main(void)
{
const int num = 22;
int count; for (count = 1; count <= num; )
{
printf("Hello World!\n");
count++;
} return 0;
}
运行结果
如果忽略第2个表达式会被视为真
第1个表达式不一定是给变量赋初值,也可以是使用printf()。在执行循环的其他部分之前,只对第1个表达式求值一次或执行一次
int main(void)
{
const int num = 22;
int count = 1; for (printf("Hello C\n"); count <= num; count++)
printf("Hello World!\n"); return 0;
}
运行结果
其他赋值运算符:+=、-=、*=、/=、%=
其他赋值运算符都用于更新变量
a += 1 与 a = a + 1 相同
a -= 1 与 a = a - 1 相同
a *= 1 与 a = a * 1 相同
a /= 1 与 a = a / 1 相同
a %= 1 与 a = 1 % 1 相同
逗号运算符:
逗号运算符扩展了 for 循环的灵活性,以便在循环头中包含更多的表达式
逗号表达式保证了被它分隔的表达式从左往右求值,逗号是一个序列点
a = 12,22;
//相当于下面的代码
a = 12;
22;
a = 12 是逗号左侧的子表达式,22 是右侧的子表达式。整个逗号表达式的值是逗号右侧表达式的值,而且左侧的赋值表达式把 12 赋给变量 a
任何表达式后面加上一个分号就成了表达式语句
a = (12,22);
a 的值是逗号右侧子表达式的值,即22
逗号也可用作分隔符
char ch, date; printf("%d %d\n", a, b);
逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值
整个逗号表达式的值是逗号右侧表达式的值
出口循环:do while
while 循环和 for 循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容
C 语言还有出口条件循环,即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次,这种循环被称为 do while 循环
do while 循环的通用形式:
do
statement
while (expression);
statement 可以是一条简单语句或复合语句,在 expression 为假或0之前,重复执行 statement 部分
do while 循环在执行完循环体后才执行测试条件,所以至少执行循环体一次,do while 循环适用于那些至少要迭代一次的循环
#include <stdio.h> int main(void)
{
int count = 1; do
{
printf("Current count is %d\n", count);
count++;
}while(count <= 10);
printf("Run End\n"); return 0;
}
运行结果
嵌套循环
嵌套循环指在一个循环里包含另一个循环
#include <stdio.h>
#define ROWS 6
#define CHARS 10 int main(void)
{
int row;
char ch; for (row = 0; row < ROWS; row++) //外层循环
{
for (ch = 'A'; ch < ('A' + CHARS); ch++) //内层循环
printf("%c", ch);
printf("\n");
} return 0;
}
运行结果
C Primer Plus学习笔记(五)- C控制语句:循环的更多相关文章
- Python学习笔记五--条件和循环
5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍
python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
随机推荐
- 【bzoj1318】[Spoj744] Longest Permutation(乱搞)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1318 这道题的大意是要求一个长度为len,并包含1~len所有数,并使len最大的子区 ...
- How to use QToolBar and QToolButton in Qt
http://developer.nokia.com/Community/Wiki/How_to_use_QToolBar_and_QToolButton_in_Qt How to use QTool ...
- Thinkpad个性化设置:F1~F12恢复正常按键,Fn与Ctrl按键互换
一.F1~F12恢复正常按键 联想Thinkpad的F1~F12键功能与其他笔记本是相反的! 也就是说,如果不按着Fn,按那几个功能键,实现的是属性设置的功能,比如直接按下F1键是静音,F2键是音量降 ...
- AODH: ALARM EVENTS IN OPENSTACK
AODH是从Ceilometer分离出来的一个子项目,开始于OpenStack Liberty,用来提供alarm机制. 除了之前Ceilometer有的基于sample的警报机制,AODH还添加了基 ...
- iOS音频掌柜-- AVAudioSession
音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实 ...
- mysql数据库优化课程---5、要索引和不要索引的区别是什么
mysql数据库优化课程---5.要索引和不要索引的区别是什么 一.总结 一句话总结: 索引速度快,就是查表的时候,操作的话设置索引就好了 1.数据库设计的时候不允许字段为null的好处是什么? nu ...
- html5 video 监听播放结束. 最好获取html标签而不是id。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 如何将Emmet安装到到 Sublime text 3?第二部分该插件还能让我们自定义快捷键呼出某个浏览器以预览页面
看清楚哦~~这是Sublime text 3不是2的版本,两者的安装还是有区别的,下面的方法是我感觉比较简单的,其他的要命令什么的感觉太复杂了,经测试是OK的. 先关闭Sublime text 3: ...
- RecycleView出现折叠效果--第三方开源--SectionedExpandableGridRecyclerView
下载地址:https://github.com/ddwhan0123/SectionedExpandableGridRecyclerView/archive/master.zip 具体见源码
- LeetCode OJ:Count and Say(数数)
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...