C++学习手册:程序流程结构解析

发表时间: 2024-02-14 10:17

4.1 选择结构

4.1.1 if语句

单行if

 int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) {     cout << "n is bigger than 10" << endl; } return 0;

if后不加分号,不然没有选择作用

注意:如果if里面执行的语句只有一行,那么可以省略花括号,如果多于一行,必须加花括号,否则只会执行第一行

比如:

 int n = 0; cout << "Enter n :"; cin >> n; if (n > 10)     cout << "n is bigger than 10" << endl; cout << "n比10大" << endl;

无论输入n是什么数,n比10大这行代码都会被执行,因为这句代码不在if里面

  • 多行if
 int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) {     cout << "n is bigger than 10" << endl; } else {     cout << "n is NOT bigger than 10" << endl; } return 0;

if语句的条件不满足就走else语句

  • 多条件if语句
 int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) {     cout << "n is bigger than 10" << endl; } else if (n > 5) {     cout << "n is bigger than 5 and smaller than 10" << endl; } else if (n > 0) {     cout << "n is bigger than 0 and smaller than 5" << endl; } else {     cout << "n < 0" << endl; } return 0;

可以有if ... else if。即后面的else没有也可以

嵌套if语句---在一个范围内更精确的选择

 int n = 0; cout << "Enter n :"; cin >> n; if (n > 100)//在n > 100的访问内进行筛选 {     if (n > 200)     {         cout << "n > 200" << endl;     }     else if (n > 150)     {         cout << "n > 150" << endl;     }     else     {         cout << "n > 100 && n <= 150" << endl;     } } else if (n > 50) {     cout << "n <= 100 && n > 50" << endl; } else {     cout << "n <= 50" << endl; }

在第一个if下在进行选择

如果一个判断可以写成并列的两个if,也可以写成if ... else if。如果不复杂的话就用后者,因为后者的执行效率高

4.1.2 三目运算符

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

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

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

     int a = 10;     int b = 20;     int c;     c = (a > b ? a : b);     cout << "c=" << c << endl;

结果是c = 20

就是把a,b中较大的值赋给c,然后打印c

     int a = 10;     int b = 20;     (a > b ? a : b) = 100;     cout << "a=" << a << endl;     cout << "b=" << b << endl;

结果是a=10,b=100 (先判断a,b大小,再把其中一个赋值100并打印)

4.1.3 switch语句

基本结构

 switch(表达式) { case 结果一 : 执行语句; break; case 结果二 : case 结果三 : 执行语句; break; default  执行语句; break;  }

每一行代码下都要加break;不然会一直运行下去

e.g.

 int n; cin >> n; switch (n) { case 10: case 9:     cout << "n == 9 || n == 10" << endl;     break; default:     cout << "n != 9 && n != 10" << endl;     break; }

if 与 switch 的区别? switch缺点:判断分支事只能是整型或者字符型 不可以是一个区间 switch优点:结构清晰,执行效率高

4.2 循环语句

4.2.1 while循环语句

满足循环条件(只要循环条件结果为真),执行循环语句

 int a = 0;     while (a <= 9)     {         cout << a << endl;         a++;     }

输出结果为0-9

4.2.2 do...while循环语句

与while的区别是先执行依次循环语句,再判断循环条件

 do {    statement(s);  }while( condition ); 

4.2.3 for循环语句

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

起始表达式:不参加循环,用于给变量赋值,创建一个变量的声明等;

末尾循环体:第一次循环结束后的操作,然后再判断循环条件

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

其实这段代码和上面的一样,只要for循环语句的基本结构还在就行,里面的东西可以放外面

4.2.4 嵌套循环

在循环体中再嵌套一些循环,解决一些实际问题

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

外层循环一次,内层循环一周--天上一天,人间一年

两层循环最好不要用一样的变量

运行结果:



可以一直循环下去

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

这就是三维的了

运行结果如下



4.3 跳转语句

4.3.1 break语句

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

使用时机:

  • 出现在switch条件语句中,终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句

示例1

 #include<iostream> using namespace std; int main() {      cout << "请选择副本难度" << endl;     cout << "1.普通" << endl;     cout << "2.中等" << endl;     cout << "3.困难" << endl;     int i = 0;//创建选择结果的变量     cin >> i;     switch (i)     {     case 1:         cout << "普通" << endl;         break;     case 2:         cout << "中等" << endl;         break;     case 3:         cout << "困难" << endl;         break;     }     return 0; }

示例2

 #include<iostream> using namespace std; int main() {     for (int i = 0; i < 10; i++)     {         if (i == 5)         {             break;//等于5退出循环         }         cout << i << endl;     }     return 0; }

示例3

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

结果:



利用break退出内层循环,不影响外层循环

4.3.2 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-100中全部的奇数

如果把continue换成break,则什么都不会输出

4.3.3 goto语句

无条件跳转语句

语法:goto 标记;(标记一般大写)FLAG

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

 #include<iostream> using namespace std; int main() {     cout << "1.xxx" << endl;     cout << "2.xxx" << endl;     goto FLAG;     cout << "3.xxx" << endl;     cout << "4.xxx" << endl;      FLAG:   //注意是冒号,此处为标记点     cout << "5.xxx" << endl;       return 0; }

输出结果



相当于使用了传送,从goto 直接到标记点

标记点在if里面可能很好用

不推荐用,因为会破坏结构

所有的goto语句都可以被替换成无goto的语句,只不过麻烦些

换言之:goto语句在C++是非必须的

 #include<iostream> using namespace std; int main() {     int i;     FLAG:     cin >> i;     if (i >= 10)     {         goto FLAG;     }     cout << i << endl;     return 0; }

这个只能输出小于10的数,可以用if语句替代