`

1.2 C++程序

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

1.2 C++程序


在C++中,动作被称为表达式(expression)。 以分号结尾的表达式被称作语句(statement)。
C++中最小的程序单元是语句,在自然语言中与此类似的结构就是句子。例如下面是一
组C++语句:


int book_count = 0;
book_count = books_on_shelf + books_on_order;
cout << "The value of book_count: " << book_count;

第一条语句是一个声明(declaration)。 语句book_count 被称为标识符(identifier) 或符
号变量(symbolic variable) ,简称变量或者对象(object), 它定义了计算机内存的一块
区域,并且与名字book_count 相关联,被用来存储整数值0 ,是一个文字常量(literal constant)。
book_count 被初始化为0。


第二条语句是一个赋值(assignment) 语句。它把 books_on_shelf 和 books_on_order
的值相加,并把结果放入与book_count 相关联的计算机内存区域中。这里假定books_on_shelf 和
books_on_order 已经在前面的代码中被声明为整型并赋了初值。


第三条是输出(output) 语句,cout 是与用户终端相关联的输出目标,<<是输出操作符。该语句向cout, 即用户终端先输出用引号括起来的字符串文字,然后输出存储在与名字books_count 相关联的内存区域中的值。假设此时books_count 中的值为11273, 那么输出结果为the value of book_count: 11273。


把语句按逻辑语义分组就形成了一些有名字的单元,这些单元被称为函数(function)。例如把所有需要读取销售文件的语句组织到一个被称为readln()的函数中,类似地我们可以构成sort()、 compact()、和print()函数。在C++中每个程序必须包含一个被称作main()的函数,它是由程序员提供的并且只有这样的程序才能运行。下面是按前述算法定义的一种main()函数

int main()
{
readIn();
sort();
compact();
print();

return 0;
}

C++程序从main()函数的第一条语句开始执行。在本例中程序从函数readln()开始,并且程序按顺序执行main()函数中的语句,在执行完main()函数的最后一条语句之后,程序正常结束。

函数由四部分组成:返回类型、函数名、参数表以及函数体。前三部分合起来称为函数原型(function prototype)。参数表由小括号括起来,包含一个或多个由逗号分开的参数。函数体由一对花括号括起来由程序语句序列构成。

在本例中main()函数的函数体调用invoke 函数 、readIn() 、sort()、 compact()和 print().
当这些函数调用都完成时下面的语句
return 0

将被执行。return 是C++预定义的语句,它提供了终止函数执行的一种方法,当return 语句提供了一个值时,例如0, 这个值就成为函数的返回值(return value),本例中返回值为0,表示main()函数成功执行完毕。标准C++中如果main()函数没有显式地提供返回语句则它缺省返回0。

现在我们来看一下如果想让我们的程序能够执行起来,我们还需要做哪些准备工作。首先必须提供函数readln()、 sort()、 compact()以及print()的定义。下面的哑函数实例已经足够满足这个要求了

void readIn() { cout << "readIn()\n"; }
void sort() { cout << "sort()\n"; }
void compact() { cout << "compact()\n"; }
void print() { cout << "print()\n"; }

void 用来指定一个没有返回值的函数。正如上面的定义所示,每个函数在被main()函数调用时,只会简单地在用户终端上显示它的存在,以后我们会用真正的实现函数来代替这些哑函数。这种渐进式生成程序的方法,为控制程序设计中不可避免的错误提供了一种有效的控制手段。试图一下子就能写出一个完全成功的程序几乎是不可能的,程序源文件的名字一般包括两部分文件名,例如bookstore 以及文件后缀,文件后缀一般用来标识文件的内容,比如文件
bookstore.h

在C 或C++中习惯上被称为头(header) 文件,标准C++头文件没有后缀,这是个例外。而以下文件

bookstore.c

习惯上被当作C 程序文本文件,但在UNIX 操作系统中以下文件
bookstore.c

习惯上被当作C++程序的文本文件,C++程序文件的后缀在不同的C++实现产品中是不同的,特别在DOS 中大写的字母C 与小写的字母c 是不能区分的。其他常用来识别C++程序文本文件的后缀还包括

bookstore.cxx
bookstore.cpp

类似地头文件的后缀在C++的不同实现中也不相同,这也是标准C++没有指定头文件后缀的一个原因(请查阅你的编译器的用户指南以确定在当前平台上使用什么后缀)。使用某个文本编辑器将下面这段完整的程序输入到一个C++文本文件中

#include <iostream>
using namespace std;
void read() { cout << "read()\n"; }
void sort() { cout << "sort()\n"; }
void compact() { cout << "compact()\n"; }
void write() { cout << "write()\n"; }
int main()
{
read();
sort();
compact();
write();

return 0;
}

iostream是输入输出流库标准文件,注意它没有后缀,它包含cout 的信息,这对我们的程序是必需的,#include 是预处理器指示符(preprocessor directive),它把iostream 的内容读入我们的文本文件中,1.3 节将讨论预处理器指示符在C++标准库中定义的名字,如cout 不能在程序中直接使用除非在预处理器指示符

#include <iostream>

后面加上语句

using namespace std;

这条语句被称作using 指示符(using directive)。 C++标准库中的名字都是在一个称作std 的名字空间中声明的,这些名字在我们的程序文本文件中是不可见的,除非我们显式地使它们可见,using 指示符告诉编译器要使用在名字空间std 中声明的名字,在2.7 和2.8 节中将更进一步讨论名字空间与using 指示符。

程序已经被输入到文件如prog1.c 中之后,接下来就应将其编译。在Unix 系统中按以下步骤进行,$表示系统提示符
$ CC prog1.C

用来调用C++编译器的命令的名字在不同的实现中也不相同,在Windows 中通常通过选择菜单项来调用命令,CC 是Unix 工作站上使用的( C++编译器的命令名可以通过参考手册或系统管理员获得系统的C++命令名)。编译器的一部分工作是分析程序代码的正确性,编译器不能判断程序的语义是否正确,但能够判断出程序形式上的错误,下面是程序员很容易犯的两个错误。

例如:
int main ( { // 错误缺少
readIn(): // 错误非法字符
sort();
compact();
print();
return 0 // 错误缺少 ';'
}


2 类型错误在C++中每个数据项都有一个相对应的数据类型,例如10 是一个整型数值由双引号括起来的词,hello 是一个字符串,如果为一个需要整型参数的函数提供了一个字符串,编译器就会报告类型错误,错误消息包含一个行号以及编译器对错误的简要描述,按报告的顺序逐一修正错误是个好的习惯。一个简单的错误常常有很多关联影响,会使编译器报告的错误比实际要多得多。因此一旦错误被改正后,应当马上重新编译,这个循环过程通常被称为编辑一编译一调试(dit compile debug)

第二 部分工作是转换正确的程序代码,这种转换被称为代码生成,典型情况下它生成目标代码或汇编指令代码,这些代码能够被运行该程序的计算机所理解,成功编译的结果是一个可执行文件。前面的程序执行时其输出结果如下

readln()
sort()
compact()
print()


C++定义了一组内置的基本数据类型,整数类型int、 浮点数类型float、 字符类型char 以及只有false 和true 两个值的布尔类型boolean。 每种类型都与C++语言中某一个关键字keyword 相关联,程序中的每个对象都与一个特定的类型相关联。

例如下面的代码


int age = 10;
double price = 19.99;
char delimiter = ' ';
bool found = false;


定义了四个对象age、 price 、delimiter 和found ,分别是整数类型、双精度浮点数类型、字符类型和布尔类型,每个类型都赋予了一个文字常量初始值。在内置类型之间经常发生隐式的类型转换, 例如将一个double 双精度型的常量赋给一个int 型的age,

age = 33.333;


实际上赋给age 的是被截断后的整数值33 [标准转换standard conversion 以及一
般类型的转换将在4.14 节中详细讨论]


C++标准库还提供了一组扩展的基本数据类型,其中包括字符串(string)、复数(complexnumber)、 向量(vector) 和列表(list), 例如


// 为了使用string 对象下面的头文件是必需的
#include <string>
string current_chapter = "Getting Started";
// 为了使用vector 对象下面的头文件是必需的
#include <vector>
vector<string> chapter_titles( 20);


current_chapter 是一个字符串对象,被初始化为字符串文字Getting Started,chapter_title是一个向量包含有20 个字符串类型的元素,以下这种特殊语法

vector <string>


指示编译器创建一个能够存放字符串元素的向量类型,要定义一个能够存放20 个整数的向量对象,我们可以这样写
vector<int> ivec(20);


本书对向量还将进行更多的描述。

无论是一种语言还是它的标准库,都不可能提供实际程序设计环境要求的所有数据类型,因此现代语言都提供了类型定义工具设施,使我们能够在语言中引入新的类型,这些类型的用法与内置类型的用法一样方便。在C++中这种设施就是类机制。在C++中像string、complex vector、 list 这样的标准库类型都被设计成类。实际上输入输出库也是这样的。类设施可能是C++中最重要的组成部分,第2 章对整个类机制作了基本的概述性介绍

1.2.1 程序流程控制


缺省情况下语句将按顺序执行,例如在前面的程序中重新列在下面read()总是先被执行,然后是sort()、compact()、write()。


int main()
{
read();
sort();
compact();
write();
return 0;
}


然而,如果销售进展得很慢,例如只有0 或1 项那么就没有必要排序和压缩了,但是我们仍然需要输出这一项销售记录或者指出没有销售记录产生。通过条件语句if 我们可以完成这项工作,假设已经重写了readln()函数使其能够返回读入的项数


// read()返回读入的项数
// 返回值的类型为int
int read() { ... }
// ...
int main()
{
int count = read();
// 如果读入的项数大于1
// 就调用sort()和compact()
if ( count > 1 ) {
sort();
compact();
}
if ( count == 0 )
cout << "no sales for this month\n";
else write();
return 0;
}


第一个if 语句给出了在括号中的条件表达式为真的情况下应该执行的动作,在这个被修改过的程序中,只有在count 大于1 的时候sort() 、compact()函数才会被调用。在第一个if语句中为两个执行分支,如果条件为真,在这里即如果count 等于0 则简单地输出没有销售产量,否则只要count 不等于0, 就调用write() 。我们将在5. 3 节中详细讨论if 语句。


第二种非顺序执行的语句是迭代(iterate )或称循环(loop) 语句,当条件保持为真的时候,循环重复执行一条或多条语句,例如


int main()
{
int iterations = 0;
bool continue_loop = true;
while ( continue_loop != false )
{
iterations++;
cout << "the while loop has executed "
<< iterations << " times\n";
if ( iterations == 5 )
continue_loop = false;
}
return 0;
}


在这个看似人为构造的例子中,while 循环执行5 次,再到iterations 等于5 并且continue_loop 被赋值为false, 如下语句
iterations++;

将使iterations 加1 在1.5 节中将有更实际的while 循环的例子第15 章将详细讲解循
环语句

分享到:
评论

相关推荐

    【程序设计与算法】01_C语言程序设计_北京大学_1.2C++快速入门_CPP_Learning_0001_1.1.2.zip

    【程序设计与算法】01_C语言程序设计_北京大学_1.2C++快速入门_CPP_Learning_0001_1.1.2

    C++程序设计-谭浩强-清晰版完整书签

    1.2 最简单的C++程序 5 1.3 C++程序的构成和书写形式 12 1.4 C++程序的编写和实现 13 1.5 关于C++上机实践 15 习题 16 第2章 数据类型与表达式 19 2.1 C++的数据类型 19 2.2 常量 21 2.2.1 什么是常量 21 ...

    ads1.2下c++测试源码

    在这个C++测试源码中,我们看到了一个名为`leith_cobject`的类,它包含了一些成员函数,如构造函数、中断处理程序、定时器处理程序以及与计数器相关的函数。这段代码是在ADS1.2环境下编写的,这是一个专为嵌入式ARM...

    C++程序设计基础答案

    "C++程序设计基础答案" 本资源提供了C++程序设计基础课程的答案,涵盖了基本数据与表达式、变量、运算符、控制结构、函数等知识点。下面是对应的知识点详解: 1.1 选择题 * 问题1:一个最简单的 C++ 程序,可以...

    struct1.2登录程序

    在本文中,我们将深入探讨"struct1.2登录程序"这一话题,这是一个基于struct框架构建的简单登录系统。首先,我们需要理解struct是什么以及它在编程中的作用,特别是针对C++编程语言。 `struct`在C++中是一个用户...

    C++ primer总结报告

    1.2 C++程序 C++程序由一个或多个源文件组成,每个源文件包含函数定义和声明。程序执行始于main()函数,这是程序的入口点。 1.3 预处理器指示符 预处理器(Preprocessor)是编译过程的第一步,负责处理#include、...

    C++基础知识PPT教学课件.pptx

    1.2 C++程序的基本结构和要素 C++程序主要由以下几个部分构成: - 声明区:包含了`#include`指令(用于包含标准库或其他头文件)、宏定义(如`#define PI 3.14159`)和函数声明。 - 函数区:包括主函数`main()`和...

    C++程序设计第三版答案

    根据提供的信息,我们可以总结出这份文档是关于《C++程序设计》第三版一书的答案集。下面将对其中的关键知识点进行详细的解读。 ### 第一部分:基础概念与简单程序 #### 1.1 C++基本概念 - **P21.1-1C**: 这里提到...

    谭浩强C++程序设计第二版课件pdf

    ##### **1.2 最简单的C++程序** - **示例代码**:通常,一个简单的C++程序会从`main`函数开始执行,并通过`cout`输出“Hello, World!”来展示其基本语法。 - **程序结构**:包括预处理指令(如包含头文件)、主函数...

    c++程序设计基础习题解答(第五版)

    ### C++程序设计基础习题解答分析 #### 第1章 练习题解析 ##### 一、选择题解析 1. **一个最简单的C++程序,可以只有一个**()。 - **答案**:C main函数 - **解析**:根据C++的标准规范,每个程序都必须至少...

    C++程序设计(第三版)答案

    - **1.2-3**:熟悉C++程序的注释方式。 - **1.2-4**:理解编译器的作用及编译过程。 - **1.2-5**:了解`main()`函数的多种写法及其区别。 - **1.2-6**:掌握如何在屏幕上输出信息。 - **1.2-7**:理解C++中头文件的...

    C++程序设计 谭浩强 电子版,文字版非扫描

    - **1.2 最简单的C++程序**: 示例介绍了如何编写并运行一个简单的 C++ 程序,通过输出字符串 "This is a C++ program." 来展示基本语法。 - **1.3 C++程序的构成和书写形式**: - 程序通常由预处理指令、全局变量...

    C++语言程序设计-吕凤翥-电子工业出版社-2001.pdf

    5.2 C++程序结构特点:C++程序通常包含预处理指令、函数、类定义等,其中main函数是程序执行的入口。 5.3 C++程序的书写格式:包括缩进、注释、语句结束符等规则,以提高代码的可读性。 6. C++程序的实现 6.1 ...

    C++语言程序设计-第3版-郑莉-高清扫描版-带完整书签

    C++语言程序设计-第3版-郑莉-高清扫描版-带完整书签 第1章 绪论 1 1.1 计算机程序设计语言的发展 1 1.1.1 机器语言与汇编语言 1 1.1.2 高级语言 2 1.1.3 面向对象的语言 2 1.2 面向对象的方法 2 1.2.1 面向...

Global site tag (gtag.js) - Google Analytics