【c语言】分支与循环结构

选择if语句

if()括号内的内容若为真则运行,若为假则不运行

其执行语句在最初接触if语句时,最好用大括号括起来

方便自己检查错误之处,也能保证代码的正确运行

若是不使用大括号,使用TAB对运行的语句进行缩进

if语句后不能加分号,否则将编译报错和不执行

if-else选择结构

其实质为

if(表达式1)

{

        语句1;

}

else if(表达式2)

{

        语句2;

}

else if(表达式3)

{

        语句3;

}

if与if-else二者之间的区别

就好比谈恋爱的道理

if()语句是向对方表白

其执行内容为表白结果

表白失败就歇逼

表白成功就牵手

但是如果不表白也就意味着没有结果

if-else语句是你是海王

表达式1、2、3分别为你养的第一条鱼、第二条鱼、第三条鱼

过年过节了去找鱼们要礼物

若第一条鱼不给礼物

则去找第二条鱼要

若第二条鱼不给礼物

则去找第三条鱼要

按照if-else选择出现的先后顺序进行执行

换种说法

if是上帝给你开了一扇门

没门就歇逼

if-else是上帝给你开了一扇门还有好多扇窗

只不过要按顺序进行执行

2.1.4条件运算符(三目运算符)

表达式1?表达式2:表达式3;

如果表达式1为真就执行表达式2,否则执行表达式3

switch语句

switch(表达式)

{

case 对应值1:表达语句1;break;

case 对应值2:表达语句2;break;

case 对应值3:表达语句3;break;

default:表达语句4:break;

}

为表达式匹配对应值进行语句的执行

注意在每种情况之后一定要加分号

若对应值1、2、3皆没有的话,则执行default后语句

case意为情况,每个case之间的值不可以相同

若不加分号,譬如:

switch(表达式)

{

case 对应值1:表达语句1;

case 对应值2:表达语句2;

case 对应值3:表达语句3;

default:表达语句4:break;

}

则执行完表达语句1后,继续往下执行表达语句2、表达语句3、表达语句4才跳出

if-else语句和switch的区别

if-else是对少量情况的检验,判断速度较快,随着判断情况的逐渐复杂,速度会逐渐变慢,并且后续的情况进行添加的话较为麻烦

switch语句适合对多种情况进行判断,每种情况的判断速度都相同,但是默认default的判断速度略快于各种case的判断速度,当判断情况较多时,首先推荐switch

while语句

while(表达式)

{

        循环体;

}

当while括号内的表达式为真时,while循环语句一直运行

当while括号内的表达式为假时,while循环语句终止循环

由于计算机中的浮点数为一个近似值

因此在用浮点数作为循环的标志时会导致数据出错

因此要用整数值来控制计数循环

若括号内语句恒为真,则为死循环或者无限循环

一般while会用于多次循环输入值测试

在c语言中:

while(~scanf(“%d”,&a))或者while(scanf(“%d”,&a)!=EOF)均可实现无限次输入

在c++中

while(cin>>a)也可实现无限次输入

do-while语句

do-while语句用于最少要执行一次的循环情况

do{

循环体;

}while(表达式);

首先执行一次循环体,若表达式的值为真,则再次循环

注意:do-while语句中,while后面一定要加一个分号

for语句

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

{

        循环体;

}

表达式1->循环变量赋初值

表达式2->循环条件

表达式3->循环变量改变

若是表达式省略的话,则默认值为1

注意:不可以在for语句后面的括号加上分号,否则会被误认为空语句,不执行

三种循环体的比较

  • 循环条件在while和do-while语句当中都在while后面跟,for语句的循环条件在表达式3的位置跟,但相比较来说,for语句的功能更加强劲,凡是while语句能够实现的,for语句均可实现。
  • 初始化步骤一般在while和do-while语句前完成,在for语句的表达式1完成
  • while、do-while、for均可以使用break语句和continue语句

break用法、continue用法、goto语句

在循环体之中,使用break语句能够强行终止,跳出本层循环

在循环体制中,使用continue语句能够强行终止,进行下一次循环

goto语句一般用于多层循环之中,方便在于最内层循环找到所需要的值后跳出所有循环,避免使用break语句逐层跳出从而避免在每层跳出的地方添加break语句导致错误,简单高效但不推荐使用,容易产生错误

例如:ZZULIOJ:1070: 小汽车的位置

​
#include<stdio.h>

int main()

{

    int pretime=0,curtime,time,command,direction=0;
    
    /*定义之前时间为0

    默认

    direction为0时在y轴正半轴

    direction为1时在x轴负半轴

    direction为2时在y轴负半轴

    direction为3时在x轴正半轴*/

    int x=0,y=0;//初始化小车坐标为(0,0)

    while(~scanf("%d%d",&curtime,&command))//输入现在时刻

    {

        time=curtime-pretime;//计算走了多长时间

        pretime=curtime;//进行时间的更新

        switch(direction)

        {

            //方向判断一定要在命令之前,因为命令是改变下一次运动时的方向

            case 0:y=y+time*10;break;

            case 1:x=x-time*10;break;

            case 2:y=y-time*10;break;

            case 3:x=x+time*10;break;

        }

            //对于路程变化进行匹配

        switch(command)//指令直接对于方向进行操作

        {

            case 1:direction++;break;

            case 2:direction--;break;

            case 3:goto loop;break;

            //若为3,使用goto语句进行直接跳出并输出当前坐标

        }

        direction=(direction+4)%4;

        //避免方向为负值
    }  
    
    loop:printf("%d %d",x,y)

    return 0;
}

​

使用goto语句可以简单高效的完成任务

2.1.12类型溢出问题

相信在以往的做题过程中我们会发现很多时候都会有那么一个提示:

避免类型溢出

那么我们如何避免呢

很多时候发现在测试用例时

我们定义的int型变量往往能够输出正确的数值

但是在判断机上却发生了错误

原因在于我们理解的数据范围存在误差

譬如int的变量表示范围在之前简单的c程序设计上有提及

一般来说,int变量可以正确表达9位及以下的整数

准确来说其上限是2147483647

由阶乘表可得

int 能够准确表示12!及之前的数据

而double却能够准确表示21!及之前的数据

所以为了避免类型溢出,我们常常使用double命名变量计算

或者先除后乘避免溢出

附一个自己写的阶乘表

​
#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    double mul;

    for(int i=1;i<=n;i++)

    {

        mul=1;

        for(int j=1;j<=i;j++)

        {

            mul=mul*j;

        }

        printf("%-4d%-20.0lf\n",i,mul);

    }

    return 0;

}

​

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计科土狗

谢谢家人们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值