C++ Primer 中文版(第 5 版)第一章——随笔(含练习)

C++ Primer










操作环境:

Windows操作系统

Microsoft Visual Stream(简称VS)




本文档致力于帮助基础差的朋友更简单的理解书文。

遇到理解不了的名词,可以查看章节末尾的术语表。


















第一章 开始

1.1 编写一个简单的C++程序

前期准备:
打开vs→创建新项目→空项目→下一步→创建→文件→新建→文件→Visual C++→C++文件(.cpp)→打开。

创作流程:编写代码→编译代码(生成程序)。

编写代码:

int main() {
	return 0;
}

C++语言定义一个函数包含四个部分:返回类型、函数名、行为参数、函数体。

“int”: 返回类型(”int”表示返回整数类型);

“main”: 函数名;

“( )”: 括号内为行为参数;

“{ return 0;}”: 函数体;

“;”: C++中语句结束必须书写分号;

1.1.1 编译、运行程序

建议跳过章节:从命令行运行编译器、运行程序。

VS中C++程序的源文件(存放源码的文件)命名后缀:.cpp、.cxx、.cc。

编译代码(生成程序):
VS中按F5(或者点击“本地Windows调试器”按钮)。

桌面弹出VS调试控制台,显示“…代码为0”。至此,一个C++程序创作完成。

练习1.1、1.2

1.1:略;
1.2:不会;不会;不会;不会;不会;不会;不会;不会;不会;不会;不会;不会;



1.2 初识输入输出

编写程序,要求输入两个数字,程序自动计算出两个数字的和:

步骤:打印“输入两个数字”(以提示用户输入)→输入两个数字并确定(按“Enter”键)→打印“这两个数的和为:”

int main() {
		std::cout << "Enter two number:" << std::endl;
		int v1 = 0, v2 = 0;
		std::cin >> v1 >> v2;
		std::cout << "The number of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;
		return 0;
	}

C++用标准库来提供IO机制。
iostream库:
istream:输入流;
ostream:输出流;
流:指数据顺序进行;
引入iostream库:

#include <iostream>

打印“输入两个数字”(以提示用户输入):

std::cout << "Enter two number:" << std::endl;

该语句执行一个表达式。表达式由运算对象和运算符两部分组成。上语句运算对象包括std::coutEnter two number:std::endl,运算符为<<
std:命名空间(标准库所用的命名空间);
cout:ostream对象,用来输出数据,被为“标准输出”;
<<:用来将右侧数据输出到左侧对象。
"Enter two number:" :字符串对象,我们用双引号(“”)包裹数据来表示这是字符串;
endl:操纵符,结束当前行。

因为cout遵循“流”,上面表达式从左至右运行,所以上面表达式等同于下面写法:

std::cout << "Enter two number:" ;
std::cout << std::endl; 

输入两个数字并确定(输入结束按“Enter”键):

int v1 = 0, v2 = 0;

创建两个变量(v1、v2)并初始化;

std::cin >> v1 >> v2;

输入两个整数(cin:标准输入。类似cout,不做赘述);

打印“这两个数的和:”:

std::cout << "The number of " << v1 << " and " << v2 << " is: "<<v1 + v2 << std::endl;

练习1.3—1.6

1.3:

int main() {
		std::cout << "Hello World!"<<std::endl;
		return 0;
	}

1.4:

int main() {
		std::cout << "Enter two number:" << std::endl;
		int v1 = 0, v2 = 0;
		std::cin >> v1 >> v2;
		std::cout << "The number of " << v1 << " prep " << v2 << " is " << v1 * v2 << std::endl;
		return 0;
	}	

1.5:

int main() {
		std::cout << "Hello World!";
		std::cout << std::endl;
		return 0;
	}

1.6:
不合法。运算符左右必须为对象,“;”不是对象。修正就去掉前两行末尾的“;”。



1.3 注释

单行注释://……

多行注释:/*……*/;多行注释不能嵌套;

调试代码注释方式:

// /*
//
//
// */


练习1.7—1.8

1.7:

/*
	/*
	int main() {
		std::cout << "Hello World!"<< std::endl;
	return 0;
	}
	*/
	*/

错误列表会标显错误。

1.8:

int main() {
		std::cout << "/*";//合法
		std::cout << "*/";//合法
//		std::cout<</*"*/"*/;//错误
		std::cout <</*"*/"/*"/*"*/;//合法
		return 0;
	}

错误语句改正:

std::cout<</*"*/"*/";


1.4 控制流

1.4.1 while语句

练习1.11超纲(跳转练习1.19)

求1到10这十个数的和:

int main() {
		int sum = 0, val = 1;
		while (val <= 10) {
		sum += val;
		++val;.
		}
		std::cout << "The sum of 1 to 10 inclusive is " << sum << std::endl;
		return 0;
	}

while语句格式:

while(条件){
循环
}

当“()”中条件满足时,持续执行“{}”中语句,直至条件不满足时,跳过while语句。

while (val <= 10) {
		sum += val;
		++val;
		}

翻译为:当val<=10时,持续执行sum+=val;,++val;

sum+=val;
等同sum=sum+val;,翻译为将sumval相加的和赋值给sum

++val;

等同val=val+1;

练习1.9—1.11

练习1.9:

int main() {
		int sum = 0, num = 50;

	while (num <= 100) {
		sum += num;
		++num;
	}
	std::cout << "The sum of 50 to 100 inclusive is " << sum << std::endl;
		return 0;
	}

练习1.10:

int main() {
		int num = 10;
	while (num >1) {
		--num;
		std::cout << num << std::endl;
	}
		return 0;
	}

练习1.11超纲(跳转练习1.19)

1.4.2 for语句

从一加到十:

int main() {
		int sum = 0;
		for (int val = 1; val <= 10; ++val) 
			sum += val;
		
		std::cout << "The number of 1 to 10 inclusive is "<<sum << std::endl;
		return 0;
	}

for语句格式:

for(初始化语句;循环条件;表达式)
循环体;

代码:

for (int val = 1; val <= 10; ++val) 
	sum += val;

int val = 1; 初始化语句(只执行一次);
val <= 10;循环条件;
++val;表达式;
sum += val;循环体;

翻译为:定义变量val,当val小于等于10时,将sumval的和赋值给sum,然后val加1,继续循环。

for循环的循环体先于表达式执行。执行顺序为:初始化语句(只执行一次)→循环条件→循环体→表达式→循环条件→循环体→表达式→…

练习1.12—1.15

1.12:
求-100到100的之间数的和。0。

int main() {
		int sum = 0;
		for (int i = -100; i <= 100; ++i)
			sum += i;
		std::cout << "Sum -100 to 100 inclusive is " << sum << std::endl;
		return 0;
	}

1.13:

int main() {
		int sum = 0;
		for (int num = 50; num <= 100; ++num)
			sum += num;
		std::cout << "The sum of 50 to 100 inclusive is " <<sum<<std::endl;
		return 0;
	}
int main() {
		for (int num = 9; num >= 1; num--)
		std::cout << num std::endl;
		return 0;
	}

超纲(跳转练习1.19)

1.14:
互为优缺。
for循环:代码简洁,循环初识变量放在循环语句头,不污染全局变量;适用于循环次数已知的情况。

While循环:适用循环次数未知的情况。

1.15:略;

1.4.3 读取数量不定的输入数据

有的时候我们不知道具体需要输入多少数据,如下:

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)cin是输入流对象,while判断流是否有效。流遇到“文件结束符(Ctrl+z)”,或者无效输入时停止。所以输入完成时要按“Ctrl+z”;

练习1.16

见本节示例代码。

1.4.4 if语句

输入几个数,按输入顺序打印出每个数出现几次:

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;
	}

If语句格式:

If(条件){
条件满足执行语句
}else	{
条件不满足执行
}

int currval = 0, val = 0;:定义两个变量“已记录值”和“新输入值”并初识化;
std::cin >> currval:输入有效数字启动;
int cnt = 1:“已记录值”出现了一次;
while (std::cin >> val) {}:输入数字就进行循环;
if (val == currval)==用来判断“已记录值”和“新输入值”的值是否相等;
++cnt;:相等则记录“已记录值”出现次数加1;
else {}:否则输出括号内内容;
std::cout << currval << " occurs " << cnt << " times" << std::endl;:输出“已记录值”出现了cnt次;
currval = val;:把“新输入值”赋值给“已记录值”;
cnt = 1;记录“已记录值”出现了一次;
std::cout << currval << " occurs " << cnt << " times" << std::endl;:输出一下最后一个输入的值。我们模拟一下循环最后输入的那个值,如果和“已记录的值”相同,则记录出现次数加一,不会进行输出操作。如果不相同则输出原“已记录值”,最后输入的那个值只是转换为“已记录值”,同样不进行输出操作,所以我们需要在while循环结束后输出一下循环最后输入的那个值。

练习1.17—1.19

1.17:相等时输出“值”出现了几次。不重复时输出每个“值”出现了一次;
1.18:略;
1.19:

int main() {
		std::cout << "Enter two number:" << std::endl;
	int num1 = 0, num2 = 0;
	std::cin >> num1 >> num2;
	if(num1>num2){
		int num3 = 0;
		num3 = num1;
		num1 = num2;
		num2 = num3;
	}
	while (num1 < num2-1) {		
		std::cout << num1 + 1 << std::endl;
		++num1;
	}
		return 0;
	}
int main() {
		std::cout << "Enter two number:" << std::endl;
		int num1 = 0, num2 = 0;
		std::cin >> num1 >> num2;
		if (num1 > num2) {
			int num3 = 0;
			num3 = num1;
			num1 = num2;
			num2 = num3;
		}
		for(int i=num1;num1 < num2 - 1;++num1)
			std::cout << num1 + 1 << std::endl;
		return 0;
	}


1.5 类简介

准备工作:下载头文件Sales_item.h。

步骤:https://www.informit.com/title/0321714113 →下拉Downloads→Download the source code files for MS Visual Studio 2012→解压→将Version_test.h和Sales_item.h两个文件复制到你项目的跟目录下(也就是在文件夹里打开你项目,复制进去)。

类:一个类定义了一个类型和它所关联的一组操作。

1.5.1 Sales_item类

新建book对象:

#include <iostream>
#include "Sales_item.h"
int main() {
		Sales_item book;
		std::cin >> book;
		std::cout << book << std::endl;
		return 0;
		}

#include "Sales_item.h":调用头文件。头文件用双引号调用。
Sales_item book;:定义一个book对象。


两个对象相加:

int main() {
	Sales_item item1, item2;
	std::cin >> item1 >> item2;
	std::cout << item1 + item2 << std::endl;
	return 0;
	}


练习1.20—1.22

1.20:

int main() {
	Sales_item item;
	while (std::cin>>item) {
		std::cout << item << std::endl;
	}
	return 0;
}

1.21:代码见“两个代码相加”

1.2.2:

int main() {
		Sales_item total;	
		Sales_item trans;
		if (std::cin >> trans) {
			while (std::cin >> total) {
			trans += total;
			}
		}	
		std::cout << trans << std::endl;
		return 0;
	}


1.5.2 初识成员函数

练习1.23—1.24(默认相同ISBN记录连续出现)

int main() {
	Sales_item item1, item2;
	std::cin >> 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() :翻译为调用item1的isbn方法。

练习1.23—1.24(默认相同ISBN记录连续出现)

1.23:

//该程序正确输出数据需要输入2次停止符,不知道为什么。
int main() {
	Sales_item total;
	if (std::cin >> total) {
		Sales_item trans;
		int cnt = 1;
		while (std::cin >> trans) {
			if (total.isbn() == trans.isbn()) {
				++cnt;
			}
			else {
				std::cout << total.isbn() << " occurs " << cnt << " times." << std::endl;
				total = trans;
				cnt = 1;	
			}
		}
		std::cout << total.isbn() << " occurs " << cnt << " times." << std::endl;		
	}
	return 0;
}

1.24:略



1.6 书店程序

//两次停止符
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;
	}

练习1.25
略;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值