4.程序流程结构(黑马C++笔记)
4.1 选择结构
4.1.1 if语句
- 单行格式if语句
- 多行格式if语句
if(条件){}else{}
- 多条件if语句
if(条件){}if else(){}else{}
- 嵌套if语句(更精准的条件判断)
#include<bits/stdc++.h>
using namespace std;
int main()
{
//分数大于600上一本,大于500考二本,大于400考三本,其余视为未考上本科
//一本中大于700考清华,大于650考北大,大于600考人大
int score;
cout<<"请输入您的高考成绩:"<<endl;
while(cin>>score)
{
if(score>600)
{
if(score>=700)
{
cout<<"恭喜考入清华"<<endl;//TODO
}
else if(score>=650&&score<700)
{
cout<<"恭喜考入北大"<<endl;
}
else
{
cout<<"恭喜考入人大"<<endl;
}
}
else if(score>=500&&score<600)
{
cout<<"恭喜考入B站大学"<<endl;
}
else
{
cout<<"恭喜你还活着,有机会打败上面的人."<<endl;
}
}
}
注意:是else if & else后面没有条件(4不4洒)
4.1.2 三目运算符
语法:表达式1 ? 表达式2 : 表达式3
#include<bits/stdc++.h>
using namespace std;
int main()
{
//三目运算符
//将a和b作比较,并将大的变量值赋给c
int a=10;
int b=20;
int c=0;
c=(a>b?a:b);//假的所以c=b
cout<<"c="<<c<<endl;
//在C++中三目运算符返回的是变量,可以继续赋值
(a<b?a:b) =100;//真的所以a=100
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
4.1.3 switch语句
作用:执行多条件分支语句
语法:
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
案例:
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<"请给电影打分:";
int score;
while(cin>>score)
{
switch (score)
{
case 10:
cout<<"classic."<<endl;
break;
case 9:
cout<<"classic."<<endl;
break;
case 1:
cout<<"garbage."<<endl;
break;
default:
cout<<"garbage."<<endl;
break;
}
}
}
注意:每一条都有break;
if 和 switch的区别:
switch判断时的缺点:只能是整型或字符型,不能判断区间
switch判断时的优点:结构清晰,执行效率高
4.2 循环结构
4.2.1 while循环语句
案例1:猜数字
#include<bits/stdc++.h>
using namespace std;
#include<ctime>
int main()
{ //添加随机数种子了,作用利用当前系统时间生成随机数,防止每次都一样
srand((unsigned int)time(NULL));
int num = rand()%100+1;//%100生成0-99的随机数(+1之后生成0-100的随机数)
//cout<<num<<endl;
int val;
while(1)
{
cin>>val;
if(val>num)
{
cout<<"大了."<<endl;//TODO
}
else if(val<num)
{
cout<<"小了."<<endl;
}
else
{
cout<<"yep."<<endl;
break;
}
}
}
4…2.2 do-while
语法:do{循环语句}while{循环条件};
与while的区别:do-while会先执行一次循环语句,再判断循环条件
案例2:水仙花数(三位数情况)
获取个位:%10
获取十位:/10 & %10
获取百位:/100
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num=100;
do
{
int a=num%10;
int b=num/10%10;
int c=num/100;
if(num==a*a*a+b*b*b+c*c*c)
{
cout<<num<<endl; //TODO
}
num++;
}while(num<1000);
}
4.2.3 for循环语句
语法:for(起始表达式0(只执行一次);条件表达式1;末尾循环体3){循环语句2}
for(;false;)//不进行循环
执行顺序:0123123123…
案例3:敲桌子
#include<bits/stdc++.h>
using namespace std;
int main()
{
//敲桌子
//1.先输出1-100
//2.找到特殊的数字,改为敲桌子
// 7的倍数(7,14,21,28)%7=0
//十位有7(70,71,72)/10=7
//个位有7(7,17,27)%10=7
for(int i=1;i<=100;i++)
{
if(i%7==0||i/10==7||i%10==7)
{
cout<<"敲桌子"<<endl;//TODO
}
else
{
cout<<i<<endl;//TODO
}
}
}
4.2.4 嵌套循环
案例4:星图
#include<bits/stdc++.h>
using namespace std;
int main()
{
//星图
for(int i=0;i<=10;i++)//外层循环控制列
{
for(int j=0;j<=10;j++)//内层循环控制行
{
cout<<"* ";//TODO
}
cout<<endl;//TODO
}
}
案例5:乘法口诀表
#include<bits/stdc++.h>
using namespace std;
int main()
{
//乘法口诀表
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)//寻找j与i之间的关系
{
cout<<j<<"*"<<i<<"="<<j*i<<" ";
}
cout<<"\n";
}
}
4.3 跳转语句
4.3.1 break语句
作用:跳出选择结构与循环结构
break使用时机:
- switch条件语句中,终止case并跳出switch
- 循环语句中,跳出循环
- 嵌套循环中,跳出最近的内层循环语句
4.3.2 continue语句
作用:再循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
(不会终止循环)
4.3.3 goto语句(不推荐
作用:可以无条件跳转语句
语法:goto 标记
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置