当前位置: 首页 > news >正文

【C基础篇】选择结构与循环控制

【C基础篇】选择结构与循环控制

  • 一、选择结构
    • 1.if语句的基本形式
    • 2.if...else 语句
    • 3.else if语句
    • 4.条件运算符
    • 5.switch语句
    • 6.if...else语句和switch语句区别
    • 二、循环控制
    • 1.while语句
    • 2.do...while语句
    • 3.for循环
    • 4.循环嵌套
  • 三、转移语句
    • 1.goto语句
    • 2.break语句
    • 3.continue语句

一、选择结构

1.if语句的基本形式

if语句首先要判断表达式的值,然后根据该值的真假情况决定去执行后续的流程图。
在这里插入图片描述

//模拟员工考勤 工号和密码都对则考勤成功
#include<stdio.h>
int main()
{
    int id,passwd;
    printf("请输入您的工号:\n");
    printf("请输入您的密码:\n");
    scanf("%d",&id);
    scanf("%d",&passwd);
    if(id == 12 && passwd == 14)
    {
        printf("考勤成功!\n");
    }
    if(id != 12 && passwd != 14)
    {
        printf("对不起,您输入的工号或者密码错误!\n");
    }
    return 0;
}

2.if…else 语句

if语句只给出了条件为真是,需要执行的操作,当条件为假是,未给出相应的执行操作。

if (表达式)
{
    语句1;//表达式值为真值,则执行此语句
}
else
{
    语句1;//表达式值为假值,则执行此语句
}

3.else if语句

利用if和else关键字的组合,可以实现else if语句,对一系列互斥条件进行检验,从而解决较为复杂的判断和决策问题。

if(表达式1)
{
    语句1;//表达式1为真,执行此语句
}
else if(表达式2)
{
    语句2;//表达式2为真,执行此语句
}
...
else if(表达式n)
{
    语句n;//表达式n为真,执行此语句
}
else
{
    语句n+1;//前面所有判断都不成立,执行此语句
}

4.if的嵌套形式
if语句中可以包含一个或多个if语句,称之为if的嵌套。

if(表达式1)
{
    if (表达式2)
    {
        语句块1;
    }
    else
    {
        语句块2;
    }
}
else
{
    if(表达式3)
    {
        语句块3;
    }
    else
    {
        表达式4;
    }
}

4.条件运算符

条件运算符可以对一个表达式中值的真假进行检验,根据检验结果返回另外两个表达式中的一个。

max = (a > b) ? a : b;

//等效表达
if(a > b)
{
    max =  a;
}
else
{
    max = b;
}

5.switch语句

switch是多路分支选择语句

switch (表达式)
{
case 情况1:
    语句1;
    break;
case 情况2:
    语句2;
    break;
    ...
case 情况n:
    语句n;
    break;
default:
    break;
}

6.if…else语句和switch语句区别

语法的比较

  • if需要配合else关键字;switch需要配合case关键字;
  • if语句先对条件进行判断,而switch语句是后进行判断。

语法的比较

  • if…else适用少量的检验
  • switch每个case检验速度相同,default比case快。
  • 高于4个检验时,使用switch语句较好。

二、循环控制

1.while语句

使用while语句可以解决当谋个条件满足时反复执行谋个循环体的问题。

while (表达式)
{
    语句块(循环体);
}
//无法终止的循环被称为死循环或无限循环

2.do…while语句

在某些情况下,不论条件是否满足,都需要执行一次循环过程,可以采用do…while语句。

do
{
    语句块(循环体);
} while (表达式);
/* === 执行过程 === */
// 先执行一次循环体,然后判断表达式
// 表达式为真,返回重新执行循环体语句
// 再次判断表达式,表达式为假,循环结束

while和do…while区别:
while先判断,后执行;
do…while先执行后判断。

3.for循环

for语句的一般表达式

for (表达式1; 表达式2; 表达式3)
{
    语句块(循环体);
}

4.循环嵌套

while与while

while (表达式)
{
    语句块;
    while (表达式)
    {
        语句块;
    }
    
}

do…while和do…while

do
{
    语句块;
    do
    {
       语句块;
    } while (表达式);
    
} while (表达式);

for和for

for (表达式; 表达式; 表达式)
{
    语句块;
    for (表达式; 表达式; 表达式)
    {
        语句块;
    }
    
}

类似嵌套形式多样。

三、转移语句

1.goto语句

goto语句为无条件转移语句,可以使程序跳到函数内部的任意一条可执行语句处。
goto关键词后面带一个标识符,该标识符是同一个函数内某条语句的标号,标号可出现在任何可执行语句的前面,并且以一个:作为后缀。其一般形式如下:

goto 标识符;
//"下一步" or "退出"
#include<stdio.h>
int main()
{
    int num;//循环变量
    int putnum;//输入数值
    for(num = 1;num <10;num ++)
    {
        printf("当前次数:%d\n",num);
        do
        {
            printf("请输入一个数:\n");
            printf("(0 exit,99 continue)\n");
            scanf("%d",&putnum);
            if(putnum == 0)
            {
                goto exit;
            }
        }
         while (putnum != 99);
    }
    exit:
        printf("退出程序!\n");
    return 0;
}

2.break语句

有时候会遇到不管表达式检验结果如何,都需要强行终止循环,这时可以使用break语句;break语句用于终止并跳出当前循环,然后继续执行后面的程序。
break语句不能用于除循环语句和switch语句之外的其他任何语句中;另外,在多层循环嵌套下,使用break语句只能跳出当前循环。

#include<stdio.h>
int main()
{
    int i;
    for ( i = 0; i < 15; i++)
    {
        if(i == 10)
        {
            printf("Break here\n");
            break;
        }
        printf("the number is:%d\n",i);
    }
    return 0;
}

3.continue语句

某些情况下,程序需要循环头部继续执行,而不是跳出循环,此时可以使用continue语句。
continue语句作用是结束本次循环,即跳过循环体中尚未执行的部分,直接执行下一次的循环操作。

#include<stdio.h>
int main()
{
    int i;
    for ( i = 0; i < 15; i++)
    {
        if(i == 10)
        {
            printf("Continue here\n");
            continue;
        }
        printf("the number is:%d\n",i);
    }
    return 0;
}

在这里插入图片描述

相关文章:

  • 一位程序员感慨:互联网行业太过共享,才导致了门槛越来越低
  • 【图像隐写】基于matlab遗传算法的奇异值分解数字水印嵌入提取【含Matlab源码 2115期】
  • 计算机视觉中的细节问题(二)
  • Javascript 代码规范
  • linux驱动开发(2)开发流程
  • 【云原生】设备云之前端可视化编程
  • 计算电磁学(二)分析方法
  • 【Django】开发日报_3.2_Day:模板继承
  • 探索原味BFF模式
  • unity初学 Mstudio教程
  • Complete Partition Of Array
  • 单节点k8s—自签名证书—四层负载均衡—helm安装rancher
  • 高频面试题:谈谈你对 Spring Boot 自动装配机制的理解
  • Apple Xcode 14 (14A309) 正式版发布(含下载)
  • mysql 执行计划 type详解
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 0基础学习移动端适配
  • 11111111
  • Angular2开发踩坑系列-生产环境编译
  • Apache的80端口被占用以及访问时报错403
  • ES学习笔记(12)--Symbol
  • java2019面试题北京
  • JavaScript 奇技淫巧
  • Javascript编码规范
  • JavaScript函数式编程(一)
  • k个最大的数及变种小结
  • Linux gpio口使用方法
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PAT A1050
  • Spark RDD学习: aggregate函数
  • STAR法则
  • XForms - 更强大的Form
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 二维平面内的碰撞检测【一】
  • 关于List、List?、ListObject的区别
  • 警报:线上事故之CountDownLatch的威力
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 排序算法学习笔记
  • 前嗅ForeSpider教程:创建模板
  • 使用putty远程连接linux
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (2)(2.10) LTM telemetry
  • (bean配置类的注解开发)学习Spring的第十三天
  • (function(){})()的分步解析
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (分类)KNN算法- 参数调优
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net Application的目录