一、C++中的if语句
C++总存在三种结构,分别是:顺序结构、分支结构、循环结构。而所谓的顺序结构,其实就是说,C++中代码的执行是从上往下、顺序执行的(绝大部分编程语言都是这个特点)。而分支结构中,最常用的则是if语句。
1、单if语句
(1)if语句的格式
格式为:
if(判断条件){
代码块;
}
其中:判断条件通常为布尔值或最终运算结果为布尔值的表达式,例如关系表达式。代码块则是需要执行的C++代码。
(2)执行过程
当if语句的判断条件为真时,会执行其中的代码块;如果条件为假,则跳过该代码块,直接执行if语句之后的代码。
例如:
#include<iostream>
using namespace std;
int main()
{
bool is_happy = true;
bool is_bad = false;
if(is_happy==true){
cout<<"今天心情很好"<<endl;
}
if(is_bad==false){
cout<<"今天心情不好。"<<endl;
}
return 0;
}
输出结果为:
今天心情很好
今天心情不好
2、if…else语句
(1)if…else语句格式
if…else语句的格式为:
if(判断条件){
代码块1
}else{
代码块2
}
(2)执行过程
当if语句的判断条件结果为真时,执行代码块1,else代码块中的内容会被忽略;当if语句的判断条件结果为假时,执行else中的代码块2,而代码块1则不执行。
注意:if…else语句中,代码块1和代码块2只会其中执行一个,不可能两个都执行,也不可能两个都不执行。
例如:
#include<iostream>
using namespace std;
int main()
{
int age=10;
if(age>=18){
cout<<"已经成年了。";
}else{
cout<<"还未成年。";
}
}
输出结果为:
还未成年。
else语句不能单独使用,必须要和if语句一起使用,而且一个if只能对应一个else,他们是一一对应的关系。但if语句可以单独使用。
3、if…else if语句
(1)语句格式
if…else if语句格式如下:
if(判断条件A){
代码块1
}else if(判断条件B){
代码块2
}else{
代码块3
}
(2)执行过程
当判断条件A为真时,则执行代码块1,其余的所有代码块都会被忽略;当判断条件A为假时,执行判断条件B,如果判断条件B为真,则执行代码块2,如果条件B为假时,则执行代码块3。
同理,if…else if结构中,也只会执行其中的某一个代码块,其余的代码块则会被忽略。
例如:
#include<iostream>
using namespace std;
int main()
{
int n;
cout<<"请输入一个整数:";
cin>>n;
if(n>0){
cout<<"这是正数";
}else if(n==0){
cout<<"这是0";
}else{
cout<<"这是负数。";
}
}
输出结果:
当输入1时,输出:这是正数
当输入0时,输出:这是0
当输入-2时,输出:这是负数。
当然,if…else if语句并不是只能有1个else if结构,而是可以有多个,例如:
#include<iostream>
using namespace std;
int main()
{
int score;
cout<<"请输入你的分数:";
cin>>score;
if(score>=90){
cout<<"你的成绩等级为A";
}else if(score>=80){
cout<<"你的成绩等级为B";
}else if(score>=70){
cout<<"你的成绩等级为C";
}else if(score>=60){
cout<<"你的成绩等级为D";
}else{
cout<<"你的成绩等级为E";
}
}
而执行过程与if…else if的执行过程相同,从第一个if语句依次往后判断执行,一旦有任何一个if的条件为着,则执行相应代码块,而该结构则运行结束,如果所有if的条件都为假,则执行else语句。
4、if语句嵌套
除了常规的if结构外,还可以将几个结构进行嵌套使用,组成更复杂的分支结构。
例如:
#include<iostream>
using namespace std;
int main()
{
//从键盘输入性别(m代表男性,w代表女性)和年龄,判断是否达到法定结婚年龄
char gender;
int age;
cout<<"请输入你的性别(m代表男性,w代表女性)";
cin>>gender;
cout<<"请输入你的年龄:";
cin>>age;
//男性的法定结婚年龄为22,女性的为20
//先判断性别,在判断年龄
if(gender=='m'){//条件为真,则为男性
//判断是否满22岁
if(age>=22){//条件为真,则达到法定结婚年龄
cout<<"先生,你已达到国家法定结婚年龄。";
}
else{//条件为假,则未到法定结婚年龄
cout<<"先生,你还未到国家法定结婚年龄。";
}
}
else{//条件为假,则为女性
//判断是否满20岁
if(age>=20){
cout<<"女士,你已达到国家法定结婚年龄。";
}
else{
cout<<"女士,你还未到国家法定结婚年龄。";
}
}
}
二、C++中的switch语句
switch语句也是典型的分支结构代表。
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
1、switch语句的语法
switch(表达式1){
case 值A :
代码块1
case 值B :
代码块2
// 可以有任意数量的 case 语句
default : // 可选的
代码块n;
}
2、switch语句的规则
switch 语句必须遵循下面的规则:
- switch 语句中的变量或表达式的结果值必须是一个整型或枚举类型,或者是一个 class 类型,其中 class有一个单一的转换函数将其转换为整型或枚举类型。
- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
- case 后的值必须与 switch中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续执行后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的default语句,出现在switch的结尾。default语句可用于在上面所有case都不为真时执行一个任务。default中的 break 语句不是必需的。
3、switch案例
典型案例:输入年份和月份,判断该月有多少天。
实现代码:
#include<iostream>
using namespace std;
int main()
{
//从键盘输入年份和月份,判断这个月有多少天
int year,month;
cout<<"请输入年份:\n";
cin>>year;
cout<<"请输入月份:\n";
cin>>month;
//判断月份对于的天数,所以判断条件是月份
switch(month){
//case后的值即为month对应的所有可能的情况
case 1:
cout<<"这个月有31天。"<<endl;//一月
break;
//二月,二月份比较特殊,闰年29天,平年28天,所以需要判断是否为闰年
//闰年判断条件:能被4整除,不能被100整除;或者能被400整除
case 2:
if(year%4==0&&year%100!=0||year%400==0){
cout<<"这个月有29天。"<<endl;
}
else{
cout<<"这个月有28天。"<<endl;
}
break;
case 3:
cout<<"这个月有31天。"<<endl;//三月
break;
case 4:
cout<<"这个月有30天。"<<endl;//四月
break;
case 5:
cout<<"这个月有31天。"<<endl;//五月
break;
case 6:
cout<<"这个月有30天。"<<endl;//六月
break;
case 7:
cout<<"这个月有31天。"<<endl;//七月
break;
case 8:
cout<<"这个月有31天。"<<endl;//八月
break;
case 9:
cout<<"这个月有30天。"<<endl;//九月
break;
case 10:
cout<<"这个月有31天。"<<endl;//十月
break;
case 11:
cout<<"这个月有30天。"<<endl;//十一月
break;
case 12:
cout<<"这个月有31天。"<<endl;//十二月
break;
default:cout<<"你输入的月份有误。"<<endl;
}
}
该例子还可以使用简化版来实现,代码如下:
#include<iostream>
using namespace std;
int main()
{
//从键盘输入年份和月份,判断这个月有多少天
int year,month;
cout<<"请输入年份:\n";
cin>>year;
cout<<"请输入月份:\n";
cin>>month;
//判断月份对于的天数,所以判断条件是月份
switch(month){
//case后的值即为month对应的所有可能的情况
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout<<"这个月有31天。"<<endl;//一月
break;
//二月,二月份比较特殊,闰年29天,平年28天,所以需要判断是否为闰年
//闰年判断条件:能被4整除,不能被100整除;或者能被400整除
case 2:
if(year%4==0&&year%100!=0||year%400==0){
cout<<"这个月有29天。"<<endl;
}
else{
cout<<"这个月有28天。"<<endl;
}
break;
case 4:
case 6:
case 9:
case 11:
cout<<"这个月有30天。"<<endl;//三月
break;
default:cout<<"你输入的月份有误。"<<endl;
}
}
简化版其实就是使用break语句,控制何时结束switch,将相同情况的月份放到一起进行判断。
三、条件运算符
条件运算符的格式为:
表达式1?表达式2:表达式3
请注意冒号的使用和位置。条件表达式的值取决于表达式1的计算结果。如果表达式1为真,则计算表达式2 的值,且表达式2的计算结果则为整个条件表达式的值。如果表达式1为假,则计算表达式3 的值,且表达式3的计算结果则为整个条件表达式的值。
条件运算符被称为三元运算符,因为它需要三个操作数,可以用来替代if…else语句。例如:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3;
if(a>b){
cout<<a;
}
else{
cout<<b;
}
}
使用条件表达式的写法如下:
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3;
a>b?cout<<a:cout<<b;
}
在许多时候使用条件运算符会使代码更简洁。
四、while循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
C++中的循环主要有while循环、do while循环、for循环等。
1、while循环的语法
C++中while循环的语法:
while(循环条件){
代码块
}
其中,循环条件可以是任意的表达式(但最好使用布尔表达式)。代码块可以是一行代码,也可以是多行代码。只有当循环条件为真时循环才执行。当条件为假时,则结束循环。
2、实例
(1)实例1
#include<iostream>
using namespace std;
int main()
{
//计算1-10的和
int i=1,sum=0;
//要计算1-10的和,所以i的值最大应该要能够等于10
while(i<=10){
//循环体
//每循环一次,将i的值加1,并计算和
sum = sum + i;
i++;
//注意i自增和求和两个表达式的顺序,顺序相反会得到不一样的值。
}
//循环结束,输出最后计算的和
cout<<"1-10的和为:"<<sum;
}
输出结果为:
1-10的和为:55
同时,还可以使用简化写法:
#include<iostream>
using namespace std;
int main()
{
//计算1-10的和
int i=1,sum=0;
//要计算1-10的和,所以i的值最大应该要能够等于10
while(i<=10){
//循环体
//每循环一次,将i的值加1,并计算和
sum = sum + i++;
//i++;
//注意i自增和求和两个表达式的顺序,顺序相反会得到不一样的值。
}
//循环结束,输出最后计算的和
cout<<"1-10的和为:"<<sum;
}
但简 化写法的代码可读性不高,所以不推荐。
五、do…while循环
do…while 循环是在循环的最后检查它的条件。
do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。
1、do…while循环的语法
C++ 中 do…while 循环的语法:
do{
代码块
}while(循环条件);
do…while循环会限制性循环中的代码块,执行完代码块后再执行循环条件判断,如果条件为真,则继续循环,如果条件为假,则循环结束。因此:do…while循环至少会执行1次。
2、实例
#include<iostream>
using namespace std;
int main()
{
//输出1-20之间所有的偶数
int i=1;
//进入循环
do{
//判断是否为偶数
if(i%2==0){
cout<<i<<" ";
}
//改变i的值
i++;
} while(i<=20);
}
六、for循环
for循环是C++中用的非常多的一种循环结构。
1、for循环的语法
for循环的语法结构如下:
for(表达式A;表达式B;表达式C){
代码块
}
其中:
- 表达式A主要用于初始化循环变量,例如while循环中的
int i=1;
而且可以同时初始化多个变量,例如:int i=1,j=2;
- 表达式B扮演循环条件的角色,和while循环的循环条件写法一致。
- 表达式C用于改变循环变量的值,同时,表达式C中可以包含多个表达式,例如:
i++,j++;
2、for循环的执行过程
执行过程:
(1)先执行表达式A,初始化变量;
(2)执行表达式B,判断循环条件,如果结果为真,则执行循环体;如果结果为假,则结束循环。
(3)循环体执行结束后,执行表达式C,改变循环变量的值。
(4)继续执行表达式B,判断循环条件,如果结果为真,则执行循环体;如果结果为假,则结束循环。
(5)重复(2)(3)(4)步操作,直到循环结束。
3、实例
#include<iostream>
using namespace std;
int main()
{
//输出1-100的和
int sum=0;
for(int i=1;i<=100;i++){
sum = sum + i;
}
cout<<"1-100的和为:"<<sum;
}
输出结果为:
1-100的和为:5050
七、嵌套循环
所谓嵌套循环,即是在一个循环内部嵌套另一个循环。
嵌套循环的语法:
循环1{
循环2{
...
循环n{
}
}
}
其中,最常见的嵌套循环为双层循环,即循环嵌套一次。多重循环的嵌套可能会导致程序运行时间过长,所以需要慎用。
经典案例:
1、打印九九乘法表
#include<iostream>
using namespace std;
int main()
{
//打印九九乘法表
/*
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
.......
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
*/
//九九乘法表其实是一个等腰直角三角形,可以看做是由行和列组成
/*行列关系:
行数 列数
1 1
2 2
3 3
4 4
... ...
9 9
*/
//因此,可以使用双层循环实现,一层循环表示行,一层循环表示列,即可打印。
//最小数值为1,最大为9,依次递增
//打印完一整行之后进行换行,所以应该在外层循环中打印换行符
for(int i=1;i<=9;i++){//表示行
//第一行有1列,第二行有2列,以此类推
for(int j=1;j<=i;j++){//表示列
//打印乘法算式:需要注意是i在前,还是j在前
cout<<j<<"x"<<i<<"="<<i*j<<" ";
}
cout<<"\n";
}
}
2、求质数(素数)
#include<iostream>
using namespace std;
int main()
{
//打印1-100之间所有的质数
//质数(素数):只有1和这个数本身能被它自己整除的数叫做质数,例如2,3,5,7,11等
/*解题思路:要判断一个数是否为质数,需要将所有小于这个数本身的正整数和它相除,
如果没有任何一个能够除尽,则说明这个数是质数,否则,便不是质数。
使用双层循环进行解题,外层用于控制规定的范围1-100,内层用于判断是否为质数
*/
//1既不是质数,也不是合数,所以1不需要进行判断,初值为2即可
for(int i=2;i<=100;i++){//控制范围
//由于任何一个数和1相除都能除尽,所以1没有判断的意义,直接从2开始即可
//定义布尔变量flag代表是否为质数
bool flag=false;
for(int j=2;j<i;j++){//判断是否为质数
//判断时,将2至i之间所有数与i进行取余,如果余数为0,则表示能除尽,不为0,则表示除不尽。
//而一旦有任意一个数能被i除尽,则说明这个i不是质数
if(i%j==0){
//能除尽,则不是质数,没有继续判断的必要,结束循环
//不是质数,将flag值改为true
flag=true;
break;
}
}
//如果flag值为true,则说明i不是质数,flag为false,则说明内层循环的if语句一次都没有触发,说明是质数
if(!flag){
cout<<i<<" ";
}
}
}
八、循环控制语句:break和continue
循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。主要的循环控制语句有break和continue两种。
1、break的用法
C++ 中 break 语句有以下两种用法:
- 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
- 它可用于终止 switch语句中的一个 case。
- 如果是在嵌套循环中使用break,则只会结束break所在的那一层循环,并不影响其他的循环。
例如:
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=100;i++){
cout<<i<<" ";
//添加break语句
break;
}
}
输出结果为:
1
当程序运行遇到break时,for循环会立即结束,所以只输出了一次。
但很少会这么用break语句,通常是结合if语句来使用,例如:
#include<iostream>
using namespace std;
int main()
{
//输出1-100的和
int sum=0;
int i=1;
while(true){
sum = sum + i;
i++;
if(i>100){
break;
}
}
cout<<"1-100的和为:"<<sum;
}
输出结果为:
1-100的和为:5050
2、continue的用法
C++ 中 continue语句有点类似break语句。但它不是强迫终止,continue会跳过当前循环中的代码,强迫开始下一次循环。
例如:
#include<iostream>
using namespace std;
int main()
{
//输出1-50之间偶数的和
int sum=0;
int i=0;
while(i<=50){
i++;
if(i%2!=0) {
continue;
}
sum = sum + i;
}
cout<<"1-50的偶数和为:"<<sum;
}
输出结果:
1-50之间的偶数和为:650
每当执行到continue时,continue之后的语句都不会再继续执行,而是直接回到循环的开头,重新开始一次新的循环。文章来源:https://www.toymoban.com/news/detail-760144.html
3、break和continue的区别
break语句用于结束整个循环结构,而continue语句则只是结束循环当中的某一次循环,加快循环的进程,并不会直接结束整个循环结构。文章来源地址https://www.toymoban.com/news/detail-760144.html
到了这里,关于C++初级教程(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!