这一章主要是带我们感受一下C++,属于预热的章节,相对简单。主要有以下4个主题:
* 函数
* 标准输入输出
* 流程控制语句
* 类
最简单的C++程序
int main()
{
return 0;
}
一个C++程序由一个或多个函数组成。上面的几行代码刚好就完成了一个函数的定义。更一般的,一个函数的定义包含四个部分
1. 返回类型(int
)
2. 函数名(main
)
3. 形参列表(()
)
4. 函数体({return 0;}
)
main函数的返回类型必须为int,int是一种数据类型,用来表示整数。每个C++
程序必须包含一个main函数,作为操作系统调用C++
程序的入口。
因此上面的几行代码就是一个C++程序了。
C++中的输入输出
C++通过标准库(Standard Library)来提供输入输出(IO)机制
具体来说就是iostream库,包括istream和ostream,分别表示输入流和输出流
它定义了4个IO对象
1. cin(标准输入)
2. cout(标准输出)
3. cerr(标准错误)
4. clog(标准日志)
我们常用的是cin和cout。
cin、cout使用实例
使用IO库与用户交互,实现两个数相加
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2 << " is:" << v1 + v2 << std::endl;
return 0;
}
运行后,控制台显示:
Enter two number:
用户输入:
3 7
回车后显示:
The sum of 3 and 7 is:10
代码分析:
1. #include<iostream>
告诉编译器我们想要使用iostream库,尖括号中的名字指出了一个头文件(这里是iostream),每个使用标准库设施的程序都必须包含相关的头文件
2. 函数体的第一行使用了输出运算符(<<
),<<
运算符接受两个运算对象,左侧是一个ostream对象,右侧是需要打印的值。执行结束后返回左侧的运算对象,即ostream。因此,std::cout << "Enter two numbers:" << std::endl;
实际是分两次执行的,先执行std::cout << "Enter two numbers:"
, 返回左侧的ostream对象,即std::cout
,然后执行std::cout << endl;
3. std::endl
是一个操纵符,作用有两个:换行和将缓冲区中的内容刷新到屏幕。除了cerr外,cin、cout和clog都是将信息输出到缓冲区中,因此需要使用endl操纵符将缓冲区的内容输出到屏幕
4. 与<<
类似,输入运算符(>>
)左侧是一个istream对象,右侧是用于接受用户输入的对象,返回值是左侧的istream对象
5. 在使用cin和cout时都使用了std::
作限制,std是一个命名空间(namespace),::
是作用域运算符,std::cin
表示使用std命名空间中的cin
注释
注释用于给代码添加说明文字,编译器会忽略注释,因此注释是给人看的。
1. 单行注释:以双斜线(//
)开始,以换行符结束
2. 多行注释:以/*
开始,以*/
结束,内部的行习惯以*
开头,从而指出它是多行注释的一部分
#include<iostream>
/*
* 简单主函数
* 读取两个数,求它们的和
*/
int main()
{
//省略
return 0;
}
控制流(流程控制语句)
while
语句:反复执行一段代码,直到给定条件为假为止for
语句:也用来反复执行一段代码,但形式上略有不同if...else...
语句:用来支持条件执行
while语句
while语句的形式为
while(condition)
statement
执行过程
1. 检查condition
2. 执行statement
3. 重复执行1和2,直到condition为假
实例:计算1到10之间所有数字的和
#include<iostream>
int main()
{
int sum = 0, val = 1;
//只要val的值小于或等于10,while循环就会持续执行
while(val <= 10)
{
sum += val;
++val;
}
std::cout << "sum of 1 to 10 inclusive is " << sum << std::endl;
return 0;
}
while语句在循环条件中检查变量的值,在循环体中修改变量的值
而
for语句则把检测变量和修改变量的过程都放在了循环头中
for语句
for语句的形式为
for(init-statement;condition;expression)
statement
执行过程
1. init-statement
2. 检查condition
3. 执行循环体中的statement
4. 执行循环头中的expression
5. 重复执行2-4,直到condition为假
上面的例子也可以用for语句完成
#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;
}
if语句
if语句用来支持条件执行,形式为
if(condition)
statement
执行过程
当condition为真时执行statement,否则不执行
在上面的for循环中添加一个if语句
#include<iostream>
int main()
{
int sum = 0;
for(int val = 1; val <= 10; ++val)
{
//添加if语句
if( val <= 5)
{
sum += val;
}
}
std::cout << "sum of 1 to 10 inclusive is " << sum << std::endl;
return 0;
}
虽然for循环仍会遍历1到10之间的所有数字,但只会对小于等于5的那部分执行求和。
应用实例
实例1,读取数量不定的输入
不断读取用户输入直到没有新的输入为止,输出所有数据的和
#include<iostream>
int main()
{
int sum = 0, value = 0;
while(std::cin >> value)
{
sum += value;
}
std::cout << "sum is " << sum << std::endl;
return 0;
}
while循环使用std::cin >> value
作为条件,我们知道std::cin >> value
的返回值为std::cin
,使用一个istream对象作为条件时,其效果是检测流的状态,当遇到文件结束符或无效输入时,istream对象的状态变为无效,条件为假;否则为真。
实例2,统计值连续出现的次数
读取数量不定的输入,统计输入中每个值连续出现的次数
#include<iostream>
int main()
{
//currval是我们正在统计的数;我们将读入的新值存入val
int currval = 0, val = 0;
//读取第一个数,并确保确实有数据可以处理
if(std::cin >> currval)
{
int cnt = 1;//记录当前数值出现的次数
while(std::cin >> val) //读取用户输入
{
if( val == currval) //如果值相同,则计数加1
{
++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++ Primer 中文版 (第5版)》,请大家到原书中了解更多内容。
微信公众号:马志峰的编程笔记
知乎专栏:https://zhuanlan.zhihu.com/mazhifeng