在程序中,值始终不变的数据称为常量,如字符常量‘a',整型常量10,实型常量3.14等。
另外,还有一种用标识符表示的数值不变的常量,称为符号常量。一般符号常量均为大写,如
const float PI=3.14
变量是一个有名字,有特点属性的存储单元。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。
变量可以在定义时初始化,如
int a=1,b=1;
也可以连续赋值,如
- int a,b;
- a=b=c;
但不可以边定义边赋值,如
int a=b=1;//不正确
变量根据作用域的不同,可分为局部变量和全局变量。
变量根据存储类别可分为四大类,分别是自动变量、静态局部变量、外部变量、寄存器变量。这四种变量的基本区别如下表所示。
| 序号 | 存储类型 | 标识符 | 变量主要特点 | 说明 |
|---|---|---|---|---|
| 1 | 自动变量 | auto | 动态分配存储空间 | auto经常省略 |
| 2 | 静态局部变量 | static | 局部变量在函数调用结束后不会消失,仍保留着原值 | |
| 3 | 外部变量 | extern | 把外部变量的作用域扩展到定义位置 | |
| 4 | 寄存器变量 | register | 执行效率远高于内存变量,用于频繁调用的变量 |
C++的三种基本控制结构是如图1所示。
图1- C++的三种基本控制结构

顺序结构按照程序的先后顺序自上而下地执行。图1中,第一幅是顺序执行的,执行完A框所指的操作后,接着执行B狂所制定的操作。
所有的程序从整体而言都是一种顺序结构。
选择结构又称分支结构,此结构包含一个判断框,根据给定的条件p是否成立二选择执行A框或B框。
选择结构又分为单分枝、双分枝和多分枝三种
(1)单分枝结构
单分枝结构的表达式为
- if(表达式)
- {
- 语句1;
- }
单分枝结构的含义:若表达式为真(即值不为0),则执行语句1,否则不执行。若包含多条语句,则加一对“{}”。
(2)双分枝结构
双分枝结构的表达式为
- if(表达式)
- {
- 语句1;
- }
- else
- {
- 语句2;
- }
双分枝结构的含义是:若表达式为真,则执行 语句1,否则执行语句2。
(3)多分枝结构
多分枝结构往往都是嵌套使用大的,在if语句中又包含一个或多个if语句,称为if语句的嵌套。
if语句的嵌套表达式为
- if(表达式1)
- {
- 语句1;
- }
- else
- {
- if(表达式2)
- {
- 语句2;
- }
- else
- {
- 语句3;
- }
- }
else总是与它前面最近且为配对过的if匹配。
复合语句内的if关键字堆外界而言是不可见的。
例如:
- if(表达式1)//第1个if
- {
- if(表达式2)//第2个if
- {
- if(表达式3)//第3个if
- {
- 语句3;
- }
- }
- else
- {
- 语句2;//与第2个if相匹配
- }
- }
(4)使用switch进行多分枝选择结构
- switch(表达式){
- case 常量表达式1:语句1;break;
- case 常量表达式2:语句2;break;
- …
- case 常量表达式n:语句n;break;
- default:语句;
- }
注意:
(1)用for语句实现循环。
- for(初始表达式1;循环条件表达式2;循环变化表达式3)
- {
- 循环语句;
- }
注意:
(2)用while语句实现循环
while语句——当型循环的表达式
- while(初始表达式)
- {
- 循环语句;
- }
do…while语句——直到型循环的表达式为
- do{
- 循环语句;
- }while(条件表达式);
while循环可以理解为先量一下这棵树长度够不够,如果够,我就砍;否则我就走。而do…while循环可以理解为我先把这棵树砍了,在量一量长度,如果够,我就带走;否则我就走 。
(3)跳转语句
使用跳转语句可以实现程序执行流程的无条件跳转。
C++提供了3种跳转语句,分别如下。
在循环题内的break语句可以使循环立即结束,退出循环继续向下执行。但是break语句只能退出本层循环,如
- for(…)
- {
- while(…)
- {
- …;
- }
- for(…)
- {
- break;
- }
- }
若满足上面的if条件,则推出内层的while循环,而不会退出for循环,开始下一次的for循环。
continue语句的作用时终止本次循环,开始执行下一次循环。
return表示把整个程序流程从被调用函数转向主调函数,并把表达式的值带回给主调函数,实现函数值的返回,返回时可附带一个返回值,有return后面的参数指定;也可用循环题中满足条件时的结束语句。
数组是一组有序数列的集合,数组的定义主要分三部分构成:数据类型、数组名和数组的大小。以下是一个int类型数组的定义
int arr[5];
该数组定义了 一个名为a,大小为5的整型数组,相当于定义了5个整型变量,每个变量采用数组名和下标的组合进行标记,而且这5个整型变量值都存储在连续的内存位置,其内存示意图如图2所示。

图2 - 5个元素的示意图
数组的输入一般采用循环:
- for(int i=0; i
- {
- cin>>a[i];
- }
3.2 数组的访问
在数组中,每个数组元素作为单独的变量进行访问和使用,并且第一个元素的下标是0,最后一个元素的下标是n-1。
例如:定义a数组中的5个元素,则下标为0~4,如果企图访问a[5],则会出现下标溢出。
数组的变量名表示数组的内存首地址,即a相当于&a[0]。
3.3 二维数组的定义
定义一个二维数组的方法为
int a[2][3]={{1,2,3},{4,5,6}};
该二维数组的形式如图3所示

图3 - 二维数组的内存示意图
而为数组的输入一般采用双重循环的形式,如:
- for(int i=0; i<2; i++)
- {
- for(int j=0; j<3; j++)
- {
- cin>>a[i][j];
- }
- }
4 - 函数
4.1 函数的定义
一个函数不可或缺的部分为
- 返回值数据类型 函数名(形式参数)
- {
- 函数体;
- return 返回值;
- }
- 函数体是一个复合语句,必须加大括号{};
- 函数名的命名规则同变量的命名规则;
- 如果函数具有返回值,则必须说明返回值类型,否则无返回值的函数应当使用void定义,说明函数无返回值;具有返回值的函数,函数体内一定要由return返回一个值。
- 函数的参数称为形式参数,可以有多个,用逗号分隔;也可以一个都没有,称为无参数函数。形式参数是函数的局部变量。
4.2 函数参数的传递
程序中,实参向形参是单向传递的方式,并且普通变量作为函数参数,实参将值传递给形参。数组元素作为函数参数,也同样属于单项值的传递。
指针(包括数组名)作为函数参数,由于指针变量和数组名的值均为地址,因此实参和形参之间的传递是地址,其结果是形参指向了实参所指的地址,如
- void swap(int *x,int *y)
- {
- int temp;
- temp=*x;
- *x=*y;
- *y=temp;
- }
- int a=5,b=10;
- swap(a,b);
其结果是交换了变量a和变量b的值。
下面拿的函数用普通变量作为参数,是无法实现交换功能的。
- void swap(int x,int y)
- {
- int temp;
- temp=x;
- x=y;
- y=temp;
- }
- int a=5,b=10;
- swap(a,b);
a和b的值没有发生变化,函数仅仅是交换了其局部变量x和y的值。
指针和数组名作为参数的形式:
- 形参是指针,实参是数组名或某个元素的地址;
- 形参是数组名,实参是指向数组的指针;
- 形参是指针,实参也是。
4.3 递归函数
函数体内调用自身称为递归。递归的过程分为递推和回溯两个过程,可以解决的问题有求阶乘、n皇后、斐波那契数列等。
所有程序从main函数开始顺序执行,函数调用可以看作是一个无条件跳转,跳转到对应函数的指令处开始执行,当碰到return函数或者函数结尾是,在执行一遍无条件跳转,跳转回调用方,执行调用函数后的下一条指令。函数调用的一般过程如图3所示。

图3 函数调用的一般过程
递归函数就是一个函数体内直接或者间接调用它自己,没调用一次就进入新的一层。递归函数必须有结束递归的条件。函数在一只递推,直到遇到结束条件才返回。
好啦 ,以上就是本节的内容啦,希望大家有所收获!