C++ primer学习笔记(一):开始

C++ primer学习笔记(一):开始

本章的最终任务是编写一个完整的书店程序,旨在大概了解一下C++编程的基本步骤和操作流程,以及对C++编程有个大概的了解。

1.编写一个简单的C++程序

每个 C++ 程序都包含一个或多个函数,而且其中必须有一个命名为 main。操作系统通过调用 main来运行C++程序。

int main()
{
	return 0;
}

这个程序啥也不干,只是给操作系统返回一个值。

一个函数的定义包含四部分:返回类型、函数名、一个括号包围的形参列表(允许为空)、函数体

main的返回类型必须为 int,即整数类型。int类型是一种内置类型,即语言自身定义的类型。

return结束函数的执行,在本例中,return会向调用者返回一个值,当 return语句包含一个值时,此返回值的类型必须与函数的返回类型相容,在本例中,main的返回类型为int,而返回值0的确实一个int类型的值。

在大多数系统中,main的返回值被用来指示状态,返回0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。

2.初识输入输出

C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库来提供IO机制。

本书中的很多示例都使用了iostream库。iostream库包含了istreamostream,分别来表示输入流输出流

(1)标准输入输出对象

标准库定义了4个IO对象。

cin (istream):标准输入
cout (ostream):标准输出

cerr (ostream):标准错误(输出警告和错误消息)
clog (ostream):输出程序运行时的一般信息

(2)一个使用IO库的程序

通过使用IO库,我们可以扩展 main程序,使之能提示用户输入两个数,然后输出他们的和:

#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。

(3)向流写入数据

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

使用了**输出运算符(<<)**在标准输出上打印消息。
<<运算符接受两个运算对象:左侧对象必须为一个ostream对象,右侧的运算对象是要打印的值。
此语句等价于:

(std::cout << "Enter two numbers:") << std::endl;

也等价于:

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

第一个输出运算符给用户打印一条消息,这个消息是一个字符串字面值常量,是一对双引号包围的字符序列,之间的文本被打印到标准输出。

第二个运算符打印 endl,这是一个被称为操纵符的特殊值。将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。

(4)使用标准库中的名字

前缀 std:: 指出名字cout和endl是定义在std命名空间中的。命名空间可以帮助我们避免不经意的名字定义冲突。标准库定义的所有名字都在命名空间std中

命名空间可以在程序首加 using namespace std 来省略掉std::

(5)从流读取数据

在输出提示语后,将读入用户输入的数据。先定义两个名为 v1 和 v2 的变量来保存输入。将这些变量定义为 int 类型,int 类型是一种代表整数值的内置类型。这些变量未初始化,表示没有赋给它们初始值。这些变量在首次使用时会读入一个值,因此可以没有初始值。

输入操作符(>> 操作符)行为与输出操作符相似。它接受一个 istream 对象作为其左操作数,接受一个对象作为其右操作数,它从 istream 操作数读取数据并保存到右操作数中。像输出操作符一样,输入操作符返回其左操作数作为结果。由于输入操作符返回其左操作数,我们可以将输入请求序列合并成单个语句。换句话说,这个输入操作等价于:

std::cin >> v1;
std::cin >> v2;

输入操作的效果是从标准输入读取两个值,将第一个存放在 v1 中,第二个存放在 v2 中

3.注释简介

C++中有两种注释:单行注释和界定符对注释

单行注释:以双斜线(//)开始,以换行符结束,双斜线右侧的所有内容都会被忽略,包括额外的 //

界定符对注释:这种注释以 /* 开始,以 */ 结束,可以包含除 * 、/ 之外的任意内容。可以放置于任何允许放置制表符、空格符或换行符的地方。可跨越多行。

注释界定符对通常用于多解释,而双斜线注释常用于半行和单行附注。

注意:注释界定符不能嵌套

4.控制流

(1)while语句

while语句反复执行一段代码,直至给定条件为假为止。

编写一段程序,求1-10这十个数之和:

#include <iostream>
using namespace std;
int main()
{
	int sum = 0, val = 1; //只要val值小于10,就一直执行
	while(val <= 10)
	{
		sum += val;
		val ++;
	}
	cout << "Sum of 1 to 10 inclusive is " << sum << endl;
	return 0;
}

代码结果展示
这段代码利用了while语句,while语句的形式为:

while (condition)
	statement

while语句的执行过程是交替的检测condition条件和执行关联的语句statement,直到condition为假时停止。所谓条件就是一个产生真或假的结果的表达式。

代码解析:

在条件中使用了**小于等于运算符(<=)**来比较 val 的当前值和10。只要 val 小于等于10,条件为真,就执行 while 循环体。

循环内第一条语句使用了复合赋值运算符(+=),此运算符将其右侧的运算对象加到左侧运算对象上,将结果保存到左侧运算对象中。

++val;

使用了前缀递增运算符(++)。递增运算符将运算对象的值加 1。

递增运算符前置后置区别如下,递减同理。
在这里插入图片描述

(2)for语句

在 while 循环中,我们使用变量 val 来控制循环执行次数。每次执行 while 语句,都要测试 val 的值,然后在循环体中增加 val 的值。由于需要频频使用像 val 这样的变量控制循环,因而 C++ 语言定义了第二种控制结构,称为 for 语句,简化管理循环变量的代码。使用 for 循环重新编写求 1 到 10 的和的程序,如下:

#include <iostream>
using namespace std;
int main()
{
	int sum = 0;
	for(int val = 1 ; val <= 10 ; val++)
		sum += val;
	cout << "Sum of 1 to 10 inclusive is " << sum << endl;
	return 0 ;
}

在这里插入图片描述
每个 for 语句都包含两部分:循环头和循环体

循环头控制循环体的执行次数,它由三部分组成:一个初始化语句、一个循环条件以及一个表达式。

本例中的初始化语句为:

int val = 1

注意此处定义的变量 val 仅在 for 循环内部存在,在循环结束后是不能使用的。

循环条件为:

val <= 10

表达式为:

val++

简要概括 for 循环的总体执行流程:

1.创建 val 并初始化为 1。
2.测试 val 是否小于或等于 10。
3.如果 val 小于或等于 10,则执行 for 循环体,把 val 加到 sum 中。如果 val 大于 10,就退出循环,接着执行 for 语句体后的第一条语句。
4.val 递增。
5.重复第 2 步的测试,只要条件为真,就继续执行其余步骤。

(3)读取数量不定的输入数据

如果预先不知道我们要对多少个数求和,这需要不断读取数据直至没有新的输入为止,程序如下:

#include <iostream>
using namespace std;
int main()
{
	int sum = 0, value = 0;
	while (cin >> value)
		sum += value;
	cout << "The sum is: " << sum << endl;
	return 0;
}

在这里插入图片描述
在 while 循环中,cin只有在遇到文件结束符(end-of-file),或遇到一个无效输入时(例如输入的值不是一个整数),cin的状态会变为无效退出循环。

操作系统使用不同的值作为文件结束符。

Windows 系统下我们通过键入control+z——同时键入“ctrl”键和“z”键,来输入文件结束符。
Unix 系统中,包括 Mac OS 机器,通常用 control+d。

当我们使用 istream 对象作为条件,结果是测试流的状态。如果流是有效的(也就是说,如果读入下一个输入是可能的)那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。处于无效状态的 istream 对象将导致条件失败。在遇到文件结束符(或一些其他输入错误)之前,测试会成功并且执行 while 循环体。循环体是一条使用复合赋值操作符的语句,这个操作符将它的右操作数加到左操作数上。

一旦测试失败,while 终止并退出循环体,执行 while 之后的语句。该语句在输出 sum 后输出 endl,endl 输出换行并刷新与 cout 相关联的缓冲区。最后,执行 return,通常返回零表示程序成功运行完毕。

(4)if语句

首先用 if 语句编一个程序,来统计在输入中每个值连续的出现了多少次:

#include <iostream>
using namespace std;
int main()
{
	//currVal是我们正在统计的数;我们将读入的新值存入val
	int currVal = 0,val = 0;
	//读取第一个数,并确保确实有数据可以处理
	if (cin >> currVal)
	{
		int cnt = 1;                //保存我们正在处理的当前值的个数
		while (cin >> val)     //读取剩余的数
		{
			if (val == currVal) //如果值相同
				++cnt;              //将cnt+1
			else {                   //否则,打印前一个值的个数
				cout << currVal << " occurs " << cnt << " times" << endl;
				currVal = val;  //记住新值
				cnt = 1;           //重置计数器
			}
		} //while循环在此结束
		cout << currVal << " occurs " << cnt << " times" << endl; 
	} // 最外层的 if 语句在此结束
	return 0;
}

在这里插入图片描述
与 while 语句类似,if 也对一个条件进行求值,如果条件为真,则执行后续的语句块;如果条件为假,则执行else之后的语句。

5.书店程序

#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
   Sales_item totalBook;     //统计对象
   if(cin>>totalBook){  //第一次读取的值赋值给totalBook
	   Sales_item  currBook;//当前对象
	   while(cin>>currBook)//从第二次开始,读取的值赋给currBook
	   {
		   if(totalBook.isbn()==currBook.isbn())//上一次读取的对象与当前读取的对象书本编号相等,就叠加
		   {
			   totalBook += currBook;
		   }else{//否则就打印上次书本统计的结果,接着又把当前读取的对象赋值给统计对象
			   cout<<totalBook<<endl;
			   totalBook = currBook;
		   }
	   }
	   cout<<totalBook<<endl;//打印最后统计的值
   }else{
	   cerr<<"no data!!!"<<endl;
	   return -1;
   }
   return 0;
}

总结

本章主要介绍了基本的 C++ 知识,能够编译、运行简单的 C++ 程序。看到了如何定义 main 函数,他是操作系统执行你的程序的调用入口。也看到了如何定义变量,如何进行输入和输出,以及如何编写 if、for 和 while 语句。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值