解决书店的简单问题。
我们的书店保存所有销售记录的档案,每条记录保存了某本书的一次销售的信息(一册或多册)。每条记录包含三个数据项:
ISBN | 数量 | 价格 |
---|---|---|
0-201-70353-X | 4 | 24.99 |
为了编写这个程序, 我们需要使用若干 C 的基本特性。而且,我们需要了解如何编译及运行程序。
显然它必须:
- 定义变量
- 进行输入和输出
- 使用数据结构保存数据
- 检测两条记录是否有相同的ISBN
- 包含一个循环来处理销售档案中的每条记录
1.1 编写一个简单C++程序
- 一个函数的定义包含四部分:返回类型 (return type)、函数名 (function name)、 一个括号包围的形参列表(parameter list,允许为空)以及函数体( function body)。
1.1.1 编译、运行程序
g++ -Wall -o 1-1 1-1.cpp
1.2 初识输入输出
标准输入输出对象:
- 标准输入 cin
- 标准输出 cout
- 标准错误 cerr
- 运行信息输出 clog
#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;
}
- 前缀 std::指出名字 cout 和 endl 是定义在名为 std 的命名空间(namespace)中的。
1.3 注释简介
- 注释通常用于概述算法,确定变量用途,解释晦涩难懂的代码片段。注释对程序的行为或性能没有影响。
- 错误的注释比完全没有注释更严重。
// /*
// * 注释被
// * 单行注释
// * 注释掉了
// */
#include <iostream>
int main(){
std::cout << "/*";
std::cout << "*/";
//std::cout << /* "*/" */;
std::cout << /* "*/" /* "/*" */;
return 0;
}
1.4 控制流
1.4.1 while 语句
- 语句块就是用花括号包围的零条或多条语句的序列
1.4.2 for 语句
for 循环的总体执行流程:
- 创建变量 val,将其初始化为1。
- 检测 val 是否小于等于10。若检测成功,执行 for 循环体。若失败,退出循环,继续执行 for循环体之后的第一条语句。
- 将 val 的值增加1。
- 重复第2步中的条件检测,只要条件为真就继续执行剩余步骤。
1.4.3 读取数量不定的输入数据
#include <iostream>
int main(){
int sum = 0, value = 0;
// 读取数据直到遇到文件尾, 计算所有读入的值的和
while(std::cin >> value)
sum += value;
// 等价于sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
1.4.4 if 语句
#include <iostream>
int main(){
int sum = 1, v1 = 0, v2=0;
std::cin >> v1;
while(std::cin>>v2){
if(v2==v1)
sum ++;
else{
std::cout << v1 <<" occurs " << sum << " times"<<std::endl;
sum = 1;
v1 = v2;
}
}
// 等价于sum = sum + value
std::cout << v1 <<" occurs " << sum << " times"<<std::endl;
return 0;
}
1.5 类简介
为了使用类, 我们需要了解三件事情:
- 类名是什么?
- 它是在哪里定义的?
- 它支持什么操作?
1.5.1 Sales_item类
- 每个类实际上都定义了一个新的类型,其类型名就是类名。
1.5.2 初识成员函数
- 成员函数是定义为类的一部分函数,有时也被称为方法(Method)
1.6 书店程序
#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;
}
第一部分 C++ 基础
任何常用的编程语言都具备一组公共的语法特征,不同语言仅在特征的细节上有所区别。要想学习并掌握一种编程语言,理解其语法特征的实现细节是第一步。最基本的特征包括:
- 整型、字符型等内置类型
- 变量,用来为对象命名
- 表达式和语句,用于操纵上述数据类型的具体值
- if 或 while 等控制结构,这些结构允许我们有选择地执行一些语句或者重复地执行一些语句
- 函数,用于定义可供随时调用的计算单元
大多数编程语言通过两种方式来进一步补充其基本特征:
- 赋予程序员自定义数据类型的权利,从而实现对语言的扩展
- 将一些有用的功能封装成库函数提供给程序员