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语句来避免考虑程序的设计。这样写出来的程序较之细心编写的程序总是难以维护得多。

最后

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


相关文章
|
3天前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
11天前
|
C语言
c语言循环题目
c语言循环题目
|
12天前
|
存储 C语言 索引
C语言数组:从入门到进阶
C语言数组:从入门到进阶
16 0
|
12天前
|
C语言
C语言控制流程详解:分支与循环语句
C语言控制流程详解:分支与循环语句
11 0
|
12天前
|
C语言
C语言结构体教程:从入门到实践(保姆式教学)
C语言结构体教程:从入门到实践(保姆式教学)
11 0
|
12天前
|
C语言
C语言中求x的n次方:从入门到实践(保姆式教学)
C语言中求x的n次方:从入门到实践(保姆式教学)
14 0
|
16天前
|
算法 C语言 索引
C语言中的for循环:深入探索与实用技巧
C语言中的for循环:深入探索与实用技巧
13 1
|
C语言
C语言及程序设计初步例程-23 用if语句实现分支结构
贺老师教学链接  C语言及程序设计初步 本课讲解 下面的程序是什么结构? #include <stdio.h> int main( ) { int a,b,c; scanf("%d %d", &a, &b); if(a>b) { c=a; } else { c=b;
1041 0
|
4天前
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
|
3天前
|
安全 C语言
【C语言基础】:内存操作函数
【C语言基础】:内存操作函数