C语言--各种循环详解(超详细)

一.为什么要学习C语言循环呢?

在C语言之中,运用好循环语句就是拥有了一个强大的武器,它可以帮助你完成许多工作.

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

二.循环语句都有哪些呢?

if-else   for   switch -case   do-while  while 这些都是很常见的,我们可以运用它们做很多事情!

除了这些还有 goto语句 continue;

三.接下来正文开始

1.if--else的使用与介绍

可以简单理解为 

if(关系表达式){

                语句体1;

        }

        else{

                语句体2;

         }

       简单理解为  ->                        if  如果(你喜欢C语言)------(你可以做某事)

                                                         else  否则---->(你可以做某事)

用来做一个判断:

我们做一个例子,用来理解;

以下实例判断用户输入的整数是奇数还是偶数.
 

#include <stdio.h>int main(){int number;printf("请输入一个整数: ");scanf("%d", &number);// 判断这个数除以 2 的余数if(number % 2 == 0)printf("%d 是偶数。", number);elseprintf("%d 是奇数。", number);return 0;}

在这里if--else的作用就是用来做一个判断,如果number % 2 == 0成立,那么他就是偶数,反之则是奇数.

1.2在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

if...else if...(else)语句:
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构printf("输⼊的数字是正数\n");
elseprintf("输⼊的数字是负数\n");
return 0;
}

通过if--else的连用来构成判断 ;

除了这些,我们还要注意一些问题-->如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

2.switch的使用与介绍

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

我们可以理解为:

switch(表达式)
{case 常量表达式1:语句1;case 常量表达式2:语句2;...default:语句n+1;
}

意思是先计算表达式的值,再逐个和 case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行 default 后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有 case 后的语句。

与 if 语句的不同:if 语句中若判断为真则只执行这个判断后的语句,执行完就跳出 if 语句,不会执行其他 if 语句;而 switch 语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有 case 语句。在每一 case 语句之后增加 break 语句,使每一次执行之后均可跳出 switch 语句,从而避免输出不应有的结果。

同样我们来举一个例子:

#include <stdio.h>int main ()
{/* 局部变量定义 */char grade = 'B';
//这里可以用scanf来输入switch(grade){case 'A' :printf("很棒!\n" );break;case 'B' :case 'C' :printf("做得好\n" );break;case 'D' :printf("您通过了\n" );break;case 'F' :printf("最好再试一下\n" );break;default :printf("无效的成绩\n" );}printf("您的成绩是 %c\n", grade );return 0;
}

以上的代码通过字符来进行选择:

我们也可以使用数字来判别:

输⼊⼀个1~7的数字,打印对应的星期⼏?

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{case 1:
printf("星期⼀\n");
break;
case 2:
printf("星期⼆\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}

switch 语句必须遵循下面的规则:

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
  • 在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
    其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。

3.while 的使用与介绍

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。

C 语言中 while 循环的语法:

while(condition)
{statement(s);
}

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

接下来我们举一例子:

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

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

通过代码的实现我们可以清楚的了解while的语法,还有一些细节需要我们去注意;

while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

1、程序先判断A是否为真,如果为真则执行循环体B

2、当执行完循环体后再回到第1步

3、当表达式A为假时结束循环

while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环 循环体如包括有一个以上的语句,则必须用{}括起来, 组成复合语句。 应注意循环条件的选择以避免死循环。

4.do-while 的使用与介绍

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

C 语言中 do...while 循环的语法:

do
{statement(s);}while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

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

举个栗子:

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* do 循环执行,在条件被测试之前至少执行一次 */do{printf("a 的值: %d\n", a);a = a + 1;}while( a < 20 );return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

理解起来也是相对的简单;

5.for的使用与介绍

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:


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

//如果循环体想包含更多的语句,可以加上⼤括号 

#include <stdio.h>int main ()
{/* for 循环执行 */for( int a = 10; a < 20; a = a + 1 ){printf("a 的值: %d\n", a);//表达式4}return 0;
}
//在for循环内执行顺序是 表达式1,表达式2,表达式4,表达式3

在for循环内执行顺序是 表达式1,表达式2,表达式4,表达式3 

  • for(表达式1;表达式2;表达式3)
  • 语句块;
  1. 先执行"表达式1",并且程序只会执行"表达式1"。注:"表达式1"仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句!
  2. 接着程序判断条件"表达式2"的结果是否为"真",为"真"时,程序就执行语句块的内容。注:"表达式2" 一般是一个关系表达式,决定了是否还要继续下次循环,称为"循环条件"。
  3. 语句块执行完的话,接下来会执行"表达式3"! 注:"表达式3" 很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得"不成立"
  4. 然后重复 第二步骤第三步骤,直到 "表达式2" 判断条件不成立就退出循环!

[for]语句最简单的应用形式也是最容易理解的形式如下 :

for(循环变量赋初值;循环条件;循环变量增量) 语句

  1. 循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值;
  2. 循环条件是一个关系表达式,它用来决定什么时候退出循环;
  3. 循环变量增量,定义循环控制变量每循环一次后按什么方式变化;

举个栗子

计算1~100之间3的倍数的数字之和

#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=1; i<=100; i++){if(i % 3 == 0)sum += i;}
printf("%d\n", sum);
return 0;
}
//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=3; i<=100; i+=3){sum += i;}printf("%d\n", sum);return 0;
}

6.break的使用与介绍

C 语言中 break 语句有以下两种用法:

  1. 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
  2. 它可用于终止 switch 语句中的一个 case。

如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

C 语言中 break 语句的语法:

break;

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* while 循环执行 */while( a < 20 ){printf("a 的值: %d\n", a);a++;if( a > 15){/* 使用 break 语句终止循环 */break;}}return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15

 7.continue的使用与介绍

C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。

对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do...while 循环,continue 语句重新执行条件判断语句。

C 语言中 continue 语句的语法:

continue;

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* do 循环执行 */do{if( a == 15){/* 跳过迭代 */a = a + 1;continue;}printf("a 的值: %d\n", a);a++;}while( a < 20 );return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

8.goto语句的使用与介绍

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
例如:

#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}



goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出
使⽤ goto 就⾮常的⽅便了。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;

}
error:
//...
本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言30分钟入门

1. 环境&安装 R是支持win、linux合macos的 完整参考&#xff1a;https://zhuanlan.zhihu.com/p/596324321?utm_id0 主要是安装&#xff1a;1、R环境&#xff1b;2、rstudio开发环境&#xff08;后面主要是用rstudio&#xff0c;也可以用vscode&#xff09; 1.1. rstud…

敌手觊觎,核心研发项目源代码安全不可忽视!立即了解迅软DSE防泄密良策!

源代码作为企业的知识产权之一&#xff0c;也是企业的重要商业秘密&#xff0c;如果不慎被泄露可能会被竞争对手利用&#xff0c;对企业的业务和安全带来威胁以及不必要的法律风险。面对层出不穷的泄密事件&#xff0c;相关人员更应该提高对源代码的保护意识&#xff0c;加强企…

计算虚拟化之内存

有了虚拟机&#xff0c;内存就变成了四类&#xff1a; 虚拟机里面的虚拟内存&#xff08;Guest OS Virtual Memory&#xff0c;GVA&#xff09;&#xff0c;这是虚拟机里面的进程看到的内存空间&#xff1b;虚拟机里面的物理内存&#xff08;Guest OS Physical Memory&#xf…

新金融时代、AMCAP谱写财富梦想新篇章

近年来&#xff0c;智能配置投资与理财逐渐受到关注并走俏。这是一种简单快捷的智慧化理财方式&#xff0c;通过将个人和家族的闲置资金投入到低风险高流动性的产品中。 国际财富管理投资机构AMCAP集团金融分析师表示&#xff1a;智能配置投资与理财之所以持续走俏&#xff0c…

msvcp140.dll的解决方法有哪些。详细解析五种可以修复msvcp140.dll丢失的方法

引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;它的作用是什么&#xff1f;当它丢失时会对电脑产生什么影响&#xff1f;本文将详细介绍…

2021年8月18日 Go生态洞察:整合Go的网络体验

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Vue实现图片预览(Viewer.js)

摘要&#xff1a; vue项目开发中遇到一个图片预览的需求&#xff0c;可以切换下一张&#xff0c;就是花里胡哨的&#xff0c;所以找viewer.js的插件 npm install v-viewer -S在项目main.js中加入&#xff1a; Viewer.setDefaults用于更改默认配置&#xff0c;比如我不想要显示…

windows下使用iperf3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1.下载2.解压3.测试1.作为服务器使用2.作为客户端使用 总结 前言 windows使用iperf3和linux是一样的&#xff0c;而且可以相互操作。 一、使用步骤…

Linux常用命令——mv命令

文章目录 1. 简介2. 命令格式3. 主要参数4. 常见用法及示例4.1 移动文件4.2 重命名文件4.3 交互式移动文件4.4 强制移动文件4.5 移动多个文件4.6 使用通配符移动文件 5. 注意事项6. 结论 1. 简介 mv 命令在Linux系统中用于移动文件或目录&#xff0c;同时也可以用于重命名文件…

力扣 --- 删除有序数组中的重复项 II

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

QT 项目中添加文件夹(分类文件)

为了更方便的整理项目的文件&#xff0c;添加文件夹把文件进行分类。 1.首先在项目文件中创建新的文件夹 2.把需要归类的文件放入新建的文件中 3.右键然后选择add..... 4.运行此程序&#xff0c;会报错因为文件路径改变了&#xff0c;需要在.pro中修改路径 注意事项 文件夹内部…

[c++]——string类____详细初步了解string类的运用

在成为大人的路上喘口气. 目录 &#x1f393;标准库类型string &#x1f393;定义和初始化string对象 &#x1f4bb;string类对象的常见构造 &#x1f4bb;string类对象的不常见构造 &#x1f4bb;读写string对象 &#x1f393; string类对象的修改操作 &#x1f4…