C/C++ 第三讲 选择结构

3.1 三种控制结构

顺序结构

eg. 计算三角形面积

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
double a,b,c,p,s;
cin>>a>>b>>c;
p=(a+b+c)/2;
s=aqrt(p*(p-a)*(p-b)*(p-c));
cout<<"三角形面积为"<<s<<endl;
system("pause");
return 0;
}

语句类型:

  • 表达式语句

  • 空语句:没有执行代码,只由分号构成的语句

    • for (m=0;m<10000;m++) ;
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
              
      * 此分号代表循环体为空语句,主要作用为延时(遍历)或给新功能扩充留地。

      * 复合语句:{}整合语句

      * 语法结构上是一条语句,功能上需要多条语句

      * 内部可定义仅在复合语句内使用的变量

      * ```c++
      {
      [变量定义]
      语句组
      }

选择结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
double a,b,c,p,s;
cin>>a>>b>>c;
if (a+b>c&&a+c>b&&b+c>a)
{
p=(a+b+c)/2;
s=aqrt(p*(p-a)*(p-b)*(p-c));
cout<<"三角形面积为"<<s<<endl;
}
else
cout<<“输入有误”<<endl;
system("pause");
return 0;
}

循环结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
double a,b,c,p,s;
cin>>a>>b>>c;
while (!(a+b>c&&a+c>b&&b+c>a))
{
cout<<“输入有误”<<endl;
cin>>a>>b>>c;
}
p=(a+b+c)/2;
s=aqrt(p*(p-a)*(p-b)*(p-c));
cout<<"三角形面积为"<<s<<endl;
system("pause");
return 0;
}

辅助控制结构

3.2 if语句及应用

单分支形式

1
if (表达式) 语句
  • 表达式真,执行语句;假则跳过
  • 语句只有一条,但可复合
  • PS:一来就假直接输出

双分支形式

1
2
3
4
if (表达式)
语句1
else
语句2

多分支形式

1
2
3
4
5
6
7
8
9
if (表达式)
语句1
else if (表达式2)
语句2
……
else if (表达式n)
语句n
else
语句n+1
  • 表达问题

    • 例如char sex那么char只能用于存放'm'等单字节
  • 嵌套形式

1
2
3
4
5
6
7
8
9
10
if (表达式)
if (表达式11)
语句11
else
语句12
else
if (表达式11)
语句21
else
语句22

eg. 分组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
int main()
{
char sex, group;
int age;
cout<<"input sex('f' or 'm') and age" <<endl;
cin>>sex>>age;
if (sex=='m')
if(age<40)
group='A';
else
group='B';
else
if(age<40)
group='C';
else
group='D';
cout<<"group="<<group<<endl;
}
  • 问答
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
char sex, group;
int age;
cout<<"input sex('f' or 'm') and age" <<endl;
cin>>sex>>age;
if (sex=='m')
if(age<40)
group='A';
else
group='B';
else
if(age<40)
group='C';
else
group='D';
cout<<"group="<<group<<endl;
}

3.3 switch语句及应用

多分支

形式:

1
2
3
4
5
6
7
8
switch (表达式)
{
case 常量表达式1: 语句组1; [break;]
case 常量表达式2: 语句组2; [break;]
......
case 常量表达式n: 语句组n; [break;]
[default: 语句组n+1]
}
  • switch后的表达式类型必须为整型或字符型
  • case后的常量表达式必须为可一一列举的具体取值,不能是取值范围;
  • 多个常量表达式可共用一组语句。
  • 如果没有break,一直继续执行后续语句。

没有break的例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
int a = 7;
switch (a % 5)
{
case 0:cout << a++;
case 1:cout << ++a;
case 2:cout << a--;
case 3:cout << --a;
default: cout << "其他值";
}
system("pause");
return 0;
}

此时一直向后执行,输出“75其他值”

如果加上break,输出7

例:分制转换:

1
2
3
4
5
6
7
8
9
switch(mark/10)
{
case 10: #两个取值共用一组语句
case 9:grade='A';break;
case 8:grade='B';break;
case 7:grade='C';break;
case 6:grade='D';break;
default:grade='E'
}
  • break不能省
  • switch后语句需巧妙构造