C语言从入门到精通(第二期分支和循环)

简介: C语言从入门到精通(第二期分支和循环)

在学习分支和循环之前,我们先要认识一下什么是语句,知道语句简单的构成,了解一下continue和break语句是什么。这对我们学习分支和循环语句非常重要。我的博客计划是第一个,可惜执行起来却是…hhh


废话少说,正文如下。


正文


什么是语句


C语句可分为以下四类:

  • 表达式语句
  • 初始化语句
  • 初始化的意思就是给变量赋值
  • 格式:基本类型 变量 = 数值
  • 在定义变量时最好都把它初始化,否则后面忘记初始化就难受了。


    int a = 10;
    int b = 20;
    a  = b + c;//这些都是最简单的表达式语句


函数调用语句

  • 如下


printf ("hehe");//printf函数在调用的时候需要引用头文件stdio.h


控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

条件判断语句也叫分支语句:if语句、switch语句;

循环执行语句:do while语句、while语句、for语句;

转向语句:break语句、goto语句、continue语句、return语句

空语句

最简单的空语句就是一个分号;

空语句本身并不执行任何任务,但有时还是有用。他所使用的场合就是语法要求出现一条完整的语句。



break和continue语句

  • break语句用于永久终止循环,这里要注意,如果有多个嵌套循环的时候,指的是终止当前的一个循环。就是for花括号内的那个循环。
  • continue语句用于终止当前循环,然后直接跳到条件表达式的位置去测试条件表达式。

分支语句

if

  • 代码块
{
  expression;
}//就是一个花括号内的语句称为一个代码块。


if语法1

if(条件表达式)
    语句;// 如果条件表达式为真(即非0),则执行 语句,否则就为假跳过他不执行。


注意:

  1. 语法规定0为假,非零即为真。
  2. 如果语句为一条则不需要加花括号(即形成一个代码块),多条语句才加。(为了养成好习惯,一条语句也尽量加上。)
  • if语法2
if(条件表达式)
    语句1;
else
    语句2;//


注意: else不能单独脱离if使用

  • if语法3(多分支)
if(条件表达式1)
    {
      语句1;
    }
else if(条件表达式2)
    {
      语句2;
    }
else
    {
      语句3;
    }


如果"条件表达式1"为真,则执行"语句1",否则判断"条件表达式2",如果为真执行"语句2", 当表达 式1、2都不满足,会执行最后一个else语句。


众多大括号中,只有一个大括号中的内容会被执行


只有前面所有添加都不满足, 才会执行else大括号中的内容


看下面这个if空语句的用法


if(3 > 2);
{
printf("3 > 2");
}
// 输出结果: 3 > 2
// 因为if(3 > 2)后面有一个分号, 所以系统会认为if省略了大括号
// if省略大括号时只能管控紧随其后的那条语句, 所以只能管控分号


switch

switch语句也是一种分支语句。

常常用于多分支的情况。

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

那我没写成 if…else if …else if 的形式太复杂,那我们就得有不一样的语法形式。

这就是switch 语句。


switch(整型表达式) 
{
    case (整型常量表达式);
}

注意:整型常量表达式指的是这个地方只能是常量,比如1,10,5等等,也不能是float等浮点类型的小数。


在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。


break语句 的实际效果是把语句列表划分为不同的分支部分。


编程好习惯:在最后一个 case 语句的后面加上一条 break语句。

(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)


格式如下

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


default子句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结构就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签

default:

写在任何一个 case 标签可以出现的位置。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

解释:


计算"条件表达式"的值, 逐个与其后的"常量表达式"值相比较,当"条件表达式"的值与某个"常量表达式"的值相等时, 即执行其后的语句, 然后跳出switch语句

如果"表达式"的值与所有case后的"常量表达式"均不相同时,则执行default后的语句

如果没有break;语句程序会按照顺序结构从上往下依次执行。

default语句可以放在代码块内的任何位置,只要没有可选择的case语句,就会执行default语句。

if和Switch转换

看上去if和switch都可以实现同样的功能, 那么在企业开发中我们什么时候使用if, 什么时候使用switch呢?

if else if 针对于范围的多路选择
switch 是针对点的多路选择

最后警告:在使用if语句时

int main()
{
   int a =10;
if (a=10)
   {
     printf(“%d”, a);
   }
}//错误写法,但编译器不会报错
int main()
{
   int a =10;
if (10=a)
   {
     printf(“%d”, a);
   }
}//编译器会报错


  • 所以在遇见判断变量等于常量的时候,老司机的写法就是把常量写在前面,把变量写在后面。这样你的编译器,例如Devcpp或者vs才会报错,利于代码的维护和找错。否则你可能找半天都找不到错误在哪。

循环语句

while

while语句流程图


我们已经掌握了,if语句:

if(条件)
     语句;

条件满足的情况下,if语句后的语句执行,否则不执行。

但是这个语句只会执行一次。

由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。

那我们怎么做呢?

C语言中给我们引入了: while 语句,可以实现循环。

变量初始化;
while(条件表达式)
{
  循环语句;
  调整部分;
}

过程:当变量满足条件表达式时,为真,则执行循环语句和调整部分,否则为假跳出代码块,即跳出花括号。

while有当……的意思。而if有如果……的意思。可以把while当作多个if的叠加。

break在while语句里的用法

总结:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。

变量初始化;
while(条件表达式)
{
  循环语句;
  break;
  调整部分;
}          //在遇见break语句时直接跳出while循环,结束循环。


break在while语句里的用法

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环入口的判断。

变量初始化;
while(条件表达式)
{
  循环语句;
  continue;
  调整部分;
}   //在遇见continue语句时直接跳到条件表达式的位置,对表达式测试。


for


for循环流程图

  • 我们已经知道了while循环,但是我们为什么还要一个for循环呢?首先来看看for循环的语法:
  • 初始化部分,用于初始化循环变量的。(就是变量赋值)
  • 条件表达式部分,用于判断循环时候终止。
  • 调整部分,用于循环条件的调整。例如(i++,i- -)
for(变量初始化;条件表达式;调整部分)
{
  循环语句;
}
//在企业开发中,能用while解决的,用for几乎都能解决。


可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

虽然for循环和while差不多。但也是有区别的。但for和whlie的区别在于:for括号内变量初始化的值

只能在后面执行一次,离开循环模块就不能再用了

变量初始化;
for(;条件表达式;调整部分)
{
  循环语句
}
//但是把变量初始化语句写在最前面的话,那个变量的值在后面还能用

在这里需要说明一点就是:for括号里面的分号不能省略。

for(;;);


  • 以上就是最简单的死循环。

do whlie

do while循环流程图

do
{
   循环语句;
}
while(条件表达式);
  • 这里要注意的一点是 while()后面有分号!
  • 流程:
  • 和while语句一样,但循环至少执行一次,使用的场景有限,所以不是经常使用。


goto语句

最后我们来介绍一下goto语句。

要使用goto语句,你必须在你希望跳转的语句前面加上语句标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。

goto是一种危险的语句, 因为在学习C的过程中,很容易形成对它的依赖。经验欠缺的程序员有时使用goto语句来避免考虑程序的设计。这样写出来的程序较之细心编写的程序总是难以维护得多。

最后

如果你觉得文章对你有一些帮助。点赞,收藏是对我最大的鼓励。


相关文章
|
1月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
69 5
|
1月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
59 2
|
30天前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
30 8
|
30天前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
37 6
|
1月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
16 0
|
1月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
10天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
27 6