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

这一章主要是带我们感受一下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;  
}  

控制流(流程控制语句)

  1. while语句:反复执行一段代码,直到给定条件为假为止
  2. for语句:也用来反复执行一段代码,但形式上略有不同
  3. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值