Day 03 程序流程结构

C/C++中支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足(条件判断),有选择的执行相应的语句功能
  • 循环结构:依据条件是否满足(条件判断),循环多次执行某段代码
一、选择结构
1. if语句

作用:执行满足条件的语句。三种形式:

单行格式if语句

多行格式if语句

多条件的if语句

1.1 单行格式的if语句:

if(条件){条件满足需要执行的语句};

int a = 0;
cout << "请输入分数:"<< endl;
cin >> a;
cout << "用户分数为:"<< a << endl;

if(a > 60)
{
    cout << "学生及格了" << endl;
}
cout << "结束" << endl;
1.2 多行格式if语句:

if(条件){条件满足需要执行的语句} else{不满足执行的语句};

if(a > 60)
{
    cout << "学生及格了" << endl;
}
else
{
    cout << "不及格" << endl;
}
1.3 多条件的if语句:

if(条件1){条件1满足需要执行的语句} else if (条件2){满足条件2需要执行的语句}…else{条件都不满足需要执行的语句};

if(a > 90)
{
    cout << "学生优秀" << endl;
}
else if(a > 60)
{
    cout << "学生及格" << endl;
}
...
else
{
    cout << "不及格" << endl;
}

else if(),可以写无数个,用else收尾,前面的都不满足

1.4 嵌套if:

if中嵌套使用if。

if(条件1){if(条件2){条件1和2都满足需要执行的语句};条件1满足需要执行的语句};

作用:可以达到更精准的判断

if(a > 60)
{
    cout << "学生及格了" << endl;
    if(a > 90)
    {
    cout << "学生很优秀" << endl;
    }
    else(a > 80)
    {
        cout << "学生良好" << endl;
    }
}
例子1:

三个苹果重量比较,看哪个苹果重,分别输入三个苹果的重量,判断哪个苹果最重?

int a = 0;
int b = 0;
int c = 0;
cout << "请输入第一个苹果的重量:"<< endl;
cin >> a;
cout << "请输入第二个苹果的重量:"<< endl;
cin >> b;
cout << "请输入第三个苹果的重量:"<< endl;
cin >> c;
if(a > b)
{
    if(a > c)
    {
        cout << "第一个苹果最重" << endl;
    }
    else
    {
        cout << "第三个苹果最重" << endl;
    } 
}
else
{
    if(b > c)
    {
        cout << "第二个苹果最重" << endl;
        break;
    }   
    else
    {
        cout << "第三个苹果最重" << endl;
    } 
}
2. 三目运算符:

作用:通过三目运算符实现简单的判断。表达式1?表达式2:表达式3

若表达式1的值为真,则执行表达式2,并返回表达式2的结果;

若表达式1的值为假,则执行表达式3,并返回表达式3的结果。

int a = 1;
int b = 0;
a < b ? a : b;//返回a与b中的最小值
//若a<b,则返回a,反之返回b
(a < b ? a : b) = 7;//小值赋值7

三目运算符的返回值是变量,可以继续赋值

3. switch语句:

作用:执行多条件分支语句。

switch(表达式)
{
        case 结果1:执行语句1;break;
        case 结果2:执行语句2;break;
        case 结果3:执行语句3;break;
        ...
        default:执行语句;break;    
        
}
char a = 'Z';
cout << "请输入等级:"<< endl;
cin >> a;
cout << "用户等级为:"<< a << endl;
switch(a)
{
    case A: 
        cout << "学生十分优秀!" << endl;
        break;
    case B:
        cout << "学生优秀!" << endl;
        break;
    case C:
        cout << "学生较好!" << endl;
        break;
    case D:
        cout << "学生及格!" << endl;
        break;
    default:
        cout << "学生不及格!" << endl;
        break;    
        
}

注:在判断分支时,只能是整型或字符型,不能是区间,但是结构清晰,执行效率高。

二、循环结构
1. while循环语句

作用:满足循环条件,执行循环语句。while(循环条件){循环语句}

int a = 0;
//打印0-9
while(a < 10) //a<10,就执行下面循环体中的循环语句
{
    cout << a << endl;
    a++;
}

只要循环条件为真,就可以一直执行循环语句,知道循环条件为假,就跳出循环。避免死循环的出现(循环条件永为真)

例子2:

猜数字,系统会随机生成0-100的字,玩家进行猜测,若猜错,提示玩家过大还是过小,如果猜对提示玩家胜利!并退出游戏

int a = 0;
int b = rand()%100;//随机生成0-100的数字
while(1)
{
    cout<<"请输入猜测数字"<<endl;
    cin>>a;
    if(a < b)
    {
        cout << "结果过小" << endl;
    }
    else if(a>b)
    {
        cout << "结果过大" << endl;
    }
    else
    {
        cout << "恭喜!猜对了" << endl;
        break;
    }
}

可以添加随机数种子,利用当前系统实践生成随机数,防止每次随机数都一样

#include <ctime>//使用time,需要引入头文件
srand((unsigned int)time(NULL))
2. do while循环

do{循环语句}while(循环条件)

int a = 0;
do
{
    cout << a << endl;
    a++;
} while(a < 10) //a<10,就继续执行上面循环体中的循环语句

先执行再判断,会先执行一次(至少会执行一次

例子3:

水仙花数,水仙花数是指一个三位数,它的每个位数上的数字的3次幂之后等于它本身,求出所有三位数中的水仙花数。

int a = 100;
do
{
    int a1 = 0;
    int a2 = 0;
    int a3 = 0;
    a1 = a%10;
    a2 = a/10%10;
    a3 = a/100;
    if((a1*a1*a1+a2*a2*a2+a3*a3*a3)==a)
    {
        cout << a << endl;
    }
    a++;
}while(a<1000);
3. for循环语句

for(起始表达式;条件表达式;变化操作){循环体循环语句}

for(int i=0;i<10;i++)
{
    cout << i << endl;
}

起始表达式可以省略,末尾表达式(变化操作)可以省略,写在循环体中即可。

例子4:

敲桌子,报数1-100,如果数字各位包含数字7或者是7的倍数,则输出敲桌子,其余正常输出。

for(int i =1;i<=100;i++)
{
    if(((i%7)==0)||((i%10)==7)||((i/10)==7))
    {
        cout<<"敲桌子"<<endl;
    }
    else
    {
        cout<<i<<endl;
    }
}
5. 嵌套循环

在循环体中再写一个循环。

//打印10x10的*
//外层循环
for(int i=0;i<10;i++)
{//内层循环
    for(int j=0;j<10;j++)
    {
    cout << "* " ;
    }
    cout <<  endl;
}

外层执行一次,内层循环执行一周。

例子5:

乘法口诀表输出。

for(int i=1;i<=9;i++)
{
    for(int j=1;j<=i;j++)
    {
        cout<<i<<"x"<<j<<"="<<(i*j)<<" ";
    }
    cout<<endl;
}
三、跳转语句
1. break语句

用于跳出选择结构或者循环结构

使用时机:

  • switch中,终止case并跳出swtich
  • 循环语句中,跳出当前整个循环
  • 嵌套循环中,跳出最近的内层循环语句
//switch中
switch(a)
{
    case A: 
        cout << "学生十分优秀!" << endl;
        break;  // 跳出switch,若不加,则会顺序执行后续的case
    case B:
        cout << "学生优秀!" << endl;
        break;
    default:
        cout << "学生不及格!" << endl;
        break;      
}
//循环语句中
for(int i=0;i<10;i++)
{//当i=7时,跳出循环,不再输出,即7及以后不打印
    if(i == 7)
    {
        break;
    }  
    cout << i << endl;
}
//嵌套循环中:
for(int i=0;i<10;i++)
{//内层循环
    for(int j=0;j<10;j++)
    {
        //i=7,则跳出for循环,每行只输出7个*
        if(i == 7)
        {
            berak;
        }
        cout << "* " ;
    }   
    cout <<  endl;
}
2. continue语句

在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环。

for(int i=0;i<10;i++)
{//当i=7时,跳出本次循环,即7不打印,但会打印后续的
    if(i == 7)
    {
        continue; // 若执行到此,本次循环的后续执行语句跳过,进入下一次循环
    }  
    cout << i << endl;
}
3. goto语句

可以无条件跳转语句。goto 标记;。若标记的名称存在,执行到goto语句时,会跳转到标记的位置。

goto PZ;//遇到这里时,直接跳到PZ去执行,中间的跳过不执行
...
...    
PZ:
...

功能过于厉害,不建议使用,代码不够简明,流程混乱。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐