前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C生万物】C语言分支和循环语句

【C生万物】C语言分支和循环语句

作者头像
爱敲代码的小杨.
发布2024-05-07 18:45:36
810
发布2024-05-07 18:45:36
举报
文章被收录于专栏:JavaJava
C语言
C语言

1、if语句

if 语句允许程序通过测试表达式的值从两种选项中选择一种。

1.1 if语句的语法格式:

代码语言:javascript
复制
if(表达式)
	语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。 在C语言中,0表示假,非0表示真。也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行

1.2 if语句的执行流程

1.3 if …else 语句

语法格式:

代码语言:javascript
复制
if(表达式)
    语句;
else
    语句;

1.4 级联式if语句

编程时常常需要判断一系列的条件,一旦其中某一个条件为真就立刻停止。“级联式”if语句常常时编写这类系列判定的最好方法。 例如:下面这个级联式if语句用来判定n是小于0、等于0、大于0

代码语言:javascript
复制
if(n<0)
    printf("%d小于0\n",n);
else
    if(n==0)
        printf("%d等于0\n",n);
	else
        printf("%d大于0\n",n);

虽然第二个 if 语句式嵌套在第一个if语句内部的。通常不会对他对进行缩进,而是把每个else都与最初的 if 对齐:

代码语言:javascript
复制
if(n<0)
    printf("%d小于0\n",n);
else if(n==0)
    printf("%d等于0\n",n);
else
    printf("%d大于0\n",n);

级联式 if 语句独特的书写形式:

代码语言:javascript
复制
if(表达式)
    语句
else if(表达式)
    语句
else if(表达式)
    语句
...
else
    语句

1.5 “悬空else” 的问题

当 if 语句嵌套时,千万要当心著名的“悬空else”的问题。 思考下面这个例子:

代码语言:javascript
复制
#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;
}

程序运行结果是什么呢? 很多人认为 a = 0,不等于1,程序执行else子句,打印haha,但是你运行程序的时候,输出结果:什么都没有打印。

这就是悬空else的问题,如果有多个 ifelse 的时候,else 总是跟最近的未配对的 if 匹配。 如果代码改成下面这样更容易理解了

代码语言:javascript
复制
#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;
}

或者如果我们希望else确定和第一个if匹配,可以把代码改成这样。

代码语言:javascript
复制
#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;
}

只要带上适当的大括号,代码的逻辑就会更加清晰,所以大家以后子啊写代码的时候要注意括号的使用,让代码的可读性更高。

注:if 和 else 语句默认都只控制一条语句,想要控制多条语句需要加上{},构成复合语句。

2、switch语句

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构 switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。 switch 的语法格式:

代码语言:javascript
复制
switch(表达式)
{
    case 常量表达式:
        语句
    case 常量表达式:
        语句   
    ...
    case 常量表达式:
        语句  
    default :语句
}

switch 的组成部分:

  • 控制表达式switch 后面必须跟着圆括号括起来的整形表达式。C语言把字符当成整数来处理,因此在 switch 语句中可以对字符进行判定。但是,这不适用于浮点数和字符串。
  • 分支标号:每个分支的开头都有一个标号,格式如下:

case 常量表达式:

常量表达式很像普通的表达式,只是不能包含变量和函数调用。因此,5是常量表达式,5 + 10 也是常量表达式,但 n + 10 不是常量表达式(除非n是表示常量的宏)。分支标号中常量表达式的值必须是整数(字符也可以)

  • 语句:每个分支标号的后边可以任意数量的语句,并且不需要用花括号把这些语句括起来。每组语句的最后一条通常是break 语句。

C语言不允许有重复的分支标号,但对分支的顺序没有要求,特别是 default 分支不一定要放置在最后。 default 的作用: switch 语句不要求一定有 default 分支。如果 default 不存在,而且控制表达式的值和任何一个分支标号都不匹配的话,控制会直接传给 switch 语句后面的语句。

3、while循环

循环是重复执行其他语句(循环体)的一种语句。

3.1 while语句的格式

代码语言:javascript
复制
while(表达式)
    语句

3.2 while语句的执行流程

首先执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

3.3 while语句的实践

练习:在屏幕上打印1~10的值 代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}

	return 0;
}

运行结果:

4、for循环

4.1 for语句的格式

代码语言:javascript
复制
for(声明或者表达式1;表达式2;表达式3)
    语句

表达式1:用于循环变量的初始化 表达式2:用于循环结束条件的判断 表达式3:用于循环变量的调整

4.2 for语句的执行流程

首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行训话语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。 整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环

4.3 for语句的实践

练习:在屏幕上打印1~10的值 代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}

运行结果:

4.4 for语句和while语句的对比

5、do…while循环

5.1 do…while语句的格式

代码语言:javascript
复制
do
{
    语句
}while(表达式);

whilefor 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环; 而do...while 循环则是先直接进入循环体,执行循环鱼护,然后在执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

5.2 do…while语句的执行流程

do...while语句执行流程.drawio.png
do...while语句执行流程.drawio.png

do...while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,在判断表达式的结果是!=0,则继续循环,执行循环;判断表达式的结果==0,则循环结束。 所以在do...while 语句中循环体是至少执行一次的,这是do...while 循环比较特殊的地方。

5.3 do…while语句的实践

练习:在屏幕上打印1~10的值 代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i<=10);

	return 0;
}

运行结果:

6、break和continue

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环。

  • break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执行。
  • continue 的作用是跳出本次循环 continue 后边的代码

7、goto语句

C语言提供了一种非常特别的语法,就是goto 语句和跳转标号,goto 语句可以实现在同一个函数内跳转到设置好的标号处。 标号只是放置在语句开始处的标识符:

代码语言:javascript
复制
标识符:  语句

goto语句格式

代码语言:javascript
复制
goto 标识符;

例如:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	printf("hehe\n");
	goto next;
	
	printf("haha\n");

next:
	printf("跳过haha的打印\n");

	return 0;
}

运行结果:

goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以能不用尽量不去使用;但是goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用goto 就非常的方便了。

代码语言:javascript
复制
for(...)
{
    for(...)
    {
        for(...)
        {
            if(1)
            	goto next;
        }
    }
}

next:
     //...

本来for 循环也使用break 跳出,但是break 只能跳出一次循环,这里就要用3个break 才可以跳出循环,所以这种情况使用goto语句就更快捷。

8. C语言必刷题

  1. 打印1~100之间的奇数
  2. 9*9乘法表
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、if语句
    • 1.1 if语句的语法格式:
      • 1.2 if语句的执行流程
        • 1.3 if …else 语句
          • 1.4 级联式if语句
            • 1.5 “悬空else” 的问题
            • 2、switch语句
            • 3、while循环
              • 3.1 while语句的格式
                • 3.2 while语句的执行流程
                  • 3.3 while语句的实践
                  • 4、for循环
                    • 4.1 for语句的格式
                      • 4.2 for语句的执行流程
                        • 4.3 for语句的实践
                          • 4.4 for语句和while语句的对比
                          • 5、do…while循环
                            • 5.1 do…while语句的格式
                              • 5.2 do…while语句的执行流程
                                • 5.3 do…while语句的实践
                                • 6、break和continue
                                • 7、goto语句
                                • 8. C语言必刷题
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                                http://www.vxiaotou.com