分支语句和循环语句

if语句结构

0表示假,非0表示真。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1
if(表达式)
语句;
// 2
if(表达式)
语句1;
else
语句2;

// 多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

实例

  • 判断一个人的年龄处于什么阶段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}

}

input:1000
output:老寿星

悬空else

  • 看看下面这个应该输出什么
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}

output:啥也不输出

else 最近 未匹配的if 匹配,即总跟最近的 未配对 的if进行匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else

printf("haha\n");
}
return 0;
}

输出:

1
haha 

switch语句结构

switch语句也是一种分支语句。 常常用于多分支的情况。

switch语句后面的()内可以跟 整型变量、整型常量、整形表达式(当然这些也可以是字符型不过字符型的本质仍然是整型),而 case 后面只能跟 整型常量,或者字符型常量,必须是常量const修饰的常变量是不可以的,因为其本质上仍是变量

switch语句 没有遇到break,程序就会一直执行下去,此时无论后面的case是否匹配都将执行,直到跳出语句块。

1
2
3
4
5
6
7
8
9
10
switch(整型表达式)   // 整形包含 字符和数值
{
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
......
default: // 所有的case标签的值都不匹配
语句; // default可以出现在语句列表的任何位置,一般习惯把它放在最后
}

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1
case 2:
case 3:
case 4:
case 5:
printf("weekday\n"); // 直至遇到break停止,跳出switch语句
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误!!");
break;
}
return 0;
}

输入:3
输出:weekday

输入:6
输出:weekend

输入:10
输出:输入错误!!


循环语句

while循环结构

1
2
while(表达式)
循环语句;

实例

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}

输出:

1
1 2 3 4 5 6 7 8 9 10

break和continue

break 结束(跳出)循环,无论break用在switch还是循环中,均只能退出一层switch或者一层循环
continue 终止 本次 循环,本次循环中 continue 后边的代码不会再执行,直接跳转到 while 语句的判断部分。进行下一次循环的入口判断。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// break实例
#include <stdio.h>
int main()

{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}

输出:

1
1 2 3 4

仔细想想下面这题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// continue实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}

输出:

1
1 2 3 4   // 输出完1 2 3 4 后程序就会卡在那,仔细想想为什么

do … while循环结构

特点:先执行,在判断,最少执行一次

1
2
3
4
do{
循环语句;
}
while ( 表达式 );

for循环结构

表达式1 为初始化部分,用于初始化循环变量的。
表达式2 为条件判断部分,用于判断循环时候终止
表达式3 为调整部分,用于循环条件的调整。
三个部分都可省略,但是不建议初学时省略,容易导致问 题。省略表达式2 相当于while(1)

1
2
for(表达式1; 表达式2; 表达式3)
循环语句;

实例

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}

输出:

1
1 2 3 4 5 6 7 8 9 10