C++基础语法详解

目录

1 - 常量与变量

1.1 常量

1.2 变量

1.3 变量的分类 

2 - C++的三种基本控制结构 

 2.1 顺序结构

2.2 选择结构

2.3 循环结构 

3 - 数组

3.1 数组的定义与赋值

3.2 数组的访问

3.3 二维数组的定义

4 - 函数

4.1 函数的定义

4.2 函数参数的传递 

4.3 递归函数 


1 - 常量与变量

1.1 常量

        在程序中,值始终不变的数据称为常量,如字符常量‘a',整型常量10,实型常量3.14等。

        另外,还有一种用标识符表示的数值不变的常量,称为符号常量。一般符号常量均为大写,如

const float PI=3.14

1.2 变量

        变量是一个有名字,有特点属性的存储单元。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。

        变量可以在定义时初始化,如

int a=1,b=1;

        也可以连续赋值,如

int a,b;
a=b=c;

        但不可以边定义边赋值,如

int a=b=1;//不正确

1.3 变量的分类 

        变量根据作用域的不同,可分为局部变量和全局变量。

        变量根据存储类别可分为四大类,分别是自动变量、静态局部变量、外部变量、寄存器变量。这四种变量的基本区别如下表所示。

变量存储类型对照
序号存储类型标识符变量主要特点说明
1自动变量auto动态分配存储空间auto经常省略
2静态局部变量static局部变量在函数调用结束后不会消失,仍保留着原值
3外部变量extern把外部变量的作用域扩展到定义位置
4寄存器变量register执行效率远高于内存变量,用于频繁调用的变量

2 - C++的三种基本控制结构 

        C++的三种基本控制结构是如图1所示。

图1- C++的三种基本控制结构 

 2.1 顺序结构

        顺序结构按照程序的先后顺序自上而下地执行。图1中,第一幅是顺序执行的,执行完A框所指的操作后,接着执行B狂所制定的操作。

        所有的程序从整体而言都是一种顺序结构。

2.2 选择结构

        选择结构又称分支结构,此结构包含一个判断框,根据给定的条件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:语句; 
}

 注意:

  • 表达式的值必须是整形、字符型或枚举型。
  • 多个case标号可以共用一组语句序列,以实现对多个常量执行同一个操作。
  • default可以省略
  • break表示终止switch,转而执行switch下面的语句;若不佳break,则执行完case后面的分枝后会顺序执行下一个case分枝。

2.3 循环结构 

(1)用for语句实现循环。

for(初始表达式1;循环条件表达式2;循环变化表达式3)
{
	循环语句;
}

注意:

  • 3个表达式都可以省略,但是分号不能省略。
  • 执行时,表达式1只在开始时执行一次,然后判断表达式2是否为真;若为真,则执行循环语句,否则不执行。

(2)用while语句实现循环

while语句——当型循环的表达式

while(初始表达式)
{
	循环语句;
}
  •  当表达式为真(表达式为非0)时,执行循环语句。
  • 先判断,后循环。
  • 当有多条语句要执行时,要用花括号把多个语句括起来。
  • 在循环语句中必须有循环改变的语句,否则会出现死循环。

 do…while语句——直到型循环的表达式为

do{
	循环语句;
}while(条件表达式);
  • do…while循环后面的分号一定不能丢;
  • do…while循环先执行、后判断,至少执行一次

while循环可以理解为先量一下这棵树长度够不够,如果够,我就砍;否则我就走。而do…while循环可以理解为我先把这棵树砍了,在量一量长度,如果够,我就带走;否则我就走 。

(3)跳转语句

        使用跳转语句可以实现程序执行流程的无条件跳转。

        C++提供了3种跳转语句,分别如下。

  • break语句

        在循环题内的break语句可以使循环立即结束,退出循环继续向下执行。但是break语句只能退出本层循环,如

for(…)
{
	while(…)
	{
		…;
	}
	for(…)
	{
		break;
	}
}

        若满足上面的if条件,则推出内层的while循环,而不会退出for循环,开始下一次的for循环。

  • continue语句

        continue语句的作用时终止本次循环,开始执行下一次循环。

  • return语句 

        return表示把整个程序流程从被调用函数转向主调函数,并把表达式的值带回给主调函数,实现函数值的返回,返回时可附带一个返回值,有return后面的参数指定;也可用循环题中满足条件时的结束语句。

3 - 数组

3.1 数组的定义与赋值

        数组是一组有序数列的集合,数组的定义主要分三部分构成:数据类型、数组名和数组的大小。以下是一个int类型数组的定义

int arr[5];

        该数组定义了 一个名为a,大小为5的整型数组,相当于定义了5个整型变量,每个变量采用数组名和下标的组合进行标记,而且这5个整型变量值都存储在连续的内存位置,其内存示意图如图2所示。

 图2 - 5个元素的示意图

数组的输入一般采用循环:

for(int i=0; i<n; 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 函数调用的一般过程

        递归函数就是一个函数体内直接或者间接调用它自己,没调用一次就进入新的一层。递归函数必须有结束递归的条件。函数在一只递推,直到遇到结束条件才返回。


好啦 ,以上就是本节的内容啦,希望大家有所收获!

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值