常用数据类型与Pascal 数据类型的比较:
Pascal ShorInt Byte SmallInt Word Integer,LongInt 数据类型 8位有符号整数 8位无符号整数 16位有符号整数 16位无符号整数 32位有符号整数 char BYTE,unsigned short short unsigned short int,long unsigned long _int64 float double long double VARIANT,^Variant,^OleVariant char WCHAR string ^AnsiString ^WideString C/C++ Cardinal,LongWord/DWORD 32位无符号整数 Int64 Single *Real48 Double *Extended Currency TDate/TDateTime Variant,OleVariant Char,AnsiChar WideChar *ShortString AnsiString/String WideString PChar,PAnsiChar PWideChar Boolean,ByteBool WordBool BOOL,LongBool 64位有符号整数 4字节浮点数 6字节浮点数 8字节浮点数 10字节浮点数 64位货币类型 8字节日期/时间 16字节可变类型 1字节字符 2字节字符 短字符串 长字符串 宽字符串 NULL结束的字符串 char* NULL结束的宽字符串 LPCWSTR 1字节布尔类型 2字节布尔类型 4字节布尔类型 任何1字节 任何2字节 BOOL 注:有*前缀的是向前兼容类型;有^前缀的是C++Builder特有类型。
2.4 结构化编程
20世纪60年代,许多大型软件的开发遇到了严重困难。常常推迟软件计划,因而使成本大大超过预算,而且最终产品也不可靠。人们开始认识到,软件开发是项复杂的活动,比原来所预想的要复杂得多。20世纪60年代的研究结果是结构化编程(structured programming)的出现,用规定的方法编写程序比非结构化编程能产生更清晰、更容易测试/调试以及更容易修改的程序。本教程的第2章将介绍结构化编程原理。第3章到第5章则会开发多种结构化程序。
结构化编程研究的一个更具体结果是1971年Niklaus Wirth教授推出了Pascal语言。Pascal
-21-
语言是用17世纪著名数学家和哲学家巴雷斯·帕斯卡(Blaise Pascal)的名字命名的,常用于教学中讲解结构化编程.因而很快成为了大学中受欢迎的语言。但是这个语言缺乏在商业、工业和政府应用程序中所需要的许多特性,因此没有被大学以外的环境所接受。
Ada语言是在20世纪70年代和80年代初由美国国防部资助开发的。在此之前,国防部的导弹命令与控制软件系统是由几百种不同语言生成的,国防部要求用一种语言来完成大多数工作。Ada以Pascal为基础.但最终结构与Pascal大相径庭。这个语言是根据著名诗人Lord Byron的女儿(Ada Lovelace)的名字命名的。Ada Lovelace在19世纪初编写了世界上第一个计算机程序,用于charles Babbage设计的分析机引擎的计算设备。Ada的一个最重要功能是多任务(multiasking).程序员可以使多个活动任务并行发生。我们要介绍的其他常用高级语言(包括C/C++)通常只让程序员编写一次只有一个活动任务的程序。
2.5 简单程序
C++使用非程序员可能感到奇怪的符号。我们首先介绍一个简单程序:打印一行文本。程序及其屏输出如图2.2。
这段程序演示了C++语言的几个重要特性。我们详细介绍程序的每一行。 // Fig.2.2:fig1_02.cpp // A first program in C++
以//开头,表示该选项其余部分是注释语句(comment)。程序员手稿注释语句用来说明和提高程序的可读性。注释语句还可以帮助其它人阅读和理解程序。在运行程序时注释语句并不使计算机采用任何操作。C++编译器忽略注释误句,不产生任何机器目标码。注释语句\C++\只是描述该程序的用途。以//开头的说明语句称为单行貹注释语句(singned-line comment),因为该注释语句在行尾结束(注意:C++程序员也可以用C语言注释语句样式,即注释语句以/*开头,以*/结束)。
1 // Fig. 2.2:fig01_02.cpp 2 // A first program in C++ 3 #include
7 cout<<\ 8
9 rerturn 0; // indicate that program ended sucessfully 10 }
输出结果: Welcom to C++!
下列语句:
#include
是条预处理指令(preprocessor directive),是发给C++预处理器的消息。预处理器先处理以#开头的一行语句之后再编译该程序。为一行预处理指令告诉预处理器要在程序中包括输入、输出的头文件iostream.h的内容。应该在任何使用C++式输入、输出泫从键盘输入数据或向屏幕输出
-22-
数据的程序中包括这个头文件。注意,最新ANSI、ISO C++杂标准实际上指定iostream.h和其它标准头文件不需要后缀.h,如iostream。我们在本教程中有时继续使用旧式头文件,因为有些编译器还不支持最新的ANSI/ISO C++草案标准。
下列语句: int main()
是每个C++程序都包的语句。main后面的括号表示main是个程序基本组件, 称为函数(function)。C++程序包含一个或几个函数,其中有且只有一个main函数即使main不是程序中的第一个函数,C++程序通常都从main函数开始执行。main左边的关键字int表示main返回一个整数值。
左花括号({)应放在每个函数体(body)开头,对应右花括号(})应放在每个函数的结尾。下列语句:
cout<<\
让计算机在屏幕上打印引号之间的字符串(string)。 整个行称为语句(statement),包括cout<<运算符、字衔串\和分号(;)。每条语句应以分号(又称为语句终止符)结束。C++中的输出和输入是用字符流(stream)完成的,这样,执行上述语句时,将字符流\发送到标准输出流对象(standard output stream object)cout,通常cout将其输出到屏幕。第3章“C++输入/输出流”中将详细介绍cout。
运算符<<称为流插入符(strem insertion operator)。执行这个程序时,运算符右边的值(历操作数)插入输出流中。历操作数通常按引号中的原样直接打印。但注意字符\\n不在屏幕中打印。反斜杠(\\)称为转义符(escap character),表示要输出特殊字符。字符串中遇到反斜杠时,下一个字符与反斜杠组合,形成转义序列(escape sequence)。转义序列\\n表示换行符(newline)。使光标(即当前屏幕位置的指示符)移到下一行开头。表2.3列出了常用转义序列。 下列语句:
return 0; // indicate that program ended sucessfully
放在每个main函数的末尾。C++的关键字return 是退出函数的几种方式之一。main函数末尾使用return语句时,数值0表示顺利结束。第3章将详细介绍和解释包括这个语句的原因。目前只要记住在每个程序中都要包括这个语句。否则在某些程序中编译器会产生警告消息。 右花括号(})表示main函数结束。
------------------------------------------------------------------------------ 转义序列 说明
------------------------------------------------------------------------------
\\n 换行符,使屏幕光标移到屏幕中下一行开头 \\t 水平制表符,使屏幕光标移到下一制表位
\\r 回车符,使屏幕光标移到当前行开头,不移到下一行 \\a 警告,发出系统警告声音 \\\\ 反斜杠,打印反斜杠符 \\\ 双引号,打印双引号
-------------------------------------------------------------------------------
图2.3 常用转义序列
许多程序员让函数打印的最后一个字符为换行符(\\n)。这样可以保证函数使屏幕光标移到屏幕中下一行开头,这种习惯能促进软件复用,这是软件开发环境中的关键目标。
确定一个喜欢的缩排长度,然后一直坚持这个缩排长度。可以用制表符生成缩排,但制表位可能
-23-
改变。建议用1/4英寸制表位或三个空格的缩排长度。
\to C++!\可用多种方法打印。例如,图2.4的程序用多条流插入语句,产生的程序输出与图2.2相同,因为每条流插人语句在上一条语句停止的位置开始打印。第一个流插入语句打印“Welcome”和空格,第二条流插入语句打印同一行空格后面的内容。C++允许以多种方式表达语句。
一条语句也可以用换行符打印多行,如图2.5。每次在输出流中遇到\\n转义序列时,屏幕光标移到下一行开头。要在输出中得到空行,只要将两个\\n放在一起即可,如图2.5。 1 // Fig. 2.4:fig01_04.cpp
2 // printing a line with multple statements 3 #include
7 cout<<\ 8 cout<<\ 9
10 return 0; 11 }
输出结果: Welcom to C++!
图2.4 用多条流插入语句打印一行
1 // Fig. 2.5:fig01_05.cpp
2 // printing multiple lines with a single statement 3 #include
7 cout<<\ 8
9 return 0; // indicate that program ended sucessfully 10 }
输出结果: Welcome to
C++!
图2.5 用一条流插入语句打印多行
-24-
2.6 简单程序:两个整数相加
下一个程序用输入流对象cin和流读取运算符>>取得用户从键盘中输入的两个整 ,计算这两个值的和,并将结果用cout输出。程序及其输出如图2.6。
1 // Fig.2.6:fig01_06.cpp 2 // Addition program 3 #include
7 int integer1,integer2,sum; // 声明三个变量 8
9 cout<<\ // 提示信息
10 cin>>integer1; // 从键盘读一个整数 11 cout<<\ // 提示信息
12 cin>>integer2; // 从键盘读一个整数
13 sum=integer1+integer2; // 两整数相加,值赋给变量sum 14 cout<<\ // 输出和 15
16 return 0; // 返回0值表示程序运行成功。 17 }
输出结果:
Enter first integer 45
Enter second integer 72
Sum is 117
图2.6 两个整数相加
注释语句:
// Fig. 2.6: fig01_06.cpp // Addition program
指定文件名和用途。C++预处理指令: #include
将iostream.h头文件的内容放进程序中。
前面介绍过,每个程序从main函数开始执行。左花括号表示main函数体开头,相应右花括号表示main函数体结束。下列语句: int integer1,integer2,sum;
是个声明(declaration)。integer1,integer2和sum是变量(variable)名。变量是计算机内存中的地址,存放程序使用的值。这个声明指定变量integer1,integer2和sum的数据类型为int,表示这些变量保存整数值,如7、-11、0、31914。所有变量都应先声明名称和数据类型后才能在程序中使用。
-25-
信息学奥赛培训教程C++版



