有章法的学习c++(3)控制流

语句的执行时是顺序的,从第一条语句开始逐次执行。

但是程序设计语言提供了不同的控制流语句,允许我们写出更复杂的执行语句。

1.while语句

while反复执行一条语句,直到给出的条件为假为止。

while(condition)

statement

while语句的执行是交替的检测condition条件和执行关联语句statement,直至condition为假。

所谓条件(condition),就是一个产生真或假的结果的表达式。

例子:

#include <iostream>
using namespace std;
/*
使用while语句来编写从1加到10的程序
*/
int main()
{
	int sum = 0,v = 0;
	while(v <= 10)
	{
		sum += v;
		v++;
	}
	cout << "The sum of 1 to 10 is " << sum << endl;
	return 0;
}

第一行,定义并初始化了sum,v;


第二行到第五行,使用了控制流语句while。

在条件中,使用了小于等于运算符(<=)来比较v的当前值和10的大小。只要v小于等于10,那么条件即为真,则执行while循环体。否则跳出循环。

循环体是由两条语句组成的语句块(block)。

语句块,即用花括号包围起来的零条或多条语句序列。

语句块的第一行sum += v;使用了复合赋值运算符(+=),此运算符将右侧对象的值加到左侧对象上,并将结果保存到左侧运算对象。等价于sum = sum + v;

下一条语句v++;使用后缀递增运算符。等价于v = v + 1;和++v的区别是一个是先用再自加,一个是先自加再用。


第六行,输出语句。


第七行,return语句。


运行结果图如下:


2.for语句

在while循环例子中,使用了v来控制循环的次数。我们在循环条件中检测v的值,在while语循环体中将v递增。

这种在循环条件中检测变量、在循环体中递增变量的模式非常普遍,以至于c++专门定义了第二种循环语句--for语句,来简化这种模式的语句。

我们用for语句来重写从1加到10的程序。

例子:

#include <iostream>
using namespace std;
/*
使用for语句来编写从1加到10的程序
*/
int main()
{
	int sum = 0;
	for(int v = 0 ; v <= 10 ; v++)
		sum += v;//等价于sum = sum + v;
	cout << "The sum of 1 to 10 is " << sum << endl;
	return 0;
}


我们直接看第二行和第三行

for语句包含循环头循环体,第二行为循环头,第三行为循环体。

循环头控制循环体的执行次数,由三部分组成,分别为一个初始化语句(init-statement),一个循环条件(condition),一个表达式(expression)。

在本例中,初始化语句:int v = 0;初始化语句只在进入for循环入口使用一次。

条件语句:v <= 10;每次执行循环体之前都会查看循环条件。循环条件为真则,执行循环体。否则,跳出for循环。

表达式:v++;每次执行循环体之后都会执行表达式。执行完表达式之后,查看循环条件。

简要重述for循环执行过程:

1.创建变量v并初始化;

2.查看循环条件;

3.循环条件为真,执行循环体。否则,跳出for循环。

4.执行完循环体,执行表达式。

5.执行完表达式,进入第2步。


例子程序执行结果如下:




读取不定数量的输入数据

前面的两个例子中,我们事先都知道了求和的数字和数字的个数。拓展程序,我们要实现未知数字个数和数字内容的求和。

看例子:

#include <iostream>
using namespace std;
int main()
{
	int a = 0,sum = 0;
	while(cin >> a)
		sum += a;
	cout << "sum:" << sum << endl;
	return 0;
}


第一行,定义加初始化。


第二行循环条件,循环条件的求值就是执行表达式。

此表达式是从标准输入读取一个数,保存在v中。

输入运算符的运算结果返回其左侧的运算对象。

当我们使用一个istream对象作为循环条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或者无效输入时(输入非int型

据)istream对象会变成无效。


第三行输出语句


第四行return


PS:从键盘键入结束符,不同的系统有不同的约定。在windows系统中,输入文件结束符的方法是敲ctrl+z,然后按enter键。在unix或macos中,文件结束符输入ctrl+d。

运行结果如图:


3.if语句

看例子:

#include <iostream>
using namespace std;
int main()
{
	int c = 0,v = 0;
	if(cin >> c)
		{
			int t = 1;
			while(cin >> v)
			{
				if(v == c)
				{
					t++;
				}else
				{
					cout << c << "出现了" << t << "次" << endl;
					t = 1;
					c = v;
				}
			}
			cout << c << "出现了" << t << "次" << endl;
		}
	return 0;
}


本例的作用是统计所输入的数字次数,知道遇到文件结束符或非int型数字为止。

这个例子结合了if和前面所学的while。

在第11行if的条件中使用了相等运算符(==)来检测v是否等于c。如果是,我们执行条件语句后面的语句,如果不是则执行else后面的语句。

运行结果如图:



在最后我们一起了解c++程序的缩进和格式。

c++程序在很大程度上是格式自由的,也就是我们在哪里放花括号、缩进、注释以及换行符通常不会影响程序的语义。

虽然如此,但是我们的选择会影响程序对于人可读性。比如,如果我们将main函数中的所有语句写在同一行中,程序员读程序就会很有难度。

关于c++程序格式的争辩是无休止的。我们的信条是,不存在唯一正确的格式,但是保持格式的一致性是非常重要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值