第1章C++基础知识程序设计语言是人类在计算机上解决实际问题的一种工具。当一个求解问题能够用数学模型表达时,人们会考虑用某种程序设计语言将该问题的数学模型表示成计算机可以接受的程序形式,再由计算机自动处理这个程序,生成人们所需要的结果。1.1程序设计语言的基本概念1.面向过程的结构化程序设计语言2.面向对象的程序设计语言有两类:一类是完全面向对象的语言,另一类是兼顾面向过程和面向对象的混合式语言。C++语言就是后一种形式的典型代表。1.2C++程序的基本结构1.2.1C++程序结构一般来说,C++程序的结构包含声明区、函数区两个部分,在任何一个区内都可以随时插入程序的注释。【例1.1】从键盘输入圆的半径,求圆的面积。程序代码如下://*****ex1_1.cpp*****#includeiostreamusingnamespacestd;#definePI3.14159floatsum(floatx);voidmain(){floatr,s;coutInputr:;cinr;s=sum(r);coutr=rs=sendl;}floatsum(floatx){returnPI*x*x;}1.声明区声明区在函数之外。程序的声明区可能需要编写:(1)包含文件,如例1.1中的#includeiostream.h;(2)宏定义,如例1.1中的#definePI3.14159;(3)函数声明,如例1.1中的floatsum(floatx);(4)条件编译;(5)全局变量声明;(6)结构体等的定义;(7)类的定义。2.函数区一个程序由一个主函数main()和多个(可以是0个)其他函数组成。每个函数都是由函数声明部分与函数体部分组成。程序的执行从main()函数开始。函数声明部分包括函数返回值类型、函数名、函数的形式参数。函数体部分是用一对花括号{}括起来的完成该函数所表达的功能的语句的集合。语句可以是数据描述语句或数据操作语句。任何一种程序设计语言可用下面的模型描述:一种程序设计语言的模型与人类的自然语言模型是一致的,都遵守这种模型。读者可以借鉴人类自然语言的学习方法来学习某种程序设计语言。1.2.2C++程序的书写格式C++程序的书写格式比较灵活,书写程序时可以任意换行,一行内可以书写多条语句,一条语句可以书写在多行上,只要每条语句以分号(;)结束即可。也因为如此,所以C++程序可读性差,为了提高程序的可读性,C++程序的书写格式有如下约定:(1)C++程序中,每行一般书写一条语句;语句较短时,多条语句可书写在一行内。语句较长时,一条语句可写在多行上。(2)C++程序中,每条语句以分号结束,表示一条语句的结束,但函数说明行和声明区的多数语句后不用分号。语句前面没有标号,只有goto语句的转向目标语句前加标号。(3)C++程序中,使用向右缩进方法表达程序中的层次结构,如花括号{}内的函数体、循环语句的循环体、if语句的if体和else体一般都向右缩进几个字符。花括号是函数体或复合语句的定界符。(4)C++程序中,可使用多行注释或单行注释以增强程序的可读性。多行注释以“/*”开始,以“*/”结束,占据多行。单行注释以“//”开始,占据一行。1.3一个应用程序的开发过程1.3.1VisualC++6.0开发环境采用VisualC++6.0开发环境;这是一个集编辑、编译、链接、调试运行于一体的集成环境,即在一个程序的控制下可以分步或一次性地完成编辑、编译、链接、调试运行工作。1.3.2一个应用程序的开发过程1.启动VisualC++6.0开发环境2.创建工程项目3.打开项目文件4.创建C++源程序文件并添加到项目文件中5.编译、链接与运行程序在上页图中单击“Compile”按钮进行编译,单击“Build”按钮进行编译与链接(在没有编译的情况下),单击“ExecuteProgram”按钮进行编译、链接和运行(在没有编译、链接的情况下)。例1.1程序所建立的项目的运行结果如下:1.4C++的词法规则一个程序包含两个方面的主要内容:数据描述和数据操作。数据是操作的对象,数据的存储方式决定于该数据的数据类型,描述数据就是定义数据的类型。数据类型的定义表现在常量、变量等的定义之中,而常量、变量又是一种程序设计语言的基本单词。除了常量、变量之外,一种程序设计语言还有标识符、运算符、关键字、分隔符等基本单词,这些单词的构成(书写规则)都必须遵守该语言的词法规则。本节介绍的就是C++中各种单词的构词规则。请读者结合前面的语言模型图学习本节内容并思考本节内容属于语言模型图的哪个环节。由一种语言提供的字符集中的字符构造的单词必须遵守该语言的词法规则。在一种语言中,单词涉及标识符、关键字、运算符、常量、变量、注释符、分隔符等。C++也不例外。本节只讨论C++中的基本词法规则。1.4.1C++的字符集组成C++的字符集包括如下字符:(1)26个小写字母:a~z。(2)26个大写字母:A~Z。(3)10个数字:0~9。(4)标点和特殊字符:+-*/,:;?\”’~|!#%&()[]{}^空格。(5)空字符:ASCII码为0的字符,用作字符串的结束符。1.4.2C++的单词及其构词规则单词由若干个合法字符组成,下面介绍常用的单词。1.标识符标识符是由字母、下画线和数字组成的字符序列,第一个字母必须是字母或下画线,不能是数字。标识符中的字母大小写是不同的。标识符用来命名C++程序中的常量、变量、函数、语句标号及类型定义符等。有一部分标识符是系统定义的。本小节关心的是用户定义的标识符。在定义标识符时,要注意以下几点:(1)要遵守上面的构成标识符的规则。Aa、ABC、A_Y、ycx11、_name是合法标识符。而5xyz、m.x、!abc、x-y是非法标识符。(2)系统已经使用的关键字、函数名或其他已定义的单词不能再定义成标识符。(3)定义标识符时尽可能让标识符有意义,便于阅读,即做到“见名知义”。2.关键字关键字(又称保留字)是被系统定义了的已具有特定含义的标识符。3.运算符运算符与操作数连接组成表达式。连接一个操作数的运算符称为单目运算符,连接两个操作数的运算符称为双目运算符,连接三个操作数的运算符称为三目运算符。有关运算符的种类、功能、优先级和结合性等问题将在1.7节中详细介绍。4.常量常量是在程序中不改变的量。C++程序中的常量有:整型常量、浮点型常量、字符常量和字符串常量4种。将在1.6节中详细介绍。5.变量变量是在程序中可以改变的量。变量有三要素:名字、类型和值。某个变量的值被改变后,将一直保持到下一次被改变。变量是一种标识符,其命名完全与标识符相同。将在1.6节中详细介绍其特性。6.注释符注释符的作用是在程序中标识注释信息。在C++程序中,可使用多行注释或单行注释增强程序的可读性。多行注释以“/*”开始,以“*/”结束,占据多行。单行注释以“//”开始,占据一行。“/*”、“*/”、“//”就是注释符。7.分隔符分隔符有:空格符、换行符、水平制表符等,用作其他单词之间的分隔符;逗号(,),多作多个变量或多个参数之间的分隔符;分号(;),主要用于for语句的for关键字后的圆括号内,作分隔符;冒号(:),用来标识语句标号和开关语句,常用于switch的case关键字后。1.5C++基本数据类型表1-2C++基本数据类型基本型(int)短整型(short)长整型(long)无符号整型(unsignedint)无符号短整型(unsignedshortint)无符号长整型(unsignedlongint)有符号整型(signedint)有符号短整型(signedshortint)有符号长整型(signedlongint)字符型(char)单精度浮点型(float)双精度浮点型(double)长双精度浮点型(longdouble)4244244241488-2147483648~2147483647-32768~32767-2147483648~21474836470~42949672950~655350~4294967295-2147483648~2147483647-32768~32767-2147483648~21474836470~255-3.4×1038~3.4×1038-1.7×10308~1.7×10308-1.7×10308~1.7×10308数据类型字节数数据表达范围1.6常量与变量常量与变量是C++中最基本的数据描述形式。本节只介绍常量和变量的基本概念,包括5种常量和基本数据类型的变量。关于构造类型的变量将在后续章节中介绍。1.6.1常量常量是在程序中不改变的量。C++程序中有4种常量:整型常量、浮点型常量、字符常量和字符串常量。1.整型常量C++程序中,整型常量和浮点常量统称数值常量。整型常量有三种形式:十进制、八进制和十六进制。十进制常量的写法就是算术表达方式,如12、345都是合法的十进制常量。八进制常量在数值前要加上一个零(0),如011、077都是合法的八进制常量。十六进制常量的写法是在数值前加上一个零(0)和一个字母X(大小写均可),如0X11、0xF都是合法的十六进制常量,分别等于十进制数17和15。2.浮点型常量浮点型常量又称实数型常量。分为十进制数形式和指数形式两种表示方法。(1)十进制数形式的浮点型常量的书写格式:整数部分.[小数部分]其中小数点不能省略。如1.2345、1.0、1.、.12345均是合法的浮点型常量。(2)指数形式的浮点型常量的书写格式:整数部分.小数部分E指数部分其中,指数形式表示符“E”大小写均可。整数部分.小数部分部分允许不含小数点的整数部分,或含小数点的小数部分,指数部分必须是整数。如12E-3、0.1E2、.12345E6、0E0等均是合法的。【例1.2】浮点型常量的运用。程序代码如下://*****ex1_2.cpp*****#includeiostream#includeiomanipusingnamespacestd;voidmain(){intx=77;floata;doubleb;longdoublec;a=88.12300000000000000000f;b=-1.69901234567890123456789e308;c=-1.69901234567890123456789e308;coutx=xendl;couta=setprecision(7)aendl;couta=setiosflags(ios::scientific)aendl;coutsetprecision(20)b=b;cout\tc=cendl;}程序的运行结果如下:3.字符常量字符常量是一个用单引号括起来的字符。单引号是字符常量的定界符,单引号本身表示成‘\’’。在C++中,字符常量具有整数值,其值是该字符的ASCII码。一个字符常量可以与整数进行加减运算。下面的程序给出了字符与整数进行加减运算的实例。【例1.3】字符常量的运用。程序代码如下://*****ex1_3.cpp*****#includeiostream#includeiomanipUsingnamespacestd;voidmain(){chara,b,c,d;a='A';b='B';c=a+3;d='\'';couta'\t'b'\t'cendl;couthexint(a)'\t'int(b)'\t'int(c)endl;coutdendl;}程序的运行结果如下:ABD414244'4.字符串常量字符串常量是用双引号括起来的若干个字符组成的字符序列。双引号是字符串常量的定界符,双引号本身表示成“\””。“”是一个空字符串,空字符串中没有任何有效字符,只有一个字符串结束符。在C++程序中,任何一个字符串常量都有一个结