C++Test

开始C++之旅

古语说,“欲速则不达”,不论是盖房还是学知识,打牢基础十分重要。没有见识的基础,摩天大楼也无法送礼,学习C++童颜需要深入掌握基础知识和基本结构,由浅入深地把握全局,下面就从C++大厦的基本框架和一砖一瓦说起。

2.1C++程序的结构

   /*
文件名:example201.cpp
功  能:两数相乘
*/
#include <iostream>                                 //编译预处理
int main()                                          //主函数
{
    using namespace std;                            //名称空间编译指令
    /*
    声明三个代表整数的符号,num1和num2为乘数和被乘数,
    resultNum为乘积,它们的初值都为0
    */
    int num1=0, num2=0, resultNum=0; 
    cout<<"请输入要相乘的两个整数,用空格键分开:";    //输出提示语句
    cin>>num1>>num2;                                //接收用户输入
    resultNum=num1 * num2;                          //乘法运算
    cout<<"计算结果为"<<resultNum;                   //输入计算结果
    cout<<endl;                                     //输出一个空行 
    return 0;                                       //main()函数返回
}

2.1.1 注释

  • C++支持两种风格的注释:

  • C++风格:以//打头,作用范围为一行

  • C风格:以‘/’开始,以‘/’结束,两个符号间的内容都会被注释掉,因此可以跨越多行。使用时,应注意//的正确配对,C风格注释不支持嵌套。

  • 注释是程序员为读者提供的说明,是提高程序可读性的一种手段。注释仅供人阅读程序用,是程序的可选部分,C++编译器忽略所有的注释,将其视为空白。

提示:应养成在编码同时随手写注释的好习惯,程序越复杂,就越有必要写注释,注释不仅仅方便他人阅读代码,也有助于程序员的总结、检查与回顾。

2.1.2 编译预处理与新旧标准

  • 以符号#开头的行,称为编译预处理行,中使用了#include编译指令,其作用是在编译之前将iostream文件的内容添加到程序中,iostream设置了C++的输入输出环境,如cin和cout是在iostream中定义的C++标准输入、输出设备标识符,endl是iostream中定义的换行符。

  • 使用cin和cout进行输入和输出时,程序中必须包含iostream文件(对旧
    式编译器,程序中应包含iostream.h文件)。

  • 前面已经讲过,C++语言是C语言的一个超集,早期的C和C++的头文件都采用扩展名为.h形式,随着C++的发展,关于头文件的标准也在不断地变化。给出了新旧标准的对比,C++一栏中灰色区域代表纯粹的C++ 头文件,白色区域代表C头文件,现在,对老式的C文件头文件保留了.h扩展名(C++程序仍可使用这种文件);而C++的头文件去掉了扩展名。有些C头文件(如中的X2.h)被转换成C++头文件,去掉了扩展名,并在文件名称前加上了前缀c(表明来自C语言),对应于中的网格状区域(CX2)。较旧的编译器可能只支持旧标准格式,符合ANSI/ISO C++最新标准的编译器既支持旧标准格式,也可以使用新的头文件格式,对纯粹的C++头文件来说(如iostream),去掉扩展名.h并不仅仅是形式的变化,没有.h的头文件可以使用名称空间。

2.1.3 主函数

  • C++用函数组织过程,每个相对独立的过程都可组织成一个函数,程序一般由不同的函数按层次结构组织而成,因此,函数的定义是C++的主体

2.1.4 名称空间

  • 在中,使用iostream头文件,应使用名称空间编译指令“using namespace std;”使得定义cout和cin对程序可见,这叫做using编译指令

  • 在使用计算机软件厂商提供的源代码时,经常会遇到函数重名或变量重名的情况,编译器
    不知道该使用哪个版本,人为对函数和变量进行改名也不现实,为了解决这一问题,新的ANSI/ISO C++标准引入了名称空间这一特性。允许厂商将其产品封装在一个叫名称空间的单元中,使用名称空间来对函数和变量进行管理,编译器也因此可以决定使用哪个版本。如A公司和B公司提供的源代码中都有C()函数,并将各自的代码都定义在名称空间NamespaceA和NamespaceB中,使用下面的调用方式可以将两个版本无误地区分开:

     NamespaceA::C();       //调用A公司提供的C函数
     NamespaceB::C();       //调用B公司提供的C函数
    

2.1.5 C++语素

  • 从编译角度看,组成C++的最小逻辑单位是单词,单词好比建屋盖房的砖瓦,C++中的单词有以下几类:
  • (1)直接常量
  • (2)字符串
  • (3)关键字
  • (4)一般标识符
  • (5)运算符
  • (6)标点符号

2.2 变量与基本类型

数学课上我们学习了未知数的概念,未知数是对解的一种标识,换种思考的角度,未知数也是存储解数据的手段,设计C++程序解决问题,也需要存储和标识信息,这就要用到变量。

2.2.1 变量

  • 变量就是机器一个内存位置的符号名,在该内存位置可以保存数据,并可通过符号名对数据进行访问。变量有3个特征:

  • 每一个变量有一个名字,其命名规则与一般标识符相同。

    • 每一个变量有一个类型。
  • 每一个变量保存一个值。如果需要变量保存某一个值,就把该值赋给变量。

  • 在使用一个变量之前,必须先定义。变量的定义的一般格式如下:

  • 数据类型 变量名1[= 初始值1], 变量名2[= 初始值2], …;

  • 方括号中的内容是可选的,它是在变量定义时,给变量赋初值。”数据类型”是指C++有效的数据类型,如int、double、long等,每个变量属于一个特定的类型,类型是对一组数据的抽象,这些数据具有相同的取值范围、运算和存储方式,C++中的数据类型可分为基本数据类型和复合数据类型两大类,如图2.2所示 。
    C++Test_第1张图片

2.3 常量

有了前面对变量的说明,再来说常量显然就轻松了很多。常量同样对应着内存中的一块存储区域,通过常量名可对该区域进行访问,同样有整型、浮点型、字符型和布尔型等数据类型,和变量唯一的不同之处在于,通过程序或输入无法改变常量的值,这也是常量取名的由来。

2.4 运算符与表达式

  • 运算符,顾名思义,指的是具有运算意义的符号,比如加运算符(+),减运算符(-)等,表达式,是C++编译器能读懂的计算机语句,由运算符和操作数按一定语法规则组合而成,根据运算符决定对操作数进行何种运算,并得出唯一的运算结果
  • C++提供的运算符有以下几种:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符及其它运算符。同时,按照操作数的个数,运算符又可以分为单目运算符(1个操作数)、双目运算符(两个操作数)和三目运算符(3个操作数)。

2.5 类型转换

C++中有整型、浮点型、布尔型、字符型等基本类型,在后面的章节中还会介绍到复杂数据类型和用户自定义的类型。在进行运算,尤其是对不同的类型进行运算时,可能会引发混乱,为此,C++引入了类型转换机制,一种数据类型能够被转换为另一种数据类型。

2.6 流程控制语句

  • 程序由数据结构和算法组成,算法是一系列动作的集合,而这一个个的动作,就是C++中的语句,语句是构造程序最基本的单位,程序运行的过程就是执行程序语句的过程,程序语句执行的次序称之为流程控制(或控制流程)。
  • 结构定理指出:任何程序逻辑都可以用顺序、选择和循环等3种基本结构来表示,在我们前面给出的示例代码中,程序语句都是顺序执行的,那有没有可能改变程序语句的执行次序呢?答案是肯定的,只要借助于C++提供的分支语句(if…else…语句和switch语句)、循环语句(for循环和while循环)以及转向控制语句(continue、break和goto等)。

2.7 小结

本章讲述了C++语言的基本知识,在C++语言中,语句、标识符、变量、常量、函数、预处理指令、输入和输出等,是重要的概念,应该在实践中逐渐掌握这些概念,合理地加以应用。介绍了C++基本的各种运算符构成(算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符及其它运算符)、各自的优先级和结合性。详细讲解了由运算符组成的各种表达式、表达式中操作数类型的显式及隐式转换,剖析了C++的流程控制语句,包括分支结构(if…结构、if…else…结构和switch结构)、循环结构(for结构、while结构和do…while结构)、流程转向控制语句break和continue、自由转向语句goto等,只有扎实掌握了这些最基本的内容,才能一步步深入,学好C++,用好C++。

你可能感兴趣的:(C++,基础)