C++初级教程(二)

一、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之后的语句都不会再继续执行,而是直接回到循环的开头,重新开始一次新的循环。

3、break和continue的区别

break语句用于结束整个循环结构,而continue语句则只是结束循环当中的某一次循环,加快循环的进程,并不会直接结束整个循环结构

猜你喜欢

转载自blog.csdn.net/qq_43884946/article/details/129697345