从零开始:Qt可视化程序设计基础教程
上QQ阅读APP看书,第一时间看更新

1.7 结构化程序设计

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

顺序结构:程序按顺序执行,不发生语句跳转,此处不单独介绍。

选择结构:根据条件是否满足,有选择地执行相应的代码。

循环结构:根据条件是否满足,循环多次执行某段代码。

· 1.7.1 选择结构

1.if语句

作用:执行满足条件的语句。

if语句的3种形式如下。

单行格式if语句。

多行格式if语句。

多条件的if语句。

(1)单行格式if语句:if(条件){条件满足时执行的语句},流程如图1-30所示,使用方法见例1-15。

图1-30 单行格式if语句条件判断流程

例1-15:单行格式if语句。

    #include <iostream>
    using namespace std;
    int main() {
       //选择结构—单行格式if语句
       //输入一个分数,如果分数大于600分,视为考上本科第一批录取的大学(一本大学),并输出
       int score = 0;
       cout << "请输入一个分数:" << endl;
       cin >> score;
       cout << "您输入的分数为: " << score << endl;
       //if语句
       //注意事项:在if判断语句后面不要加分号
       if (score > 600)
       {
           cout << "我考上了一本大学!!!" << endl;
       }
       return 0;
    }

例1-15运行结果如图1-31所示。

注意:if条件表达式后不要加分号。

(2)多行格式if语句:if(条件){条件满足时执行的语句}else{条件不满足时执行的语句},流程如图1-32所示,使用方法见例1-16。

图1-31 例1-15运行结果

图1-32 多行格式if语句条件判断流程

例1-16:多行格式if语句。

    #include <iostream>
    using namespace std;
    int main() {
       int score = 0;
       cout << "请输入考试分数:" << endl;
       cin >> score;
       if (score > 600)
       {
           cout << "我考上了一本大学" << endl;
       }
       else
       {
          cout << "我未考上一本大学" << endl;
       }
       return 0;
    }

例1-16运行结果如图1-33所示。

(3)多条件的if语句:if(条件1){条件1满足时执行的语句}else if(条件2){条件2满足时执行的语句}...else{都不满足时执行的语句},流程如图1-34所示,使用方法见例1-17。

图1-33 例1-16运行结果

图1-34 多条件的if语句条件判断流程

例1-17:多条件的if语句。

    #include <iostream>
    using namespace std;
    int main() {
       int score = 0;
       cout << "请输入考试分数:" << endl;
       cin >> score;
       if (score > 600)
       {
           cout << "我考上了一本大学" << endl;
       }
       else if (score > 500)
       {
           cout << "我考上了二本大学" << endl;
       }
       else if (score > 400)
       {
           cout << "我考上了三本大学" << endl;
       }
       else
       {
           cout << "我未考上本科" << endl;
       }
       return 0;
    }

例1-17运行结果如图1-35所示。

总结:在if语句中,可以嵌套使用if语句,以达到更精确的条件判断。

2.三目运算符

作用:通过三目运算符实现简单的判断。

语法:表达式1 ?表达式2:表达式3。

解释:如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果。

具体使用方法见例1-18。

例1-18:三目运算符。

    #include <iostream>
    using namespace std;
    int main() {
       int a = 10;
       int b = 20;
       int c = 0;
       c = a > b ? a : b;
       cout << "c = " << c << endl;
       //C++中三目运算符返回的是变量,可以继续赋值
       (a > b ? a : b) = 100;
       cout << "a = " << a << endl;
       cout << "b = " << b << endl;
       cout << "c = " << c << endl;
       return 0;
    }

例1-18运行结果如图1-36所示。

图1-35 例1-17运行结果

图1-36 例1-18运行结果

总结:和if语句相比较,三目运算符的优点是短小、整洁;缺点是如果用嵌套,结构不清晰。

3.switch语句

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

语法:

    switch(表达式)
    {
       case 结果1:执行语句;break;
       case 结果2:执行语句;break;
       ...
       default:执行语句;break;
    }

具体使用方法见例1-19。

例1-19:switch语句。

    #include <iostream>
    using namespace std;
    int main() {
       //请给电影评分 
       //10~9: 经典   
       // 8: 非常好
       // 7~6: 一般
       // 5分及以下: 较差
       int score = 0;
       cout << "请给电影打分" << endl;
       cin >> score;
       switch (score)
       {
       case 10:
       case 9:
             cout << "经典" << endl;
             break;
       case 8:
             cout << "非常好" << endl;
             break;
       case 7:
       case 6:
             cout << "一般" << endl;
             break;
       default:
             cout << "较差" << endl;
             break;
       }
       return 0;
    }

例1-19运行结果如图1-37所示。

图1-37 例1-19运行结果

注意1:switch语句中表达式的类型只能是整型或者字符型。

注意2:case里如果没有break,那么程序会一直向下执行。

总结:与if语句相比较,在多条件判断时,switch语句的结构更清晰,执行效率更高;缺点是switch语句不可以判断区间。

· 1.7.2 循环结构

1.while循环语句

作用:满足循环条件,执行循环语句。

语法:while(循环条件){执行语句}。

解释:只要循环条件的结果为真,就执行循环语句,否则跳出循环。流程如图1-38所示,使用方法见例1-20。

例1-20:while循环语句。

    #include <iostream>
    using namespace std;
    int main() {
       int num = 0;
       while (num < 10)
       {
           cout << "num = " << num << endl;
           num++;
       }
       return 0;
    }

例1-20程序运行结果如图1-39所示。

图1-38 while循环语句流程

图1-39 例1-20运行结果

注意:在执行循环语句时,程序必须提供跳出循环的出口,否则会出现死循环,即程序不能结束运行。

2.do-while循环语句

作用:满足循环条件,执行循环语句。

语法:do{执行语句} while(循环条件)。

流程如图1-40所示,具体使用方法见例1-21。

例1-21:do-while循环语句。

    #include <iostream>
    using namespace std;
    int main() {
       int num = 0;
       do
       {
           cout << num << endl;
           num++;
       } while (num < 10);
       return 0;
    }

例1-21运行结果如图1-41所示。

图1-40 do-while循环语句流程

图1-41 例1-21运行结果

总结:do-while循环语句与while循环语句的区别在于,do-while循环语句先执行一次循环语句,再判断循环条件。

3.for循环语句

作用:满足循环条件,执行循环语句。

语法:for(起始表达式;条件表达式;末尾循环体) {循环语句}。

具体使用方法见例1-22。

例1-22:for循环语句。

    #include <iostream>
    using namespace std;
    int main() {
       for (int i = 0; i < 10; i++)
       {
           cout << i << endl;
       }
       return 0;
    }

例1-22运行结果如图1-42所示。

图1-42 例1-22运行结果

注意:for循环语句中的表达式,要用分号进行分隔。

总结:while循环语句、 do-while循环语句、for循环语句都是开发中常用的循环语句,for循环语句结构清晰,比较常用。

4.嵌套循环

作用:在循环体中再嵌套一层循环,解决一些实际问题。

嵌套循环语句的具体使用方法见例1-23。

例1-23:嵌套循环语句。

    #include <iostream>
    using namespace std;
    int main() {
       //外层循环执行1次,内层循环执行1轮
       for (int i = 0; i < 10; i++)
       {
           for (int j = 0; j < 10; j++)
           {
                     cout << "*" << " ";
           }
           cout << endl;
       }
       return 0;
    }

例1-23运行结果如图1-43所示。

图1-43 例1-23运行结果

· 1.7.3 跳转语句

在循环语句执行过程中,跳转语句用于实现程序语句的跳转。在C++中,跳转语句有break语句、continue语句、goto语句3种,下面分别进行介绍。

1.break语句

作用:跳出选择结构或者循环结构。

break语句使用的情况有以下3种。

出现在switch条件语句中,作用是终止case并跳出switch条件语句。

出现在循环语句中,作用是跳出当前的循环语句。

出现在嵌套循环语句中,作用是跳出最近的内层循环语句。

具体使用方法见例1-24、例1-25、例1-26。

例1-24:跳转语句。

    #include<iostream>
    using namespace std;
    int main() {
      //在switch 语句中使用break
       cout << "请选择您挑战副本的难度:" << endl;
       cout << "1.普通" << endl;
       cout << "2.中等" << endl;
       cout << "3.困难" << endl;
       int num = 0;
       cin >> num;
       switch (num)
       {
       case 1:
             cout << "您选择的是普通难度" << endl;
             break;
       case 2:
             cout << "您选择的是中等难度" << endl;
             break;
       case 3:
             cout << "您选择的是困难难度" << endl;
             break;
       }
       return 0;
    }

例1-24运行结果如图1-44所示。

例1-25:跳出循环语句。

    #include <iostream>
    using namespace std;
    int main() {
       //在循环语句中使用break
       for (int i = 0; i < 10; i++)
       {
           if (i == 5)
           {
                     break; //跳出循环语句
           }
           cout << i << endl;
       }
       return 0;
    }

例1-25运行结果如图1-45所示。

图1-44 例1-24运行结果

图1-45 例1-25运行结果

例1-26:跳转语句。

    #include <iostream>
    using namespace std;
    int main() {
       //在嵌套循环语句中使用break,退出内层循环
       for (int i = 0; i < 10; i++)
       {
           for (int j = 0; j < 10; j++)
           {
                     if (j == 5)
                     {
                             break;
                     }
                     cout << "*" << " ";
           }
           cout << endl;
       }
       return 0;
    }

例1-26运行结果如图1-46所示。

图1-46 例1-26运行结果

2.continue语句

作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环,具体使用方法见例1-27。

例1-27:continue语句。

    #include <iostream>
    using namespace std;
    int main() {
       for (int i = 0; i < 100; i++)
       {
           if (i % 2 == 0)
           {
                     continue;
           }
           cout << i << endl;
       }
       return 0;
    }

例1-27运行结果如图1-47所示。

注意:continue语句并没有使整个循环终止,而break语句会跳出循环。

3.goto语句

作用:可以无条件跳转语句。

语法:goto 标记。

解释:如果标记的名称存在,执行到goto语句时会跳转到标记的位置。

具体使用方法见例1-28。

例1-28:goto语句。

    #include <iostream>
    using namespace std;
    int main() {
       cout << "1" << endl;
       goto FLAG;
       cout << "2" << endl;
       cout << "3" << endl;
       cout << "4" << endl;
       FLAG:
       cout << "5" << endl;
       return 0;
    }

例1-28运行结果如图1-48所示。

图1-47 例1-27运行结果

图1-48 例1-28运行结果

注意:在程序中不建议使用goto语句,以免造成程序流程混乱。