编写一个简单的C++程序
int main()
{
return 0;
}
int:返回类型(return type)
main:主函数名(function name)
():里面是形参列表(parameter list),这里为空
{}:里面是函数体(function body),函数体以左花括号开始,右花括号结束,里面是语句块(block of statement)
编译、运行程序
命令行运行编译器
$ cc prog1.cc
Windows系统生成可执行文件prog1.exe,UNIX生成a.out。
Windows系统执行可执行文件命令如下:
$ prog1
或者显式指出文件的位置:
$ .\prog1
UNIX系统执行可执行文件的命令如下:
$ a.out
或者指出文件位置:
$ ./a.out
在UNIX和Windows系统中,执行完一个程序后,都可以通过echo命令获得其返回值。
UNIX系统:
$ echo $?
Windows系统:
$ echo %ERRORLEVEL%
初识输入输出
由 标准库 (standard library) iostream 来提供 IO 机制,iostream 包含 istream 和 ostream 分别表示 输入流 和 输出流。
标准库定义了4个 IO 对象,分别是cin (see-in)、cout (see-out)、cerr (see-err)和clog (see-log)。
cin:标准输入(standard input)
cout:标准输出(standard output)
cerr:输出警告和错误信息
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;
}
执行结果如下图:
#include < iostream >:包含头文件(header),#include和头文件应该在同一行,一般放在源文件开始的位置
<<:输出运算符
>>:输入运算符
std:命名空间
endl:操纵符(manipulator)
:::作用域运算符
注释简介
有两种注释:单行注释(//) 和 界定符对注释(/* */)。
//:通常用于单行或半行*注释
/* */:多行注释,不能嵌套。就近原则匹配。
控制流
while 语句
语法规则
while (condition)
statement
例如:
while (val <= 10) {
sum += val;
++val;
}
<=:小于等于运算符,比较 val 和 10 的大小
+=:复合赋值运算符,上面的语句相当于 sum = sum + val;
++:前缀递增运算符,等价于 val = val + 1;
for语句
语法
for (init-statement; condition; expression)
statement
例如:
for (int val=1; val <= 10; ++val)
sum += val;
读取数量不定的输入数据
#include <iostream>
int main()
{
int sum = 0, value = 0;
while (std::cin >> value) {
sum += value;
}
std::cout << "Sum is " << sum << std::endl;
return 0;
}
这里使用了 istream 对象作为条件,其效果是检测流的状态。如果流是有效的,即未遇到错误,那么检测成功。当遇到 文件结束符(end-of-file),或者是无效的输入(如读入的不是整数),istream 对象的状态会变为无效,会使条件变假。
从键盘输入文件结束符
Windows:Ctrl+Z
UNIX:Ctrl+D
if 语句
语法
if (condition)
statement
例如:
if (val == currVal)
++cnt;
else {
std::cout << currVal << " occurs " << cnt << " times" << std::endl;
currVal = val;
cnt = 1;
}
类简介
为了使用类,我们需要了解三件事情:
- 类名是什么?
- 它是在哪里定义的?
- 它支持什么操作?
Sales_item 类
具体见这里。
简单应用:
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book;
// 读入ISBN号、售出的册数以及销售价格
std::cin >> book;
// 写入ISBN号、售出的册数、总销售额和平均价格
std::cout << book << std::endl;
return 0;
}
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1, item2;
// 读取一对操作记录
std::cin >> item1 >> item2;
// 打印它们的和
std::cout << item1 + item2 << std::endl;
return 0;
}
使用文件重定向
在 Windows 系统下,假设写了一个 addItems 的程序,如下:
#include <iostream>
using namespace std;
int main()
{
int a=0, b=0;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
执行此程序时不想一直手动输入 a 和 b 的值,此时可以借助文件重定向。新建一个txt格式的文件,命名为 in.txt ,如果输出到文件,也可以再新建一个txt文件,命名为 out.txt。in.txt 文件写入 a 、b 的值, 如1 2,然后在cmd窗口执行命令:
$ addItems <in.txt >out.txt
out.txt 文件会显示 3 。
初识成员函数
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1, item2;
std::cin >> item1 >> item2;
// 首先检查item1和item2是否表示相同的书
if (item1.isbn() == item2.isbn()) {
std::cout << item1 + item2 << std::endl;
return 0; // 表示成功
} else {
std::cerr << "Data must refer to same ISBN" << std::endl;
return -1; // 表示失败
}
}
item1.isbn():调用名为 isbn 的成员函数 (member function) ,有时也叫方法 (method) 。. 叫做点运算符,() 叫做调用运算符,里面放置实参(argument) 列表,这里为空。
书店程序
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item total;
if (std::cin >> total) {
Sales_item trans;
// 读入并处理剩余交易记录
while (std::cin >> trans) {
// 如果是相同的书
if (total.isbn() == trans.isbn() )
total += trans;
else {
// 打印前一本书的结果
std::cout << total << std::endl;
total = trans;
}
}
// 打印最后一本书的结果
std::cout << total << std::endl;
} else {
// 没有输入,警告读者
std::cerr << "No data?" << std::endl;
return -1; // 表示失败
}
return 0;
}
具体执行过程不再演示,注意相同 ISBN 号的书要放在一起输入。
小结
本章学习的知识有:
- 编译、运行简单的C++程序
- 定义变量
- 输入和输出
- if、while、for 语句
- 类的使用。