当前位置: 首页 > news >正文

基本魔法语言分支和循环 (二) (C语言)


🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页:散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:

  • 📖《C语言:从基础到进阶》
  • 📚《编程工具的下载和使用》
  • 🚀《C语言刷题》

💬人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。

🎬博主简介
在这里插入图片描述

文章目录

  • 5. switch语句
    • 5.1 if语句和switch语句的对比
    • 5.2 switch语句中的break
    • 5.4 switch语句中的case和default的顺序问题
  • 6. while循环
    • 6.1 if和while的对比
    • 6.2 while语句的执行流程
  • 7.for循环
    • 7.1 语法形式
    • 7.2 for循环的执行流程
    • 7.3 for循环的实践
    • 7.4 while循环和for循环的对比
  • 8. do-while循环
    • 8.1 语法形式
    • 8.2 do-while循环的执行流程
    • 8.3 do-while的实例
  • 9. break和continue语句
    • 9.1 while循环中的break和continue
      • 9.1.1 break举例
      • 9.2.2 continue举例
    • 9.2 for循环中的break和continue
      • 9.2.1 break举例
      • 9.2.2 continue举例
    • 9.3 do-while中的break和continue
  • 10. 循环的嵌套
  • 11. goto语句
  • 结尾


5. switch语句

switch语句相当于多重命运咒,是一个决策性咒语,用于在多种已知的可能性中选择一条路径。相当于是一种特殊形式的if…else结构,把多重的if…else改成更易用、可读性更好的形式。下面是switch的语言基本模板。

switch(expression)
{
case value1:statement
case value1:statement
...
default:statement
}

上面代码中,根据expression不同的值,执行相应的case分支。如果找不到相应的值,就执行default分支。

注意:

  • switch后面的expression必须是整型表达式
  • case后面的值,必须是整形常量表达式

5.1 if语句和switch语句的对比

如:输入任意整数值,计算除3之后的余数

如果用if语句

int main()
{int n = 0;scanf("%d", &n);if (n % 3 == 0)printf("整除,余数为0\n");else if (n % 3 == 1)printf("余数为1\n");elseprintf("余数为2\n");return 0;
}

如果用switch语句改写,是这样的

int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余数为0\n");break;case 1:printf("余数为1\n");break;case 2:printf("余数为2\n");break;}}

上述的代码中,我们需要注意的点:

  • case和后边的数字之间必须有空格。
  • 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句。

5.2 switch语句中的break

break相当于咒语结界符,当你执行一道正确的多重命运咒魔法,这个结界会立即将你传送出整个多重命运咒,防止你继续执行后面并行魔法咒语。如果上面的代码中除去break,会出现什么情况?

int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余数为0\n");case 1:printf("余数为1\n");case 2:printf("余数为2\n");}}

在这里插入图片描述

我们发现,3除以3本来余数是0,但是我们发现程序运行的结果多了两行“余数为1”和“余数为2”的打印。

这是为什么呢?

原因是switch语句是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果某一个case语句的后面没有break语句,代码会继续执行下去,有可能执行其他case语句中的代码,直到遇到break语句或switch语句结束,就如上图。

所以在switch语句中break语句是非常重要的,能实现真正的分支效果。

当然,break也不是每个case语句都要有,这要根据实际情况来看。如输入1~5输出“工作日”, 6~7输出“休息日”:

int main()
{int day = 0;scanf("%d\n", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误\n");break;}return 0;
}

5.4 switch语句中的case和default的顺序问题

在switch语句中case语句和default子句有顺序吗?default只能放在最后吗?

自然不是,放哪都行,不过通常将default放在最后处理。

6. while循环

while是一个条件持续咒语,只要魔力足够强(条件为真),就会执行咒语(循环体)。只要魔力足够,咒语就会一直执行。如此反复,直到魔力耗尽(条件为假),咒语自动解除。是一个先判断 ,后执行的咒语,如果一开始魔力就已经耗尽,那么咒语一次都不会生效。

同时while语句的语法结构和if非常相似。

6.1 if和while的对比

if(表达式)语句;while(表达式)语句;//如果想包含更多的语句,可以加大括号

当然可以用具体的代码对比一下:

int main()
{if (1)printf("Welcome to China\n");return 0;
}

在这里插入图片描述

int main()
{while (1)printf("Welcome to China\n");return 0;
}

在这里插入图片描述

可以看到if和while的区别,while语句是可以实现循环效果,一直重复下去。

6.2 while语句的执行流程

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

7.for循环

for循环是一个精密炼成阵,需要一个固定的“仪式三部曲”,是三种循环使用最多的循环。

7.1 语法形式

for循环的语法形式如下:

for(表达式1;表达式2;表达式3;)语句;//如果想包含更多的语句,可以加上大括号

仪式三部曲:
1.仪式准备(表达式1):需要一个计数器并赋予初始值(int i = 0)
2.仪式条件(表达式2):设定仪式持续的结界(i < 10)
3.仪式步骤(表达式3):每完成一次小仪式,计数器就按预定规律变化(i++)

7.2 for循环的执行流程

在这里插入图片描述

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

整个循环过程中,表达式1初始化部分只执行1次,循环的是表达式2、循环语句、表达式3在循环。

7.3 for循环的实践

如在屏幕上打印1~10的值

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

在这里插入图片描述

7.4 while循环和for循环的对比

在这里插入图片描述
在这里插入图片描述

for和while在实现循环的过程中都有初始化、判断、调整三个部分,但是for循环的三个部分非常集中,便于代码的维护,如果代码较多的时候,while循环的三个部分比较分散,所以形式上for循环更优一些。

8. do-while循环

do-while相当于无悔誓约咒,与while咒语不同,先不顾一切地执行一次咒语效果(循环体),然后才去感知魔力(条件表达式)。如果魔力依然充沛,就重新执行咒语,否则咒语结束。

8.1 语法形式

在循环语句中do-while语句使用的最少,语法如下:

do语句;
while(表达式);  

while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;

而do-while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会执行下一次,表达式为假,则不再继续循环。

8.2 do-while循环的执行流程

在这里插入图片描述

在do-while循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!= 0,则继续循环,执行循环语句;判断表达式的结果== 0,则循环结束。

所以在do-while语句中循环体是至少执行一次的,这是do-while循环比较特殊的地方

注意:do-while里面创建的变量,while是无法使用的。

8.3 do-while的实例

在屏幕上打印1~9的值

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

在这里插入图片描述

一般do-while使用在循环体至少被执行一次的场景下,所以比较少。

9. break和continue语句

循环过程中,如果发生某些状况,需要提前终止循环,在C语言中提供了break和continue两个关键字,就是运用到循环中。

  • break的作用是用于永远的终止循环,只要break被执行,直接就会跳出循环,继续执行。
  • continue的作用是跳过本次循环中的continue后边的代码,在for循环和while循环中有所差异。

9.1 while循环中的break和continue

9.1.1 break举例

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

在这里插入图片描述

打印了01234后,当i == 5时,循环在break地方终止,不再打印,不再循环。

所以break的作用是永久的终止循环,只要break被执行,break外的第一层循环终止。故以后想终止循环,则可以使用break。

9.2.2 continue举例

continue是继续的意思,在循环中的作用就是跳过本次循环中continue后边的代码,继续执行下一次循环的判断。那么break改为continue会是什么结果呢?

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

在这里插入图片描述

发现当i == 5时,就执行continue,直接跳过某一次循环continue后边的代码,去循环判断的地方,因为这里跳过i = i + 1,所以i一直为5,陷入死循环,无法结束程序,所以终端只有01234几个数。

9.2 for循环中的break和continue

9.2.1 break举例

与while循环中一样,for循环break也是用于终止循环,不管循环还需要循环多少次,只要执行到break,循环就彻底终止。

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

在这里插入图片描述

break的作用是永久终止循环,故不想继续循环的时候,可以用break实现。

9.2.2 continue举例

如果改为continue会是什么样的呢?

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

在这里插入图片描述

发现for循环中的continue的作用是跳过本次循环,然后接着后面的循环的调整部分,因此打印的其他数都有,唯独没有5。故当某个条件发生时,本次循环无需再执行后续操作时候,可以用continue实现。

9.3 do-while中的break和continue

do-while语句基本上和while循环一模一样,大家可以自行测试体会。

10. 循环的嵌套

前面学习了三种循环while、do-while、for,这三种循环往往会嵌套在形成一个复杂的魔法阵,从而更好的解决问题。这就是所说的:循环嵌套。

举一个例子:找出100~200之间的素数,并打印在屏幕上。

int main()
{int i = 0;//循环产生100~200之间的数for (i = 100; i <= 200; i++){//判断i是否为素数//判断2~i-1之间的数int j = 0;int flag = 1;//假设i为素数//flag作用是为了给一个变量,标记是不是素数for (j = 2; j < i; j++){if (i % j == 0){flag = 0;break;}}if (flag == 1)printf("%d ", i);}return 0;
}

在这里插入图片描述

注意:在判断i % j == 0这里不能用if…else…格式来写,比如9不会被2整除,走else判断 flag == 1,但是9不是素数。

int main()
{int i = 0;//循环产生100~200之间的数for (i = 1; i <= 10; i++){//判断i是否为素数//判断2~i-1之间的数int j = 0;int flag = 1;//假设i为素数//flag作用是为了给一个变量,标记是不是素数for (j = 2; j < i; j++){if (i % j == 0){flag = 0;break;}else{flag = 1;break;}}if (flag == 1)printf("%d ", i);}return 0;
}

在这里插入图片描述

11. goto语句

C语言提供了一种特殊的语法,就是goto语句和跳转标号,goto语句可以实现同一个函数内跳转到设置好的标号处。

例如:

int main()
{printf("hehe\n");goto next;printf("haha\n");next:printf("跳过打印haha\n");return 0;
}

在这里插入图片描述

goto语句不仅可以向前跳,还可以向后跳,但会形成死循环。故goto循环使用不当,就会导致在函数内部随意乱跳,打乱程序的执行流程,所以尽量少用。但在多层循环代码中,想要快速跳转,使用goto非常方便。

结尾

往期回顾

基本魔法语言分支和循环 (一) (C语言)

结语:希望这些能帮助各位快速掌握分支和循环,同时期盼各位佬能给博主来个“一键四连”啦!

http://www.dtcms.com/a/533162.html

相关文章:

  • 根目录下两个网站怎么做域名解析科技进步是国防强大的重要的保证
  • 微网站建设c品牌网站设计流程
  • 有哪些cua模型 Computer-Using Agent
  • 网站建设方案模板高校物流信息网站
  • 网工综合知识总结
  • 科技前沿七日谈:从AI普惠到硬件创新,技术正重塑产业边界
  • 初识AES
  • (五)图文结合-详解BLE连接原理及过程
  • 资产管理公司网站建设费用怎么入账电子商务行业发展趋势及前景
  • 机器学习日报05
  • 成都公园城市建设局网站seo诊断分析工具
  • 算法基础 典型题 数学(基础)
  • 网站开发运作wordpress数据库字典
  • 博州住房和城乡建设部网站wordpress开发教程
  • 邢台123网站模板百度推广官方投诉电话
  • 找网站开发人员wordpress ftp附件
  • Xshell 总是在最前端显示
  • 湖北省建设厅官方网站文件网站建设方案书写
  • 网站的成功案例wordpress 登陆白屏
  • 网站开发代码语言网站蜘蛛抓取
  • 斯坦福大学 | CS336 | 从零开始构建语言模型 | Spring 2025 | 笔记 | Lecture 6: Kernels,Triton
  • 【第十九周】自然语言处理的学习笔记04
  • 巴中住房和城乡建设局网站wordpress.exe
  • 7-SpringCloud-服务网关 Gateway-高级特性 Route
  • wordpress建站文本教程公司门户网站是什么
  • 淘宝商品详情 API 在品牌假货识别与维权中的技术应用与实践
  • docker容器内部署flask
  • 手机玩win游戏:Termux安装box86+wine运行windows游戏,仙剑四测试完美通过!
  • 网站首页改版影响优化网站开发 京东
  • 西安米德建站平面设计网站建设