C++重学之路 2 C++编程入门、输入输出和运算符

1 基础概念

注释

程序运行时,注释会被编译器忽略,不会生成任何机器语言目标代码。

  • 单行注释(single-line comment):以双斜线// 开头,只对此行有效。
  • 多行注释:可包括若干行,注释的内容用一对符号/**/ 括起来。

Tips:每个程序的开始都应该有一个注释用以描述这个程序的目的。

#include预处理指令

#include<iostream>

以“#”开头的行在程序被编译之前由预处理器来处理。这一行通知预处理器将输入/输出流头文件<iostream> 的内容包含到程序中。任何程序,只要使用C++的流输入/输出来将数据输出到屏幕或者从键盘键入数据,都必须包含这个头文件。这个头文件包含了编译器在编译程序时要用到的信息。

空行和空白间隔符

为易于阅读,程序员常使用空行、空格符和制表符(Tab),这些符号统称为空白间隔符。编译器通常会忽略空白间隔符。

main()函数

int main()

每个C++程序有且仅有一个main函数。C++程序从main函数开始执行,即使main不是定义在程序里的第一个函数。main左边的==关键字(keyword)==表明main返回一个整数值。

一条输出语句

std::cout<<"Welcome to C++!\n";

这条输出语句命令计算机执行一个操作,即输出包含在两个双引号之间的一串字符。把两个双引号和它们之间的字符一起称为串(string)、字符串(character string)或者串文字(string literal)。编译器不会忽略串中的空白间隔符

大多数C++语句以一个分号(也成为语句终止符)结尾(预处理指令不是)。一般C++的输入和输出用字符流实现。当执行以上语句时,字符流"Welcome to C++!\n"被发送到标准输出流对象std::cout,它通常“连接”到屏幕。

Tips:

遗漏C++语句末尾的分号是一个语法错误(syntax error),因为编译器是在编译阶段中发现语法错误的,所以语法错误也称为编译器错误(compiler errors)、编译时错误(compile-time errors)或编译错误(compilation errors)。只有改正后才能运行这个程序。

std命名空间

但是用预处理指令#include<iostream> 包含到程序中的名字时,cout前的std::是必需的。

std::cout 指出使用了“名字空间”std中的一个名字,即cout。cin也属于名字空间std。

流插入运算符和转义序列

在输出语句中,双尖括号<< 运算符称为流插入运算符(stream insertion operator)。当程序运行时,运算符右边的值(右操作数)被插入到输入流中。这个运算符指向数据流动的方向。

反斜线符号(\)称为转义字符(escape character),它表明一个特殊字符会被输出。常用的一些转义字符如下:

转义序列
\n换行符
\t水平制表符
\r回车符
\a响铃符,系统发出响铃声
\反斜线符号
单引号
‘’双引号

return语句

return 0;

这是我们用来退出函数的几种方法之一。如上,在main的末尾使用return语句时,0表示这个程序成功地终止了。根据C++标准,如果程序执行到main末尾但没遇到return语句,就会认为程序成功地终止了(所以常省略)。

关于注释的说明

当编写新的程序或者修改已有程序使得代码发生改变时,要及时更新注释。

变量声明

int sum = 0;

这是声明语句(declaration)。标识符sum是变量名。这个声明指定变量sum是int类型的数据,这意味着这些变量可以存储整数值。同时该声明还将这个变量初始化位0。

变量代表计算机内存中的一个特定区域,可以存储程序使用的一个值。

Tips:

尽管显式地初始化每个变量不总是必要的,但这样做可以帮助避免很多问题。

同类型的若干个变量可以在一个变量中声明,例如:

int num1 = 0,num2 = 1,num3 = 2;
int num1,num2,num3;

标识符(identifier)

变量名是除了关键字之外的合法标识符。标识符是不以数字开头的由字母、数字、下划线(_)组成的一个字符序列。C++是区分大小写的,即ai和AI是不同的标识符。

Tips:

  • C++允许任意长度的标识符,但大家都C++实现可能对标识符的长度强加了一些限制。为确保可移植性,应使用31或少于31个字符的标识符。
  • 应当避免在标识符中使用缩写,以提高程序的可读性。
  • 应当避免使用以下划线或双下划线开头的标识符,因为C++编译器可能使用类似的名字为其内部的某些用途提供服务。

变量声明语句的放置位置

可在程序的任意位置出现,但必须在相应的变量被程序使用前。

输入语句

std::cin>>number1;

使用(在名字空间std中的)标准输入流对象cin和流提取运算符>> 来获取从键盘输入的值。流提取运算符同std::cin 的配合使用,目的是获取从标准输入流(通常是键盘)输入的字符。

显示结果

std::cout<<"Sum is "<<sum<<std::endl;

std::endl 是一个所谓的流操纵符(stream manipulator)。endl是“end line”的缩写,属于名字空间std。流操纵符std::endl 输出一个换行符,然后“刷新输出缓存”。

在单条语句中使用多个流插入运算符称为连接(concatenating)、链接(chaining)或串联(cascading)的流插入运算。

2 内存的概念

变量名对应着计算机内存中的特定区域。将一个值存放到一块内存区域时,它都会覆盖这个区域中原有的值,因此,存放一个新值到一块内存区域的操作是具有破坏性的。

std::cin>>number1;
std::cin>>number2;
sum = number1 + number2;

执行以上代码时,假设先后输入45,72,那么内存状况如图。

在这里插入图片描述

但这两块区域在内存中不一定必须是相邻的。

第3行语句执行后会将原先存放在sum的值替换掉,但number1和number2的值在求sum前后是不变的。因此,当从一个内存区域中读取一个值时,这个操作是非破坏性的。

3 算术运算

算术运算符的优先级

运算符运算求值顺序
()圆括号1 最先求值。若为嵌套,则先求最内层圆括号内的表达式。若有多对圆括号不是嵌套的如(a+b)*(c-d) ,C++标准并没指定这些被括起来的子表达式的计算顺序
*乘法2 其次求值。若多个同时出现,从左到右顺序求值。
/除法2
%求模2
+加法3 最后求值。若多个同时出现,从左到右顺序求值。
-减法3

4 相等运算符和关系运算符

相等运算符和关系运算符的优先级

所有的关系运算符具有相同的优先级,并且按照从左到右的顺序结合。

两个相等运算符具有相同的优先级,但优先级比关系运算符低,也按从左到右顺序结合。

关系运算符>大于
<小于
>=大于等于
<=小于等于
相等运算符==等于
!=不等于

TIPS:

  • 颠倒运算符!=>=<= 的符号对中两个符号的顺序,通常会产生语法错误。但某些情况下把!= 写成=! 不会产生语法错误,但几乎可以肯定是一个逻辑错误(logic error),在运行时会产生影响。
  • 混淆相等运算符== 和赋值运算符= 会产生逻辑错误。

using声明

using namespace std;

这个命令可以使程序包含任何标准的C++头文件(如<iostream>)中的所有名字。

5 运算符的优先级

运算符结合律
()从左到右
* / %从左到右
+ -从左到右
<< >>从左到右
< <= > >=从左到右
== !=从左到右
=从右到左
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lum0s!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值