C++学习第一天

第一章、初识C++

本章介绍C++的大部分基础内容:类型、变量、表达式、语句及函数。再此过程钟,会简要介绍编译和运行程序。

1、开始

例子:书店钟保存所有销售记录的档案,每条记录保存某本书的一次销售信息(一册或者是多册)。包含三个记录数据项:
0-201-70353-X   4    24.99
第一项是书的ISBN号(国际标准号,书的唯一标识),第二项是售出的册数,最后一项是书的单价。有时,书店老板需要查询此档案,计算没本书的销售量、销售额及平均售价。
为了编写这个程序,我们需要使用若干C++的基本特性。而且,我们需要了解如何编译和运行程序。
虽然我们还没编写程序,但它显然必须:
1)定义变量
2)进行输入输出
3)使用数据结构保存数据
4)检测两条记录是否有相同的ISBN
5)包含一个循环来处理销售档案中的每条记录
我们首先介绍如何使用C++来解决这些子问题,然后编写程序

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

   每个C++程序都包含一个或多个函数(function),其中一个必须命名为main。操作系统通过调用main来运行C++程序。下面是一个非常简单的main函数,它什么也不干,只是给操作系统返回一个值:

代码如下:
int main()
{
return 0;
}

一个函数的定义包含四部分:
返回类型(return type)
函数名(function name)
一个括号包围的形参列表(parameter list,允许为空)
函数体(function body)
虽然main函数再某种成都上比较特殊,但定义鱼其他函数是一样的。

在上面的例子中,main的形参列表是空的(()中什么也没有)。main函数的返回类型必须为int,即整数类型。int类型是一种内置类型(built-in  type),即语言自身定义的类型。
函数定义的最后一部分是函数体,它是一个以左花括号(curly brace)开始,以右花括号结束的语句块(block of statements):
{
        return  0;
}
这个语句块中唯一的一条语句是return,它结束函数的执行。在例子中,return还会向调用者返回一个值,当return语句包含一个值是,此返回值的类型必须与函数的返回类型相容。在本例中,main的返回类型是int,二返回值0的确是一个int类型。
*注:return 语句末尾的分号。在C++中,大多数C++语句以分号表示结束。他们很容易被忽略,但如果忘记了写分号,就会导致编译错误。

1.2.初识输入输出

C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制(以及很多其他设施)。于此,我们只需要了解IO库中的一部分概念和操作。
学习过程主要使用iostream库。iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或者写入IO设备的。术语”流“(stream)想表达的是,随时间的推移,字符是顺序生成或消耗的。

标准输入输出对象

 标准库定义了4个IO对象。为了处理输入,使用名为cin的istream类型对象。这个对象也被称为标准输入(standard input)。对于输出,使用名为cout的ostream类型的对象。此对象被称为标准输出(standard output)。标准库还定义了其他两个ostream对象,名为cerr和clog。通常cerr用来输出警告和错误信息,音系它被称为标准错误(standard error)。而clog用来输出程序运行是的一般性信息。

一个使用IO库的程序

 在书店程序中,需要讲多条记录合并成单一的汇总记录。作为一个相关的,但更简单的问题,先看如何将两个数相加。通过IO库,可以扩展卖弄程序,使之能提示用户输入两个数,然后输出它们的和:

代码如下:
#include
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;
}

这个程序开始时在窗口上打印出:
    Enter two numbers:
然后等待用户输入。如果输入键入:
    3   7
然后键入一个回车,则程序产生如下输出:
    The sum  of  3  and  7  is  10
程序第一行
    #include<iostream>
告诉编译器我们想用iostream库。尖括号中名字指出了一个头文件(header)。每个使用标准库设施的程序都必须包含相关的头文件。

向流写入数据

 main的函数体的第一条语句执行了一个表达式(expression)。在C++中,一个表达式产生一个计算结果,它由一个或多个运算对象和一个(或多个)运算符组成。此表达式中使用了输出运算符(<<)在标准输出上打印消息:
 std::cout << "Enter two numbers:" << std::endl;
<<运算符接受两个运算对象:左侧的运算对象必须时一个ostream对象,右侧的运算对象是要打印的值。即将要打印的指定值写道给定的ostream对象中。输出运算符的计算结果就是我们写入给定值的那个ostream对象。
前面的表达式可等价于:
std::cout << "Enter two numbers:" 
std::cout << std::endl;
第一个运算符给用户打印一条消息,一个字符串常量(string literal):在双引号之间的文本,该文本被打印到标准输出。
第二个运算符打印endl,被称为操纵符的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正的写入输出流中,而不是仅停留在内存中等待写入流。
注:程序员常常在调试时添加打印语句,这类语句应该保证“一直”刷新流。否则,若程序崩溃,输出可能还留在缓冲区中,从而导致关于程序崩溃位置的错误推断。

使用标准库中的名字

 在程序中,使用了std::coout 和std::endl,而不是直接使用cout和endl。前缀std::指出名字cout和endl是定义在std的命名空间(namespace)中的。命名空间可以帮助我们不经意的名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间std中。
 使用命名空间标准库的一个副作用:当使用标准库的一个名字时,必须现显式说明要使用来自命名空间std中的名字。例如:std::cout,通过使用作用运算符(::)来指出想使用命名空间中的cout。

从流中读取数据

 在用户输入数据之后,接下来读入用户的输入。首先定义两个名为v1和v2的变量(variable)来保存输入:
 int v1 = 0, v2 = 0;
 我们将这两个变量定义为int类型,int是一种内置类型,用来表示整数。还将他们初始化(initialize)为0。初始化一个变量,就是在变量创建的同时赋予它一个值。
 下一条语句是:
 std::cin  >> v1 >> v2;
 它读入输入数据。输入运算符(>>)与输出运算符类似,它接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的istream读入数据,并存入给定的对象中。与输出运算符类似,输入运算符返回其左侧运算对象作为计算结果。
 故,此表达式等价于:
 std::cin >> v1;
 std::cin >> v2;

** 完成程序**

剩下的就是打印结果了:
std::cout << "The sum of "<< v1 << "and" << v2 
	<< " is " << v1 + v2 << std::endl;
这条语句虽然比提示用户输入的打印语句更长,但是原理一样的,它将每个运算对象打印在标准输出上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值