(1)语句是C++程序中的基本功能单元,任何一条C++语句都会为完成某项任务而进行相关操作。
(2)C++语句通常以分号作为结束标志。
(3)C++语句按照不同功能大体分为6种类型:
①声明语句:用于对程序中的各种实体进行声明、定义及初始化。
②表达式语句:用于对程序中的数据进行具体操作和处理。
③选择语句:用于实现程序的选择结构。
④循环语句:用于实现程序的循环结构。
⑤跳转语句:用于实现程序执行流程的转移。
⑥复合语句:用于表示程序中的语句块。
(4)应当指出的是,C++中并不存在赋值语句和函数调用语句,赋值和函数调用都属于表达式而不是语句。
(1)顺序结构:按照先后顺序依次执行程序中的语句。
(2)选择结构:按照给定条件有选择地执行程序中的语句。
(3)循环结构:按照给定规则重复地执行程序中的语句。
(1)顺序结构是C++程序中执行流程的默认结构,在一个没有选择和循环结构的程序中,语句将按照书写的先后顺序,从左至右、自上而下依次执行。
(2)除了选择、循环和跳转语句外,其它C++语句都可以看作实现程序顺序结构的语句。
(1)声明语句又称为说明语句,它可以用来对程序中出现的各种名称进行声明,这些名称通常是表示变量、常量、函数、结构、类、对象等实体的标识符。在C++程序中,一个名称在使用之前必须先被声明。
(2)声明语句可以完成的工作不仅仅局限于为名称指定类型,大多数声明语句同时也是定义语句,所谓定义就是对某个名称所指代的实体进行具体描述。
(3)使用声明语句能够在程序中进行如下操作:
①变量声明。
int a; //声明和定义int型变量
int b = 2; //声明、定义和初始化int型变量
extern char c; //声明char型变量
②常量声明。
const int MAX_LEN = 100; //声明、定义和初始化int型常量
const float pi = 3.14f; //声明、定义和初始化float型常量
③函数声明。
double sqrt(double); //声明函数
int max(int a, int b) { return a > b ? a : b; } //声明和定义函数
④类型声明。
typedef unsigned int id; //声明和定义类型
enum color {red, green}; //声明和定义枚举
struct date { int year; int mouth; int date; }; //声明和定义结构
class Employee; //声明类
(4)一个实体的定义只能出现一次,而其声明却可以出现多次。
(1)在任何合法的C++表达式后面添加一个分号便构成了一条表达式语句。
(2)使用表达式语句可以进行的操作通常包括:
①赋值操作。
int a;
a = 5; //将a赋值为2
int b = 2;
a = a + b; //将a+b的计算结果赋给a
②复合赋值操作。
int a = 0;
a += 5; //将a+5的计算结果赋给a
int b = 2;
b *= a; //将b*a的计算结果赋给b
③增量、减量操作。
int a = 0;
a++; //a自增1,相当于把a+1的计算结果赋给a
int b = 2;
b--; //b自减1,相当于把b-1的计算结果赋给a
④函数调用操作。
int x = 10;
float a = 6.28f;
abs(x); //调用函数abd
sqrt(100); //调用函数sqrt
fun(a, 20);//调用函数fun
⑤输入输出操作。
int a = 0;
a++;
int b = 2;
b--;
cout << a + b << endl; //输出a+b的值
cin >> a >> b; //输入数据到a和b
(1)在头文件iostream中定义了代表屏幕的标准输出流对象cout和代表键盘的标准输入流对象cin。
(2)使用cout进行数据输出操作的一般格式为:
cout << Expr;
①Expr代表一个表达式,“<<”称为插入运算符。
②整条语句的语意是:将表达式Expr的值输出(显示)到屏幕上当前光标所在位置。
③cout可以用来对C++中所有的常用数据类型进行输出。
④cout还允许在一条语句中连续使用插入运算符来输出多项数据。
⑤C++中提供了两种进行换行输出的方法,一种是使用换行字符“’\n’”,另一种是使用输入/输出操作符endl。
(3)使用cin进行数据输入操作的一般格式为:
cin >> Var;
①Var代表一个变量,“>>”称为提取运算符。
②整条语句的语意是:程序将暂时停止执行,等待用户从键盘上输入一个数据,如果用户键入了一个有效地数据并按下了回车键,程序就将此数据保存到变量Var中,并继续执行后续语句。
③cin可以用来对C++中所有的常用数据类型进行输入。
④cin还允许在一条语句中连续使用提取运算符来输入多项数据。
(4)举例:
#include
using namespace std;
#include //在用C++风格字符串时要有这个头文件
int main() {
//1、整型
int a = 0;
cout << "请给整型变量a赋值:" << endl;
cin >> a;
cout << "a的值现在为:" << a << endl;
//2、浮点型
float f = 3.14f;
cout << "请给浮点型变量f赋值:" << endl;
cin >> f;
cout << "f的值现在为:" << f << endl;
//3、字符型
char ch = 'a';
cout << "请给字符型变量ch赋值:" << endl;
cin >> ch;
cout << "ch现在为:" << ch << endl;
//4、字符串型
string str = "abc";
cout << "请给字符串型变量str赋值:" << endl;
cin >> str;
cout << "str现在为:" << str << endl;
//5、布尔类型
bool flag = false;
cout << "请给布尔类型变量flag赋值:" << endl;
cin >> flag; //输入1或0,不过实际上只要是输入非0值都认为是真值
cout << "flag的值现在为:" << flag << endl;
system("pause");
return 0;
}
(1)复合语句又称为块语句,它是用一对花括号“{}”将若干条语句包围起来而组成的一条语句,其语法格式为:
{
<语句1>
<语句2>
…
<语句n>
}
(2)复合语句可以作为以下成分出现在程序中:
①函数的函数体。
②循环语句的循环体。
③if语句的分支。
④switch语句的执行部分。
(3)空语句是一种特殊的表达式语句,它只由一个分号组成,不会产生任何动作,不过在某些场合下它可以作为占位符(作用等同于Python中的pass)。
(1)基本if语句:根据给定条件是否成立来决定要不要执行一条语句或语句块。
if(条件)
{
条件满足执行的语句/语句块
}
#include
using namespace std;
int main() {
//选择结构 单行if语句
//用户输入分数,如果分数大于600,视为通过,恭喜他
//1、用户输入分数
int score = 0;
cout << "请输入分数:" << endl;
cin >> score;
//2、打印用户输入的分数
cout << "您输入的分数为:" << score << endl;
//3、判断分数是否大于600,如果大于600,就恭喜他
if (score > 600) //if语句后面不加分号;括号内的表达式值非零(即条件成立,或者说为真值)则执行下面的语句,否则跳过
{
cout << "恭喜你" << endl;
} //如果分数小于等于600,不会有任何反应
system("pause");
return 0;
}
(2)if…else语句:根据给定条件是否成立来决定执行两部分语句中的哪一部分。
if(条件)
{
条件满足执行的语句
}
else
{
条件不满足执行的语句
}
#include
using namespace std;
int main() {
//选择结构 多行if语句
//用户输入分数,如果分数大于600,视为通过,恭喜他,否则就鼓励他
//1、用户输入分数
int score = 0;
cout << "请输入分数:" << endl;
cin >> score;
//2、打印用户输入的分数
cout << "您输入的分数为:" << score << endl;
//3、判断分数是否大于600,如果大于600,就恭喜他,否则就鼓励他
if (score > 600) //if条件后面不要加分号
{
cout << "恭喜你" << endl;
}
else //不满足if后面的条件时执行else下的语句
{
cout << "再接再厉" << endl;
}
system("pause");
return 0;
}
(3)if语句的嵌套:
if(条件1)
{
条件1满足执行的语句
}
else if(条件2)
{
条件1不满足,条件2满足执行的语句
}
else
{
条件1、条件2不满足执行的语句
}
#include
using namespace std;
int main() {
//选择结构 多条件if语句
//用户输入分数,如果分数大于600,视为考上一本大学
//如果分数大于500但不大于600,视为考上二本大学
//如果分数大于400但不大于500,视为考上三本大学
//1、用户输入分数
int score = 0;
cout << "请输入分数:" << endl;
cin >> score;
//2、打印用户输入的分数
cout << "您输入的分数为:" << score << endl;
//3、先判断是否满足第一个条件,第一个不满足就往下继续判断,第一个满足就执行第一个
if (score > 600) //如果分数大于600,就是考上一本
{
cout << "考上一本" << endl;
}
else if (score > 500) //如果分数只是大于500,就是考上二本
{
cout << "考上二本" << endl;
}
else if (score > 400) //如果分数只是大于400,就是考上三本
{
cout << "考上三本" << endl;
}
else //分数不大于400分就是没考上,鼓励他
{
cout << "再接再厉" << endl;
}
system("pause");
return 0;
}
(1)switch语句又称为开关语句,它也是一种选择语句,根据给定表达式的不同取值来决定从多个语句序列中选择哪一个开始执行,其语法格式如下:
switch(表达式)
{
case 结果1:执行语句; break;
case 结果2:执行语句; break;
...
case 结果n:执行语句; break;
default:执行语句; break; //最后这个break可有可无
}
①switch、case和default都是关键字。
②表达式的值必须属于整型、字符型或枚举型。
③每个case后跟着的结果是取值互不相同的整型常量、字符常量或枚举常量,其具体类型应与switch后面的表达式的值一致。
(2)switch语句的执行过程:
①首先计算出switch后面的表达式的值,设此值为E。
②case后面跟着的结果如果是表达式,先计算出它们的值,设它们分别为、、…、。
③将E依次与、、…、进行比较,如果E与某个值相等,则从该值所在的case标号语句开始执行各个语句序列,直至遇到break语句(在不出现break语句的情况下,将一直执行到switch语句结束)。
④如果E与所有值都不相等且存在default标号,则从default标号语句起开始向下执行,在不出现跳转语句的情况下,一直执行到switch语句结束。
⑤如果E与所有值都不相等且不存在default标号,则switch语句不会执行任何操作。
(3)举例:
#include
using namespace std;
int main() {
//选择结构 switch语句
//给电影进行打分,9~10分为优,7~8分为良,5~6分为中,5分一下为烂片
int score = 0;
cout << "请给电影打分:" << endl; //暂时不考虑小数以及输入无效分数
cin >> score;
switch (score) //将需要判断值的表达式放入括号
{
case 10: //表达式的值为10,执行这一分支
cout << "优" << endl;
break; //退出当前分支,跳出大括号,否则会继续向下执行判断
case 9:
cout << "优" << endl; break;
case 8:
case 7:
cout << "良" << endl; break; //相同结果可以只写一次
case 6:
case 5:
cout << "中" << endl; break;
default :
cout << "这是烂片" << endl; break;
} //switch缺点:只能判断整型或字符型数据,且不可以是区间
system("pause");
return 0;
}
(1)for语句的语法格式:
for(起始表达式; 条件表达式; 末尾循环体)
{
循环语句
}
(2)for语句的执行过程:
①运行起始表达式。
②计算条件表达式的值,如果此值不等于0(即循环条件为“真”)则转向下一步,如果此值等于0(即循环条件为“假”)则结束for循环。
③执行一遍循环体。
④运行末尾循环体,然后转向第二步。
(3)举例:
①例1:
#include
using namespace std;
int main() {
//循环结构 for语句
//从数字0打印到数字9
//int i = 0; 实际上起始的定义变量可以挪到这里写,for语句里就不用写了(但是还是要有分号)
for (int i = 0 ; i < 10 ; i++ )
//第一个是定义变量,只在循环开始前执行一次;第二个是循环条件;第三个表达式每循环一次就执行一次
{
/*
if (i >= 10)
{
break;
}
*/ //在循环语句中通过if语句以及break可以直接终止循环,这样for语句的循环条件也可以不用写
cout << i << endl;
//i++ ; 每循环一次i的值就+1,同样的,这里写了那么for语句那里就可以空着
}
system("pause");
return 0;
}
②例2:
#include
using namespace std;
int main() {
//循环结构 for语句
/*从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数
我们打印敲桌子,其余数字直接打印输出*/
for (int num = 1; num <= 100; num++)
{
if ((num % 10 == 7 )||( num / 10 == 7)||( num % 7 == 0))
{
cout << "敲桌子" << endl;
}
else
{
cout << num << endl;
}
}
system("pause");
return 0;
}
(1)while语句的语法格式:
while(循环条件)
{
循环语句
}
(2)while语句的执行过程:
①判断循环条件是否为真,如果为真(值为非0)则转向下一步,如果为假(值为0)则结束while循环。
②运行循环体,接着转回上一步。
(3)举例:
①例1:
#include
using namespace std;
int main() {
//循环结构 while语句
//在屏幕中打印0 ~ 9,一共10个数字
int num = 0;
while (num < 10) //只要满足条件,那么循环语句会一直反复执行;注意避免死循环 ;while这一行不加分号
{
cout << num << endl;
num++;
}
system("pause");
return 0;
}
②例2:
#include
using namespace std;
#include //time系统时间头文件
int main() {
//循环结构 while语句
//系统随机生成一个1到100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏
//1、系统生成随机数
srand((unsigned int)time(NULL)); //随机数种子,利用当前系统时间生成随机数,防止每次测试随机数都一样
int num = rand() % 101; //生成0 ~ 100(101-1)随机数,赋予变量num
//2、判断玩家的猜测
int val = 0; //玩家输入的数据需要一个新变量储存
cin >> val; //玩家输入数据
cout << num << endl; //为方便测试,这里偷看一下随机数
while (val != num) //如果猜的数和生成的随机数不等,开始循环
{
if (val > num)
{
cout << "数字过大,重新输入" << endl;
}
else
{
cout << "数字过小,重新输入" << endl;
}
cin >> val; //重新输入
}
cout << "恭喜猜对" << endl; //循环结束意味着猜的数和随机数相等,退出循环,恭喜玩家
system("pause");
return 0;
}
(1)do…while语句的语法格式:
do
{
循环语句
} while(循环条件);
(2)do…while语句的执行过程:
①执行一遍循环体。
②判断循环条件是否为真,如果为真(值为非0)则转向上一步,如果为假(值为0)则结束do…while循环。
(3)举例:
①例1:
#include
using namespace std;
int main() {
//循环结构 do while语句
//在屏幕中输出0到9这十个数字
int num = 0;
do //无论如何,先执行一次循环
{
cout << num++ << endl; //输出完num的值后,num的值+1
} while (num < 10); //满足循环条件,回去继续循环;记得加分号,否则无法运行
system("pause");
return 0;
}
②例2:
#include
using namespace std;
int main() {
//循环结构 do while语句
//水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身
//请利用do...while语句,求出所有3位数中的水仙花数
int num = 100;
int a1 = 0;
int a2 = 0;
int a3 = 0;
do //无论如何,先执行一次循环
{
a1 = num % 10; //获取个位数
a2 = (num / 10 )%10; //获取十位数
a3 = num / 100; //获取百位数
if (a1 * a1 * a1 + a2 * a2 * a2 + a3 * a3 * a3 == num)
{
cout << num << "是一个水仙花数" << endl;
}
num++;
} while (num < 1000);
system("pause");
return 0;
}
(1)在一个循环结构中又完整地包含着另一个循环结构,这称为循环的嵌套,C++中三种类型的循环语句都可以相互嵌套,且没有层数的限制。
(2)举例:
①例1:
#include
using namespace std;
int main() {
//循环结构 嵌套循环
//利用嵌套循环打印星图
for (int num = 0; num <= 9; num++) //打印十行
{
for (int i = 0; i <= 9; i++) //打印一行*
{
cout << "* "; //先打印*
}
cout << endl; //印完一行就换行
}
system("pause");
return 0;
}
②例2:
#include
using namespace std;
int main() {
//循环结构 嵌套循环
//利用嵌套循环,实现九九乘法表
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
cout << j << "×";
cout << i << "=" << i * j<<" ";
}
cout << endl;
}
system("pause");
return 0;
}
(1)break语句又称为跳出语句,由关键字break加上一个分号构成。
(2)break语句只能用在switch语句和循环语句中。
①在switch语句中,break用来使执行流程跳出switch语句,而继续执行switch语句之后的语句。
#include
using namespace std;
int main() {
//跳转语句 break语句
//出现在switch语句中
cout << "选择副本难度" << endl;
cout << "1、普通" << endl;
cout << "2、中等" << endl;
cout << "3、困难" << endl;
int select = 0; //创建选择结果的变量
cin >> select; //等待用户输入
switch (select)
{
case 1:
cout << "您选择的是普通难度" << endl; break;
case 2:
cout << "您选择的是中等难度" << endl; break;
case 3:
cout << "您选择的是困难难度" << endl; break;
default:
cout << "你是不是来找茬的?" << endl; break;
}
system("pause");
return 0;
}
②在循环语句中,break用来使执行流程跳出本层循环体(一个break语句只能跳出一层)。
#include
using namespace std;
int main() {
//跳转语句 break语句
//出现在嵌套循环语句中
for (int num = 0; num <= 9; num++) //打印十行
{
for (int i = 0; i <= 9; i++) //打印一行*
{
cout << "* "; //先打印*
if (i == 5 && num == 5)
{
break; //如果i和num都等于5,退出内层循环
}
}
cout << endl; //印完一行就换行
}
system("pause");
return 0;
}
(1)continue语句又称为继续语句,由关键字continue加上一个分号构成。
(2)continue语句只能用在循环语句中,它的功能是跳过循环体中尚未执行的语句并结束本次循环,然后进行下一次是否执行循环的条件判定。
①在while和do…while循环中,continue语句将使执行流程直接跳转到循环条件的判定部分,然后决定循环是否继续进行。
②在for循环中,当遇到continue时,执行流程将跳过循环体中余下的语句,而专区执行for语句中的“末尾循环体”,再根据循环条件的判断以决定循环是否继续进行。
#include
using namespace std;
int main() {
//跳转语句 continue语句
for (int i = 0; i <= 100; i++) //打印0到100
{
if (i % 2 == 0) //如果是偶数,那就不输出,只输出奇数
{
continue; //如果用break,只要遇到1个偶数就退出循环,不会输出后面的数
}
cout << i << endl;
}
system("pause");
return 0;
}
(1)goto语句又称转向语句,其语法格式如下:
goto <标号>;
①goto为关键字,标号是一个由用户命名的标识符。
②在goto语句所处的函数体中必须同时存在一条由标号标记的语句,这种语法结构称为标号语句,其格式为
<标号> : <语句>
(2)goto语句可以很方便地跳出多层循环,但它很容易破坏程序结构,在实际开发中应尽量避免使用goto语句。
(3)举例:
#include
using namespace std;
int main() {
//跳转语句 goto语句
cout << "1、xxxx" << endl;
cout << "2、xxxx" << endl;
goto FLAG;
cout << "3、xxxx" << endl;
cout << "4、xxxx" << endl;
FLAG: //FLAG后面加的是冒号
cout << "5、xxxx" << endl;
system("pause");
return 0;
}
(1)return语句又称返回语句,它有两种语句格式:
①return;
②return <表达式>;
(2)return语句只能用在函数体中。
①在返回类型为void的函数体中,若想跳出函数体,将执行流程转移到调用该函数的位置,应使用return语句的第一种格式(也就是return后面不带表达式的一种)。
②在返回类型不是void的函数体中,应使用(应该是必须使用)return语句的第二种格式(也就是return后面带表达式的一种),使执行流程转移到调用该函数的位置,并将<表达式>的值作为函数的返回值。