您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer》读书笔记-第一章 入门

2016-11-13 20:40 183 查看
作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23233125

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:

文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
本文仅作学习交流使用,禁止任何形式的转载


这一章主要是带我们感受一下C++,属于预热的章节,相对简单。主要有以下4个主题:

函数
标准输入输出
流程控制语句

最简单的C++程序

int main()
{
return 0;
}


一个C++程序由一个或多个函数组成。上面的几行代码刚好就完成了一个函数的定义。更一般的,一个函数的定义包含四个部分

返回类型(int)
函数名(main)
形参列表(())
函数体({return 0;})
main函数的返回类型必须为int,int是一种数据类型,用来表示整数。每个C++程序必须包含一个main函数,作为操作系统调用C++程序的入口。

因此上面的几行代码就是一个C++程序了。

C++中的输入输出

C++通过标准库(Standard Library)来提供输入输出(IO)机制

具体来说就是iostream库,包括istream和ostream,分别表示输入流和输出流

它定义了4个IO对象

cin(标准输入)
cout(标准输出)
cerr(标准错误)
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

代码分析:

#include<iostream> 告诉编译器我们想要使用iostream库,尖括号中的名字指出了一个头文件(这里是iostream),每个使用标准库设施的程序都必须包含相关的头文件
函数体的第一行使用了输出运算符(<<),<<运算符接受两个运算对象,左侧是一个ostream对象,右侧是需要打印的值。执行结束后返回左侧的运算对象,即ostream。因此,std::cout << "Enter two numbers:" << std::endl;实际是分两次执行的,先执行std::cout << "Enter two numbers:", 返回左侧的ostream对象,即std::cout,然后执行std::cout << endl;
std::endl是一个操纵符,作用有两个:换行和将缓冲区中的内容刷新到屏幕。除了cerr外,cin、cout和clog都是将信息输出到缓冲区中,因此需要使用endl操纵符将缓冲区的内容输出到屏幕
与<<类似,输入运算符(>>)左侧是一个istream对象,右侧是用于接受用户输入的对象,返回值是左侧的istream对象
在使用cin和cout时都使用了std::作限制,std是一个命名空间(namespace),::是作用域运算符,std::cin表示使用std命名空间中的cin

注释

注释用于给代码添加说明文字,编译器会忽略注释,因此注释是给人看的。

单行注释:以双斜线(//)开始,以换行符结束
多行注释:以/*开始,以*/结束,内部的行习惯以*开头,从而指出它是多行注释的一部分

#include<iostream>
/*
* 简单主函数
* 读取两个数,求它们的和
*/
int main()
{
//省略
return 0;
}


控制流(流程控制语句)

while语句:反复执行一段代码,直到给定条件为假为止
for语句:也用来反复执行一段代码,但形式上略有不同
if...else...语句:用来支持条件执行

while语句

while语句的形式为

while(condition)
statement


执行过程

检查condition
执行statement
重复执行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


执行过程

init-statement
检查condition
执行循环体中的statement
执行循环头中的expression
重复执行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) //读取用户输入
4000
{
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++