第1章 开始
1.1 编写一个简单的C++程序
一个函数的定义包含四部分:
- 返回类型(return type)
- 函数名(function name)
- 形参列表(parameter list),允许为空
- 函数体(function body)
在大多数系统中,main 的返回值被用来指示状态。返回值 0 表明成功,非 0 的返回值的含义由系统定义,通常用来指出错误类型。
1.2 初识输入输出
iostream库包含两个基础类型 istream 和 ostream,分别表示输入流和输出流。
标准输入输出对象:
cin 标准输入 (standard input)
cout 标准输出 (standard output)
cerr 标准错误 (standard error)
clog 用来输出程序运行时的一般性信息
一个使用 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;
}
iostream 是头文件(header)
表示式 (expression)
输出运算符 (<<),输入运算符(>>)
endl 是操纵符(manipulator)的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
使用标准库中的名字:
std::cout 和 std::endl,前缀 std:: 指出名字 cout和endl 是定义在名为 std的命名空间(namespace)中的。:: 是作用域运算符。
1.3 注释简介
单行注释,双斜线 //
界定符对注释,两个界定符 /* 和 */
1.4 控制流
1.4.1 while 语句
/*写一段程序,求 1 到 10 这10个数之和*/
#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;
}
// Sum of 1 to 10 inclusive is 55
1.4.2 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;
}
每个 for 语句都包含两部分:循环头和循环体。循环头控制循环体的执行次数,它由三部分组成:
- 一个初始化语句(init-statement)
- 一个循环条件(condition)
- 一个表达式(expression)
对比for循环和while循环,两种形式的优缺点各是什么?
在循环次数己知的情况下,for循环的形式显然更为简洁。
而循环次数无法预知时,用while循环实现更适合。
用特定条件控制循环是否执行,循环体中执行的语句可能导致循环判定条件发生变化。
1.4.3 读取数量不定的输入数据
/*实现对用户输入的一组数求和。预先不知道要对多少个数求和,这就需要不断读取数据直至没有新的输入为止。*/
#include <iostream>
int main()
{
int sum = 0, value = 0;
// 读取数据直到遇到文件尾,计算所有读入的值的和
while (std::cin >> value)
sum += value;
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
表达式 std::cin >>value 从标准输入读取下一个数,保存在value中。输入运算符返回其左侧运算对象,在本例中是std::cin。
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符(end-of-file) (Windows系统中Ctrl+Z,Unix系统中Ctrl+D),或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态会变成无效。处于无效状态的istream对象会使条件变为假。
1.4.4 if 语句
/*用if语句写一个程序,来统计在输入中每个值连续出现了多少次*/
#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;
}
/* Output Example:
42 42 42 42 42 55 55 62 100 100 100^Z
42 occurs 5 times
55 occurs 2 times
62 occurs 1 times
100 occurs 3 times
*/
不要忘了Ctrl+Z表示输入结束