C语言— —流程控制

本文主要介绍程序的执行顺序。

1. 顺序结构

所谓顺序结构,就是程序从上到下一句一句地执行。之前我们所写的程序都是顺序结构的,不再多说。

2. 选择结构

所谓选择结构,就是当程序执行到某一行程序时,有多种路径可以选择,不管选择哪种路径,程序最终都会结束。就像我们走到一个人生的十字路口,不论我们选择那条路,都会走向人生的终点。

选择结构分为两种:if选择和switch选择。

2.1 if选择结构

最简单的if选择结构语法如下:

if(表达式){
    语句1;
    语句2;
    ...;
}
  • 括号中的表达式应为布尔值,如果表达式为true,则执行大括号中的语句;否则执行if结构后面的语句。
  • 如果if结构大括号中只有一条语句,则可以省略大括号。如果有多条语句,则不可省略。

例子:

# include <stdio.h>
int main()
{
    int num = 10;
    if(num > 5){
        printf("num > 5.\n");
    }
    printf("if 结构后的语句.\n");
    return 0;
}

结果:

num > 5.
if 结构后的语句.

大家可以改变num的值来进一步体会if结构。

我们可以给if语句加上else语句,形成if-else结构:

if(表达式){
    语句组1...
}else{
    语句组2...
}

if-else语句的作用是:如果括号中的表达式为true,则执行语句组1;如果表达式为false,则执行语句组2。

例子:

# include <stdio.h>
int main()
{
    int num = 5;
    if(num > 5){
        printf("num > 5.\n");
    }else{
        printf("num <= 5.\n")
    }
    printf("if 结构后的语句.\n");
    return 0;
}

结果:

num <= 5.
if 结构后的语句.

if-else语句给程序提供了两条路径,我们可以使用if-else if[-else if][-else]为程序提供多条路径(中括号内的结构是可选的)。语法如下:

if(表达式1){
    语句组1...
}else if(表达式2){
    语句组2...
}else if(表达式3){
    语句组3...
}else{
    语句组n...
}
  • 每个else if都有表达式;
  • 可以有多个else if语句,但只能且必须有一个if语句,else语句是可选的,可以有且只能有一个或没有;
  • 整个选择结构从上到下依次判断表达式,如果该表达式为true,则执行该路径的语句,然后退出整个选择结构;否则接着往下判断,如果表达式都为false,则执行else语句组(如果有的话)。因此,各个表达式是要有关联的。

例子:

# include <stdio.h>
int main()
{
	printf("请输入您的成绩(0-100):");
	int score;
	scanf("%d",&score);
	if(score >= 90){
		printf("您的成绩为优秀。\n"); 
	}else if(score >= 70){
		printf("您的成绩为良好。\n"); 
	}else if(score >= 60){
		printf("您的成绩为及格。\n");
	}else{
		printf("您的成绩为不及格。\n");
	}
	printf("程序结束...\n");
	return 0;
}

结果:

在这里插入图片描述

2.2 switch选择结构

switch可以用于多条路径选择结构,可以简化if结构。switch选择结构的语法如下:

switch(表达式){
    case1:
        语句组1...
        break;
    case2:
        语句组2...
        break;
    case3:
        语句组3...
        break;
    ...
    case 值n:
        语句组n...
        break;
    default:
        语句组 default...
        break;
}

说明:

  • 当被测试的表达式等于 case 中的值(值需要是常量或字面量)时,case 后跟的语句将被执行,直到遇到 break 语句为止。

  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。

  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续执行后续的 case,直到遇到 break 为止。

  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行。default case 中的 break 语句不是必需的。

  • switch 括号中的表达式结果可以为int,char,枚举,布尔值。

例子,与if-else if-else例子相同的功能:

# include <stdio.h>
int main()
{
	printf("请输入您的成绩(0-100):");
	int score;
	scanf("%d",&score);
	switch(score/10){
		case 10:
		case 9:
			printf("您的成绩为优秀。\n"); 
			break;
		case 8:
		case 7:
			printf("您的成绩为良好。\n"); 
			break;	
		case 6:
			printf("您的成绩为及格。\n");
			break;
		default:
			printf("您的成绩为不及格。\n");
			break;
	}
	printf("程序结束...\n");
	return 0;		
}

结果:

在这里插入图片描述

3. 循环结构

所谓循环结构,就是重复执行某段程序,直至执行的条件不再满足。

3.1 while循环

while循环的语法如下:

while(表达式)
{
    循环体;
}

while循环语句的执行顺序是:

  1. 首先判断表达式是否成立(表达式是否为true);
  2. 如果表达式为true,则执行循环体,然后回到第1步;如果表达式为false,则结束循环;

注意,如果要让循环结束,即避免死循环,那么应该在循环体中改变表达式的值。

例子:输出1到100的值。

# include <stdio.h>
int main()
{
    int i = 1;
    while(i <= 100){
        printf("%d ",i);
        i++;
    }
    return 0;
}

在我们的循环体中,每次输出变量i的值,然后变量i自增,这样就改变了表达式i <= 100的值,当i变为101时,表达式为false,循环结束。

3.2 do…while循环

do…while循环的语法如下:

do{
    循环体;
}while(表达式);

do…while循环的执行顺序为:

  1. 首先执行循环体;
  2. 然后判断表达式是否为true;
  3. 如果表达式为true,则回到第1步;如果表达式为false,则结束循环;

do…while循环和while循环的不同就是执行循环体和判断表达式的顺序不同。

下面仍以打印1-100为例子,演示do…while循环:

# include <stdio.h>
int main()
{
    int i = 1;
    do{
        printf("%d ",i);
        i++;
    }while(i <= 100);
    return 0;
}

3.3 for循环

for循环的语法结构如下:

for(循环变量定义; 表达式; 改变循环变量)
{
	循环体;
}

for循环的执行顺序如下:

  1. 首先进行循环变量定义;
  2. 然后判断表达式是否为true;
  3. 如果表达式为true,则执行循环体,然后改变循环变量,回到第2步;如果表达式为false,则结束循环;

仍以打印1-100为例演示for循环:

# include <stdio.h>
int main()
{
    for(int i = 1; i <= 100; i++){
        printf("%d ",i);
    }
    return 0;
}

循环变量定义、表达式和改变循环变量这三个部分并不一定要写在相应的地方,我们可以进行如下改变:

# include <stdio.h>
int main()
{
    int i = 1;
    for(; i <= 100; ){
        printf("%d ",i);
        i++;
    }
    return 0;
}

这样循环变量定义和改变循环变量的位置都发生了改变,但整个程序的功能没有发生变化,并且注意for后面的括号中的分号不要省略!其实这样的for循环就非常类似while循环了。一般不建议将循环变量定义放在for循环外面,因为这样就导致循环变量i的作用域扩充到了整个程序。

4. break和continue语句

break和continue语句可以用来改变执行流程。

4.1 break语句

break语句可以用在switch语句或循环语句中,用于退出两者流程结构。关于break语句在switch中的作用,此处不再赘述。现在来讲解break语句在循环语句中的作用:退出循环。

# include <stdio.h>
int main()
{
    for(int i = 1; i > 0; i++){
        printf("%d ",i);
    }
    return 0;
}

上述程序的for循环,其中的表达式结果永远为true,这样循环就不会结束,这就是死循环,将会导致程序崩溃。我们可以使用break语句,在循环体中退出循环:

# include <stdio.h>
int main()
{
    for(int i = 1; i > 0; i++){
        printf("%d ",i);
        if(i >= 100)
            break;
    }
    return 0;
}

这样,当i大于等于100时,循环就会退出。

4.2 continue语句

continue语句用于循环结构中,用于结束本次循环,立即开始下次循环。

例如,现要求打印1-100中的偶数,我们可以这样写:

# include <stdio.h>
int main()
{
    for(int i = 1; i > 0; i++){
        if(i%2 != 0)
            continue;
        printf("%d ",i);
    }
    return 0;
}

i模2的值不为0时(表示i为奇数),执行continue语句,该语句会跳过接下来的循环体语句,直接执行改变循环体i++,开始下一次循环。

5. 嵌套

所谓嵌套,是指选择结构和循环结构可以相互嵌套,比如选择结构的语句组可以为另外的选择结构或循环结构,循环结构的循环体可以为另一个循环结构或选择结构,下面以一个例子来说明:

输出99乘法表:

# include <stdio.h>
int main()
{
	for(int i = 1; i <= 9; i++){
		for(int j = 1; j <= i; j++){
			printf("%d * %d = %d\t",j,i,i*j);
		}
		printf("\n");
	}
	return 0;
} 

在这里插入图片描述

上述程序就是循环的嵌套。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值