【C++基础】系列博客为参考《C++ Primer中文版(第5版)》(C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.循环语句
语句一般是顺序执行的。但是我们可以通过多种不同的控制流语句,实现更为复杂的执行路径。
1.1.while语句
while语句反复执行一段代码,直至给定条件为假为止。
使用while语句,求1到10这10个数之和:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
int main()
{
int sum=0,val=1;
while (val<=10)
{
sum+=val;
++val;
}
std::cout<<"Sum of 1 to 10 inclusive is "<<sum<<std::endl;
return 0;
}
输出结果为:
👉while语句的形式为:
1
2
while (condition)
statement
只要condition为真,statement就会被执行。当执行完statement,会再次检测condition。如果condition仍为真,statement再次被执行,直至condition为假为止。
🚩语句块(block):用花括号包围起来的零条或多条语句的序列。语句块也是语句的一种,在任何要求使用语句的地方都可以使用语句块。
🚩复合赋值运算符+=
:sum+=val
相当于sum=sum+val
🚩++
和--
- 前缀递增运算符
++val
:先对val
执行+1操作,然后再返回val
的值。 - 后缀递增运算符
val++
:先返回val
的值,然后再对val
执行+1操作。 - 前缀递减运算符
--val
:先对val
执行-1操作,然后再返回val
的值。 - 后缀递减运算符
val--
:先返回val
的值,然后再对val
执行-1操作。
例如,有int i=0,j=1;
:
i=++j;
得到$i=2,j=2$i=j++;
得到$i=1,j=2$i=--j;
得到$i=0,j=0$i=j--;
得到$i=1,j=0$
1.2.for语句
使用for循环来实现从1加到10的程序:
1
2
3
4
5
6
7
8
9
#include<iostream>
int main()
{
int sum=0;
for(int val=1;val<=10;++val)
sum+=val;
std::cout<<"Sum of 1 to 10 inclusive is "<<sum<<std::endl;
return 0;
}
每个for语句都包含两部分:
- 循环头(由三部分组成)
- 一个初始化语句(init-statement):初始化语句只在for循环入口处执行一次。
- 一个循环条件(condition):循环体每次执行前都会先检查循环条件。只要满足循环条件,就会执行for循环体。
- 一个表达式(expression):表达式在for循环体之后执行。执行完表达式后,for语句重新检测循环条件。
- 循环体
1.3.实战应用:读取数量不定的输入数据
要求:对用户输入的一组数求和。
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
int sum=0,value=0;
while(std::cin>>value)
sum+=value;
std::cout<<"Sum is: "<<sum<<std::endl;
return 0;
}
当我们使用一个istream
对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符(end-of-file),或遇到一个无效输入时,istream
对象的状态会变成无效。处于无效状态的istream
对象会使条件变为假。
当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。
在Windows系统中,输入文件结束符的方法是敲
Ctrl
+Z
,然后按Enter
或Return
键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用
Ctrl
+D
。
1.4.关于编译器
编译器的一部分工作是寻找程序文本中的错误。编译器没有能力检查一个程序是否按照其作者的意图工作,但可以检查形式(form)上的错误。
一些常见的编译器可以检查出的错误:
- 语法错误(syntax error)
- 类型错误(type error)
- 声明错误(declaration error)
“编辑-编译-调试”(edit-compile-debug)周期。
2.判断语句
使用if语句来统计输入中每个值连续出现了多少次:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
int main()
{
int currVal=0,val=0;
if(std::cin>>currVal){
int cnt=1;
while(std::cin>>val){
if(val==currVal)
++cnt;
else{
std::cout<<currVal<<" occurs "<<cnt<<" times"<<std::endl;
currVal=val;
cnt=1;
}
}
std::cout<<currVal<<" occurs "<<cnt<<" times"<<std::endl;
}
return 0;
}
结果见下:
⚠️区分=
和==
:C++用=
进行赋值,用==
作为相等运算符。