基础语法
- 分类:C++ · 入门
- 更新时间: 2026-10-28
- 来源:2-基础语法.docx
第一章 C++语言入门
—、C++语言的特点
1.语言简洁紧凑,使用灵活方便
C++语言一共只有32个关键字和9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来,既具有高级语言的功能,又具有低级语言的很多特性。C++语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.运算符丰富
C++语言的运算符包含的范围很广泛,共有34个运算符。运用这些运算符可构成简洁而功能强大的表达式,表达式的类型灵活多样,可以实现在其他高级语言中难以实现的运算。
3.数据结构丰富
C++语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据类型的运算,并引入了指针概念,使程序效率更高。
4.结构化语言
结构化语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C++语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5.生成的代码质量高
C++语言在代码效率方面可以和汇编语言相媲美,一般只比汇编程序生成的目标代码效率低10%~20%。
6.可移植性强
C++语言编写的程序很容易进行移植,在一个环境下运行的程序不加修改或少许修改就可以在完全不同的环境下运行。
C++语言也存在不足,例如,运算符多,使用灵活,但难记、难用,有些运算符在某种情况下会产生二义性;类型转换较为随便,容易造成数据混乱;数组的定义使用方便,但不作越界检查,容易导致数据出错。对学员要求也高,用C++语言编写程序会感到限制少、灵活性大、功能强,较其他高级语言在学习上要困难一些。
二、程序的基本构成
#include<iostream>
using namespace std;
int main(){
cout<<"Hello world";
return 0;
}
(1)头文件< iostream>包含了程序中如输入输出即 cin、cout的定义。
(2)using namespace std;告诉编译器使用std命名空间。命名空间是为了作为附加信息来区分不同库中相同名称的函数、类、变量等。本质上,命名空间就是定义了一个范围。
(3)下一行int main()是主函数,程序从这里开始执行。
(4)//是一个单行注释,用于解释说明。单行注释以//开头,在行末结束。
(5)cout<<"Hello World";用于输出,在屏幕上显示消息"Hello World"。
(6)return 0; 终止main()函数,并向调用进程返回值0。
(7)分号是语句结束符。也就是说每个语句必须以分号结束。
(8)称为块,其中的所有语句是一个语句块。
第二章 顺序结构程序设计
第一节 变量和常量
一、变量定义
变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。
1.变量名
用一个合法的标识符代表一个变量。如n, m, rot, total 等都是合法变量名。在程序中用到的变量要“先定义后使用”,变量名应遵循自定义标识符的命名规则,开建议便用“见名知义”的原则,即用一些有意义的单词作为变量名。在C++语言,变量名大小写有区别。
定义变量的语法格式为:
数据类型 变量表
例如:
int i=5,j,k(5); //定义i,j,k为整型变量,i,k赋初值为5,j的初值未知。
char a, b, c; //定义a,b,c为字符变量
float x,y,z; //定义x,y,z为实型变量
用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。C++语言规定,标识符只能由字母(包含下划线“_”)开头,后面的字符可以是字母或数字。例如:month、_age、s2为合法的标识符;m.k.jack、a<=b、9y为不合法的标识符。
2.变量的类型
常量是有类型的数据,变量在某一固定时刻用来存储一个常量,因此也应有相应的类型。如整型变量用来存储整数,实型变量用来存储实数。变量的类型,可以是标准数据类型,也可以是用户自定义的各种类型。
基本数据类型
二、常量
常量是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123、145.88、' m '、TRUE等。
1.整型常量:如3、-5,0等。
2.实型常量:如3.14。
3.字符常量:是用单引号括起来的单个字符,如 'k '、'5’、’%'。
注意: 'a '与"a"表示的含义是不同的,'a '表示一个字符常量,"a"表示一个字符串。
二、常量的定义
一个常量可以直接调用(如124,'A’ ),也可以给常量取个名字用一个标识符代表它,这就是符号常量。其语法格式为:
const 符号常量=常量字串;
例如:const double PI=3.1415926;
例2.1输入半径r,输出圆的直径、周长、面积,数与数之间以一个空格分开。
【样例输入】
10
【样例输出】
20 62.8 314
程序如下:
#include<iostream>
using namespace std;
const double PI=3.14159; //PI是符号常量。代表3.14159
int main()
{
double r,d, c,s; //变量定义为双精度实型
cin>>r; //输入r的值
d=r* 2; //计算圆的直径
c=2* PI*r; //计算圆的周长
s=PI *r*r; //计算圆的面积
cout<<d<<" "<<c<<" "<<s<<" ";
//分别输出圆的直径,周长,面积,数与数之间以一个空格分开
return 0; //程序结束,返回0值
}
第二节 运算符和表达式
C++语言的运算符可分为以下几类:
1.算术运算符
用于各类数值运算。包括加( + ),减( - )、乘( * )、除( / )、求余(或称模运算, % )、自增( ++ )、自减( -- )共七种。
2.关系运算符
用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符
用于逻辑运算。包括与( && )、或( || )、非( ! )三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与( & )、位或( | )、位非( ~ )、位异或( ^ )、左移(<<)、右移(>>)六种。
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符
这是一个三目运算符,用于条件求值(?:)。
7.逗号运算符
用于把若干表达式组合成一个表达式(,)。
8.指针运算符
用于取内容(*)和取地址(&.)两种运算。
9.求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符
有括号()、下标[]、成员(->,.)等几种。
第三节 数据输入输出
一、通过cout流输出数据
流插入运算符<<和cout结合在一起使用,可向显示器屏幕输出数据。
格式1:
cout<<表达式;
功能:它把表达式的值输出到屏幕上,该表达式可以是各种基本类型的常量、变量或又它们组成的表达式。若要输出多个数据,可以连续使用流插入运算符。
格式2:
cout<<表达式1<<表达式2<<表达式3…;
功能:将表达式的内容一项接一项的输出到屏幕上。
二、通过cin流读入数据
流读取运算符>>和 cin结合在一起使用,可从键盘输入数据。
格式1:
cin>>变量;
功能:是从键盘读取一个数据并将其赋给“变量”。
说明:在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,在>>后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量。
也可以连续使用>>,实现从键盘对多个变量输入数据。
格式2:
cin>>变量1>>变量2>>变量3…;
这要求从键盘输入的数据的个数、类型与变量一致。从键盘读取数据时,各数据之间要有分隔符,分隔符可以是一个或多个空格键、回车键等。
例2.2输入三个整数a,b,c,输出(a + b)* c。
【样例输入】
3 2 5
【样例输出】
25
程序如下:
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d; //变量定义为整数类型
cin>>a>>b>>c; //输入a,b,c的值
d=(a+b)*c; //计算(a+b)*c的值
cout<<d; //输出(a+b)*c的值
return 0; //程序结束,返回0值
}
第三章 选择结构
C++提供三种选择结构,即if选择结构、 if-else选择结构和switch选择结构。
第一节 if 语句(单分支结构)
格式1:
if (条件表达式)
{
语句1;
}
功能:如果条件表达式的值为真,即条件成立,语句1将被执行。否则,语句1将被忽略(不被执行),程序将按顺序从整个选择结构之后的下一条语句继续执行。
说明:格式中的“条件表达式”必须用圆括号括起来。
例3.1读入一个整数a,如果a为偶数在屏幕上输出yes。
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
if (a%2==0){
cout<<"yes"<<endl;
}
return 0;
}
注意:关系运算符==用来表达该符号的左右两边是否相等,不要写成赋值号=。
第二节 if-else语句(双分支结构)
if单分支选择结构只在条件为true时采取操作,条件为false时则忽略这个操作。利用if-else双分支选择结构则可以在条件为true时和条件为false时采取不同操作。
格式1:
if (条件表达式)
语句1;
else
语句2;
功能:如果(条件表达式)的值为“真”,即条件成立,则执行语句1;如果(条件表达式)的值为“假”,即条件不成立,则执行语句2
程序设计风格提示;书写if一else语句时, if和else要对齐,而分支的语句部分要缩进两格。
例3.2读入一个整数a,如果a为偶数在屏幕上输出yes,如果a为奇数在屏幕上输出no。
【样例输入】
22
【样例输出】
yes
程序如下:
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
if (a%2==0){
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
return 0;
}
第三节 switch语句
应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,甚至凌乱。为了方便实现多情况选择,C++提供了一种switch开关语句。
1.语句格式
switch(表达式)
{
case 常量表达式1:
语句序列1;
break;
case 常量表达式2:
语句序列2;
break;
…
case 常量表达式n:
语句序列n;
break;
default:
语句序列n+1;
}
该语句中可以使用一次或多次case标号,但只能使用一次 default标号,或者省略整个default部分;多个case标号也允许使用在同一个语句序列的前面;每个语句标号由保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。
例3.3 根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。
【样例输入】
3
【样例输出】
Wednesday
程序如下:
#include<iostream>
using namespace std;
int main(){
int weekday;
cin>>weekday;
switch(weekday)
{
case 1:
cout<<"Monday"<<endl;
break;
case 2:
cout<<"Tuesday"<<endl;
break;
case 3:
cout<<"Wednesday"<<endl;
break;
case 4:
cout<<"Thursday"<<endl;
break;
case 5:
cout<<"Friday"<<endl;
break;
case 6:
cout<<"Saturday"<<endl;
break;
case 7:
cout<<"Sunday"<<endl;
break;
default:
cout<<"input error"<<endl;
}
return 0;
}
第四章 循环结构
前面我们学习了顺序结构与分支结构的程序设计。在实际应用中,会经常遇到许多有规律性的重复运算,这就需要掌握循环结构程序设计。C++语言提供三种循环结构for.while和 do-while。
第一节 while语句
一、语句格式
格式2:
while (条件表达式)
{
语句1;
语句2;
…
}
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。程序风格提示:写 while循环语句时,循环体的语句相对于 while缩进两格。
二、语句执行过程
(1)计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。
(2)若M为真,则执行了一遍循环体,否则离开循环,结束整个while语句的执行。
(3)循环体的所有语句执行结束后,自动转向第(1)步执行
例4.1利用while循环,输出数字1,2,3…,99,100
【样例输出】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
程序如下:
#include<iostream>
using namespace std;
int main(){
int i=1;
while(i<=100){
cout<<i<<" ";
i=i+1;
}
return 0;
}
第二节 do-while
一、语句格式
do
{
语句1;
语句2;
…
}
while (条件表达式);
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。
二、语句执行过程
(1)执行一遍循环体。
(2)求出作为循环条件的“条件表达式”的值,若为逻辑值真,则自动转向第(1)步,否则结束do循环的执行过程,继续执行其后面的语句。
在do语句的循环体中也可以使用break语句,用它来非正常结束循环的执行。
第三节 for语句
一、语句格式
for (控制变量初始化表达式;条件表达式;增量表达式)
{
语句1;
语句2;
…
}
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。
程序风格提示:写for循环语句时,循环体的语句相对于for缩进两格。
二、语句执行过程
for语句的执行过程可由以下4步来描述。
(1)执行“控制变量初始化语句”,使控制变量获得一个初值。
(2)判断控制变量是否满足“条件表达式”,若满足条件则执行一遍循环体,否则结束整个for语句,继续执行for循环下面的句子。
(3)根据增量表达式,计算出控制变量所得到的新值。
(4)自动转到第(2)步。
例4.2利用for循环,计算输出1+2+3+…+100的和。
【样例输出】
5050
程序如下:
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for (int i=1;i<=100;i++)
{
sum=sum+i;
}
cout<<sum;
return 0;
}
第五章 数组
第一节 一维数组
一、一维数组的定义
当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。
数组的定义格式如下:
类型标识符 数组名[常量表达式]
说明:
①数组名的命名规则与变量名的命名规则一致。
②常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量。
例如:
int a[10]; //数组a定义是合法的
int b[n]; //数组b定义是非法的
其中,a是一维数组的数组名,该数组有10个元素,依次表示为:a[0],a[1],a[2],a[3],a[4],a[5],
a[6],a[7],a[8],a[9]。需要注意的是:a[10]不属于该数组的空间范围。当在说明部分定义了一个数组变量之后,C++编译程序为所定义的数组在内存空间开辟一串连续的存储单元。例如:上例中的a数组在内存的存储如下表所示:
| a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
a数组共有10个元素组成,在内存中10个数组元素共占10个连续的存储单元。a数组最小下标为0,最大下标9。按定义a数组所有元素都是整型变量。
二、一维数组的引用
通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用这个数组中的任何一个元素。
一维数组元素的引用格式:
数组名[下标]
例如:若i,j都是int型变量,则:
a[5]
a[i+j]
a[i++]
都是合法的元素。
说明:
(1)下标可以是任意值为整型的表达式,该表达式里可以包含变量和函数调用。引用时,下标值应在数组定义的下标值范围内。
(2)数组的精妙在于下标可以是变量,通过对下标变量值的灵活控制,达到灵活处理数组元素的目的。
(3)C++语言只能逐个引用数组元素,而不能一次引用整个数组
例如:int a[100],b[100];a=b;这样的写法是非法的。
(4)数组元素可以像同类型的普通变量那样使用,对其进行赋值和运算的操作,和普通变量完全相同。
例如:c[10]=34;实现了给c [10]赋值为34。
例5.1数组逆序重放
将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1,要求改为1,4,5,6,8。
【样例输入】
5
8 6 5 4 1
【样例输出】
1 4 5 6 8
【参考程序】
#include<iostream>
#include<cstdio>
using namespace std;
int a[1001];
int main()
{
int n,t;
cin>>n;
for (int i=1;i<=n;++i)
{
cin>>a[i];
}
for (int i=1;i<=n/2;++i) //交换要n/2次
{
swap(a[i],a[n+1-i]); //a[i]和a[n+1-i]交换
}
for (int i=1;i<=n;++i)
{
cout<<a[i]; //输出逆序后的数组
}
return 0;
}
第二节 二维数组
一、二维数组的定义
当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。二维数组定义的一般格式:
数据类型 数组名[常量表达式1[常量表达式2]﹔
例如:int a[4][10];
a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的a[0][0],第n行第m列对应数组元素a[n-1][m-1]。
说明:当定义的数组下标有多个时,我们称为多维数组,下标的个数并不局限在一个或两个,可以任意多个,如定义一个三维数组a和四维数组b:
int a[100][3][5];
int b[100][100][3][5];
多维的数组引用赋值等操作与二维数组类似。
二、二维数组元素的引用
二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用必须给出两个下标。
引用的格式为:
<数组名>[下标1][下标2]
说明:显然,每个下标表达式取值不应超出下标所指定的范围,否则会导致致命的越界错误。
例如,设有定义:int a[ 3][5];
则表示a是二维数组(相当于一个3*5的表格),共有3*5=15个元素,它们是:
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
因此可以看成一个矩阵(表格),a[2][3]即表示第3行第4列的元素。
例5.2矩阵加法
输入两个3行3列的矩阵A和B,输出它们的和A+B。
【样例输入】
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
7 8 9
【样例输出】
2 4 6
5 7 9
8 10 12
【参考程序】
#include <iostream>
using namespace std;
int main() {
int n,m,a[5][5],b[5][5];
for (int i=1;i<=3;i++){
for (int j=1;j<=3;j++){
cin>>a[i][j];
}
}
for (int i=1;i<=3;i++){
for (int j=1;j<=3;j++){
cin>>b[i][j];
}
}
for (int i=1;i<=3;i++){
for (int j=1;j<=3;j++){
cout<<a[i][j]+b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
第三节 字符数组
一、字符数组
无论数组的下标有几个,类型如何,但数组中全体元素的类型必须相同。数组元素的类型可以是任何类型,当它是字符型时,我们称它为字符数组。字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。字符数组也有一维、二维和三维之分。
二、字符数组的定义
字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。具体格式如下:
[存储类型] char 数组名[常量表达式1]…
例如:
char ch1[5]; //数组ch1是一个具有5个字符元素的一维字符数组
char ch2[3][5]; //数组ch2是一个具有15个字符元素的二维字符数组
三、字符数组的函数
| 1 | gets(s1); 输入一行字符到字符数组s1。 |
| 2 | puts(s1); 输出字符数组s1 |
| 3 | strcpy(s1, s2); 复制字符数组 s2 到字符数组 s1。 |
| 4 | strcat(s1, s2); 连接字符数组 s2 到字符数组 s1 的末尾。 |
| 5 | strlen(s1); 返回字符数组 s1 的长度。 |
| 6 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 |
例5.3第二个字符
输入含空格的一行字符,输出第二个字符。
【样例输入】
Ce 78
【样例输出】
e
【参考程序】
#include <iostream>
using namespace std;
int main() {
char a[100];
cin.getline(a,100);
cout<<a[1];
return 0;
}
第四节 字符串
- 字符串
C++ 标准库提供了 string 类类型,字符串,就是由字符连接而成的序列。字符串用于存储文本。
- 字符串的定义
字符串定义同于一般整形变量。例如:string str1;
- 字符串的函数
| 1 | getline(cin,s1); 输入一行字符到字符串s1。 |
| 2 | s1.find(s2,n); 从索引为n的位置开始,查找字符串s1中的子串s2 |
| 3 | s1.erase(2,4); 从索引号2开始,删除4个字符 |
| 4 | s1.insert(2,”love”); 从索引号2开始,加入love |
| 5 | s1.size(); 返回字符串 s1 的长度。 |
| 6 | s2.swap(s1); 交换s1,s2两个字符串变量的内容 |
例5.4 小写转化为大写
把一个含空格的字符串中出现的小写字母转换为大写字母
【样例输入】
Xiao mai
【样例输出】
XIAO MAI
【参考程序】
#include <iostream>
using namespace std;
int main() {
string s;
int n;
getline(cin,s);
n=s.size();
for (int i=0;i<n;i++){
if (s[i]>='a' && s[i]<='z'){
s[i]=s[i]-32;
}
}
cout<<s;
return 0;
}
第六章 函数与结构体
第一节 函数
- 函数
函数是一个代码块,它只在被调用时运行。可以将数据(称为参数)传递到函数中。函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,然后多次使用。
函数还有很多叫法,比如方法、子例程或程序,等等。
- 函数的定义
返回类型 函数名称(参数列表)
{
函数主体;
}
返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数列表:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
- 函数的调用
调用原则:①先定义后调用。②定义前调用,则需在调用前声明。
声明的函数不会立即执行。它们被保存以备以后使用,并将在稍后调用时执行。
要调用函数,写函数名,后跟两个圆括号()和分号;
例6.1 两个整数之和
输入两个整数,用函数方法计算两个整数的和。
【样例输入】
6 9
【样例输出】
15
【参考程序】
#include <iostream>
using namespace std;
int sum(int a,int b){
int c;
c=a+b;
return c;
}
int main() {
int n,m,s;
cin>>n>>m;
s=sum(n,m);
cout<<s;
return 0;
}
第二节 结构体
- 结构体
结构体(struct),可以看做是一系列称为成员元素的组合体。可以看做是自定义的数据类型。
- 结构体的定义
结构体定于与函数类似,定义在主函数外。
struct 结构体名{
成员表;
成员函数;
}结构体变量表; //可以同时定义多个结构体变量,也可以没有
- 结构体的调用
结构体变量与各个成员之间引用的一般形式为:
结构体变量名.成员名
结构体成员函数调用的一般形式为:
结构体变量名.成员函数
例6.2 谁的年龄大
输入两名学生的名字和年龄,输出两名学生中年龄比较大的名字
【样例输入】
Xiao 14
Tian 15
【样例输出】
Tian
【参考程序】
#include <iostream>
using namespace std;
struct stu{
string name;
int age;
};
int main(){
stu s1,s2;
cin>>s1.name>>s1.age;
cin>>s2.name>>s2.age;
if (s1.age>s2.age){
cout<<s1.name;
}else{
cout<<s2.name;
}
return 0;
}