- 浏览: 121806 次
- 性别:
- 来自: 武汉
文章分类
最新评论
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 章将详细讲解循
环语句
发表评论
-
在ubuntu7.10用终端编译运行c++程序
2008-02-27 15:54 1014<script>function StorePag ... -
函数指针大全
2009-01-01 18:44 507<script>function StorePag ... -
问题的解决
2009-05-20 00:16 504<script>function StorePag ... -
C++的预处理器指示符
2009-05-21 22:58 892<script>function StorePag ... -
1.4 注释
2009-05-23 00:05 544<script>function StorePag ... -
1.5 输入输出初步
2009-05-23 23:18 551<script>function StorePag ... -
2.3 基于对象的设计
2009-05-27 22:17 580<script>function StorePag ... -
基于对象的设计(2)
2009-05-28 23:48 499<script>function StorePag ... -
基于对象的设计(3)
2009-05-30 00:51 521<script>function StorePag ... -
基于对象的设计(4)
2009-05-31 02:07 620<script>function StorePag ... -
基于对象的设计(5)
2009-05-31 22:50 673<script>function StorePag ... -
面向对象的设计(1)
2009-06-02 01:44 599<script>function StorePag ... -
面向对象的设计(2)
2009-06-03 00:22 659<script>function StorePag ... -
面向对象的设计(3)
2009-06-03 22:51 598<script>function StorePag ... -
面向对象的设计(4)
2009-06-05 00:05 610<script>function StorePag ... -
面向对象的设计(5)
2009-06-05 23:17 726<script>function StorePag ... -
泛型设计(1)
2009-06-07 00:28 604<script>function StorePag ... -
泛型设计(2)
2009-06-08 01:04 671<script>function StorePag ... -
泛型设计(3)
2009-06-09 01:14 598<script>function StorePag ... -
基于异常的设计(1)
2009-06-10 00:39 532异常exception 是指在运行时刻程序出现的反情形,例如数 ...
相关推荐
【程序设计与算法】01_C语言程序设计_北京大学_1.2C++快速入门_CPP_Learning_0001_1.1.2
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 ...
在这个C++测试源码中,我们看到了一个名为`leith_cobject`的类,它包含了一些成员函数,如构造函数、中断处理程序、定时器处理程序以及与计数器相关的函数。这段代码是在ADS1.2环境下编写的,这是一个专为嵌入式ARM...
"C++程序设计基础答案" 本资源提供了C++程序设计基础课程的答案,涵盖了基本数据与表达式、变量、运算符、控制结构、函数等知识点。下面是对应的知识点详解: 1.1 选择题 * 问题1:一个最简单的 C++ 程序,可以...
在本文中,我们将深入探讨"struct1.2登录程序"这一话题,这是一个基于struct框架构建的简单登录系统。首先,我们需要理解struct是什么以及它在编程中的作用,特别是针对C++编程语言。 `struct`在C++中是一个用户...
1.2 C++程序 C++程序由一个或多个源文件组成,每个源文件包含函数定义和声明。程序执行始于main()函数,这是程序的入口点。 1.3 预处理器指示符 预处理器(Preprocessor)是编译过程的第一步,负责处理#include、...
1.2 C++程序的基本结构和要素 C++程序主要由以下几个部分构成: - 声明区:包含了`#include`指令(用于包含标准库或其他头文件)、宏定义(如`#define PI 3.14159`)和函数声明。 - 函数区:包括主函数`main()`和...
根据提供的信息,我们可以总结出这份文档是关于《C++程序设计》第三版一书的答案集。下面将对其中的关键知识点进行详细的解读。 ### 第一部分:基础概念与简单程序 #### 1.1 C++基本概念 - **P21.1-1C**: 这里提到...
##### **1.2 最简单的C++程序** - **示例代码**:通常,一个简单的C++程序会从`main`函数开始执行,并通过`cout`输出“Hello, World!”来展示其基本语法。 - **程序结构**:包括预处理指令(如包含头文件)、主函数...
### C++程序设计基础习题解答分析 #### 第1章 练习题解析 ##### 一、选择题解析 1. **一个最简单的C++程序,可以只有一个**()。 - **答案**:C main函数 - **解析**:根据C++的标准规范,每个程序都必须至少...
- **1.2-3**:熟悉C++程序的注释方式。 - **1.2-4**:理解编译器的作用及编译过程。 - **1.2-5**:了解`main()`函数的多种写法及其区别。 - **1.2-6**:掌握如何在屏幕上输出信息。 - **1.2-7**:理解C++中头文件的...
- **1.2 最简单的C++程序**: 示例介绍了如何编写并运行一个简单的 C++ 程序,通过输出字符串 "This is a C++ program." 来展示基本语法。 - **1.3 C++程序的构成和书写形式**: - 程序通常由预处理指令、全局变量...
5.2 C++程序结构特点:C++程序通常包含预处理指令、函数、类定义等,其中main函数是程序执行的入口。 5.3 C++程序的书写格式:包括缩进、注释、语句结束符等规则,以提高代码的可读性。 6. C++程序的实现 6.1 ...
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 面向...