首页 > 其他分享 >分支与循环

分支与循环

时间:2023-07-30 10:03:02浏览次数:35  
标签:语句 int break while 循环 printf 分支

文章目录

分支语句和循环语句

分支语句
if
switch
循环语句
while
for
do while
goto语句

1. 什么是语句?

C语句可分为以下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句
    本周后面介绍的是控制语句。
    控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语
    言有九种控制语句。
    可分成以下三类:
  6. 条件判断语句也叫分支语句:if语句、switch语句;
  7. 循环执行语句:do while语句、while语句、for语句;
  8. 转向语句:break语句、goto语句、continue语句、return语句。

2. 分支语句(选择结构)

2.1 if语句

语法结构:
if(表达式)
    语句;
if(表达式)
    语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

2.1.1 悬空else

#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;
}

改正

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#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;
}

2.1.2 if书写形式的对比

//代码1
if (condition) {
    return x;
}
return y;
//代码2
if(condition)
{
    return x;
}
else
{
 return y;
}
//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

代码2和代码4更好,逻辑更加清晰,不容易出错。

2.2 switch语句

switch语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那我没写成 if…else if …else if 的形式太复杂,那我们就得有不一样的语法形式。
这就是switch 语句。

switch(整型表达式)
{
    语句项;
}

而语句项是

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

2.2.1 在switch语句中的 break

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

#include <stdio.h>
int main()
{
    int day = 0;
    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;
}

需求变了:

  1. 输入1-5,输出的是“weekday”;
  2. 输入6-7,输出“weekend”
    所以我们的代码就应该是这样:
#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
          case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

3. 循环语句

while
for
do while

3.1 while循环

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

if(条件)
     语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
 循环语句;

3.1.1 while语句中的break和continue

break介绍

//break 代码实例
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

这里代码输出的结果是:
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10
总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
continue介绍

//continue 代码实例1
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

这里代码输出的结果是:
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10
总结:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

3.2 for循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢?
首先来看看for循环的语法:

3.2.1 语法

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

表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
现在我们对比一下for循环和while循环:

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
 printf("hehe\n");
 i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
 printf("hehe\n");
}

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

3.2.2 break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。
但是还是有些差异:

//代码1
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ",i);
 }
 return 0;
}
//代码2
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0;
}

3.2.3 for语句的循环控制变量

建议:

  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

3.2.4 一些for循环的变种

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
    
    //代码2
    int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
 printf("hehe\n");
       }
   }
    
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for(; i<10; i++)
   {
        for(; j<10; j++)
       {
 printf("hehe\n");
       }
   }
    
 //代码4-使用多余一个变量控制循环
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0;
}

3.3 do…while()循环

3.3.1 do语句的语法:

do
 循环语句;
while(表达式);

3.3.2 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

#include <stdio.h>
int main()
{
 int i = 10;
    
 do
 {
        if(5 == i)
            break;
 printf("%d\n", i);
 }while(i<10);
    
 return 0;
}
#include <stdio.h>
int main()
{
 int i = 10;
    
 do
 {
        if(5 == i)
            continue;
 printf("%d\n", i);
 }while(i<10);
    
 return 0;
}

4. goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

标签:语句,int,break,while,循环,printf,分支
From: https://blog.51cto.com/u_16182079/6898612

相关文章

  • 9. 现代循环神经网络
    例如,循环神经网络在实践中一个常见问题是数值不稳定性。尽管我们已经应用了梯度裁剪等技巧来缓解这个问题,但是仍需要通过设计更复杂的序列模型来进一步处理它。具体来说,我们将引入两个广泛使用的网络,即门控循环单元(gatedrecurrentunits,GRU)和 长短期记忆网络(longshort-term......
  • C语言分支与循环(12)--- 练习题
    一.练习题1.给定两个数,求这两个数的最大公约数,如求24与18的最大公约数方法:假设m=24n=181.将24与18进行取模,得到的结果是商1,余数为6,有余数证明并没有被整除2.将18再模6,可以得到商3余0,所以我们可以得到6是我们的最大公约数3.如果声明一个变量r来接收数据,如果r=0则代表n为最大公约数,......
  • Git常用命令(分支合并冲突解决)
           ......
  • for循环语法-习题
    for循环-习题for循环求和【题目描述】利用for循环。计算输出1+2+3+...+n的和。【输入】输入n。【输出】如题述,之和。【输入样例】10【输出样例】55【提示】【数据规模及约定】对于100%的数据,1≤n≤100。inta,b=0;cin>>a;for(intn=1;n<=a;n++){ b+=n;}......
  • 3-1 在上面有关折半查找的例子中,while 循环语句内共执行了两次测试,其实 只要一次就足
    ArchlinuxGCC13.1.1 202304292023-07-2911:07:02星期六 点击查看代码#include<stdio.h>intbinsearch(intx,intv[],intn){intlow,high,mid;low=0;high=n-1;mid=(low+high)/2;while((low<=high)&&(......
  • 栈与循环队列
    1.栈(Stack)是一种具有后进先出(LIFO)特性的线性数据结构。在栈中,元素的插入和删除操作只能在栈的一端进行,通常称为栈顶。栈不支持在任意位置的元素访问,只能访问栈顶的元素。栈的常见操作包括入栈(push)将元素放入栈顶、出栈(pop)将栈顶元素移除,以及获取栈顶元素(peek)等。下面是一个使用Pyth......
  • Git常用命令(分支操作命令)
          ......
  • Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准
    全文下载链接:http://tecdat.cn/?p=26562最近我们被客户要求撰写关于循环神经网络的研究报告,包括一些图形和统计输出。自2000年 1月以来的股票价格数据。我们使用的是Microsoft股票。该项目包括:将时间序列数据转换为分类问题。使用TensorFlow的LSTM模型由MSE衡......
  • 三个线程循环打印ABC10次的几种解决方法
    有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC… 这是一个比较常用的关于线程的考题,一般出现在应届生的校园招聘试卷上。本文给出如下四种解决方法:使用synchronized,wait和notifyAll使用Lock和Condition使用Semaphore使用AtomicInteger使用synchro......
  • Unity3D_拯救死循环
    当我们无意间写了死循环,此时只能调出任务管理器重新打开Unity工程一个偶然的机会我得知了一个不用结束任务,就可以挽救死循环的方法,整理如下总体思路:首先,创建一个Cube,让它沿Y轴旋转,通过它是否旋转来判断程序是否进入了死循环;其次,创建一个bool类型的变量,默认值为false,通过按......