一文搞定C控制语句:分支和跳转

简介: 一文搞定C控制语句:分支和跳转

文章目录


小叙


单分支 if 语句


二分支 if else 语句


多分支 else if 语句


多层嵌套的 if 语句


逻辑运算符


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


break 和 continue


多重选择:switch 和 break


goto 语句


字符输入输出函数 getchar() 和 putchar()


ctype.h 系列的字符函数


小结


小叙



随着循环的学习,我们可以用程序循环重复执行任务,要知道计算机最擅长做计算和循环了,为了解决更复杂的问题,C还提供了控制和组织程序的分支结构。还将学习逻辑运算符,使用逻辑运算符使得条件判断体系更加完善。一点点积累吧。



单分支 if 语句


语法:


if (关系表达式)
  语句;


栗子:


if (i<8)
  printf("小屁孩");//简单语句
if (i<8)
{
  i+=18;
  printf("\n");//复合语句
}


if 语句由复合语句构成时,整个 if 语句仍然被视为一条语句。


#include<stdio.h>
int main()
{
    int a;
    printf("请输入你的成绩\n");
    while (scanf("%d",&a)<100)
    {
    if (a>0 && a<60)
        printf("不及格\n");
    if (a>=60 && a<80)
        printf("良好\n");
    if (a>=80 && a<=100)
        printf("牛啊\n");
    if(a==0)
        printf("wc!!!\n");
        return 0;
    }/* code */
}


不难发现使用单分支还是有点不够意思,下面 if else解决你的烦恼。




二分支 if else 语句



if else 可以实现在两条语句之间进行选择


语法:


if (关系表达式)
  语句1;
else
  语句2;


如果条件为真,就去执行语句1,否则就去执行语句2


这里提醒自己一下,C并没有要求代码一定要缩进,但是好的缩进的代码看着一目了然,维护也容易,Python就是严格要求缩进的语言,我觉得它是追求极致的简洁,用缩进来省略掉花括号。可以理解一下


实例:


if(a>0)
  printf("逗号");
  a++;
else
  printf("sg");


上面代码就会出错,因为if和else之间只允许有一条语句(可以是简单语句也可以是复合语句)


修改:加上花括号就构成了一条复合语句


if(a>0)
{
  printf("逗号");
  a++;
}
else
  printf("sg");


多分支 else if 语句


#include<stdio.h>
int main()
{
    int i;
    printf("请输入\n");
    scanf("%d",&i);
    if(i>0 && i<60)
        printf("不及格\t");
    else if (i>=60 && i<70)
        printf("及格\t");
    else if (i>=80 && i<100)
        printf("得奖\t");
    else if (i==100)
        printf("李云龙向你竖起大拇指\t");
    else
        printf("wc\t");
}


多层嵌套的 if 语句


#include<stdio.h>
int main(){
    int i;
    printf("请输入");
    scanf("%d",&i);
    if(i>3)
        if(i<=8)
            printf("xiao hai");
        else
            printf("da hai?");
}


逻辑运算符



&&  //逻辑与(and)
||  //逻辑或(or)
!  //逻辑非(no)
a && b  //a和b都为真,整体才为真
a || b  //a或b有一个为真,则整体就为真
! a>b //如果a>b是成立的,为真,那么,!a>b就为假
1>2 && 2>1  //假,只有左右同时为真才为真,一个为假就为假
1>2 || 2>1  //真,有一个为真就为真
!1>2  //真,因为1<2


这里有一个头文件


#include <ios646.h>


引入这个头文件后,可以使用and代替&&,or代替||,not代替!


练习输出&&时间 == 完美


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



C提供了条件表达式作为表达if else语句的一种便捷方式


语法:

a?b:c;


如果条件a为真那么执行b,否则执行c

需要3个运算对象,每个运算对象都是一个表达式


当然,任何事物都有优点缺点,月有阴晴圆缺。


那么优点就是简洁,缺点就是表达式不能是复合语句了,只能是一个表达式。


break 和 continue


一般来说,程序进入循环,在下一次循环测试之前会执行循环体中的所有语句。break 和 continue 语句可以根据循环体中的测试结果来忽略一部分的循环内容,甚至结束循环。


continue语句


在3种循环都可使用,执行到该语句时,就会跳过本次迭代的剩余部分,并开始下一轮的迭代


如果在嵌套循环内里使用,则只会影响包含该语句的内层循环


continue;


break语句


程序在执行到循环中的break语句时,会终止包含它的循环,并去执行下一阶段,

break 语句位于嵌套循环内,它只会影响包含它的当前循环


break;


多重选择:switch 和 break


if else if 可以实现多个选项中进行选择,但是,大多数情况下,使用switch语句更方便。

switch 括号中的测试表达式的值应该是一个整数值(包括 char 类型)


case标签必须是整数类型(包括char类型)的常量或整型常量表达式(表达式中只含整型常量)


不能用变量做case标签


如果没有break就会从匹配标签开始执行到switch末尾

default就是都没有匹配成功的情况下执行default里的语句


构造:


#include<stdio.h>
int main(){
    switch (expression)
    {
    case /* constant-expression */:
        /* code */
        break;
    default:
        break;
    }
}


多重标签



switch (expression)
    {
    case 'a'/* constant-expression */:
    case 'A'    
            /* code */
        break;
    default:
        break;
    }


如果expression是字母大写A或小写a都执行下面的code


goto 语句


goto语句建议“谨慎使用”或者说根本用不到


goto语句分为两部分:goto和标签名,标签🏷的命名遵循变量名的命名规则。比如:


goto part1;
……
part1: printf("出错了");


原则上,在C程序不需要用到 goto 语句。

C程序员可以接受一种 goto 的用法,出现问题时从一组嵌套循环中跳出(一条brea语句只能跳出一侧层循环)


字符输入输出函数 getchar() 和 putchar()


getchar()函数不带任何参数,它从输入队列中返回下一个字符。例如:


ch = getchar();
//与下面语句的效果相同
scanf("%c",&ch);


putchar()函数打印它的参数。例如:


putchar(ch);
//与下面语句的效果相同
printf("%c",ch);


这些函数只处理字符,所以它们比通用的scanf()和printf()更快,更简洁,且不需要转换说明,通常定义在stdio.h的头文件里


ctype.h 系列的字符函数


20210707153431591.png


小结



1.重点掌握 C的 两大分支结构 if else 和 switch及嵌套,以及 break 和 continue的使用


2.一些运算符和库函数的记忆和使用


3.goto 语句的了解及用法



相关文章
|
7月前
|
机器学习/深度学习 计算机视觉
《深度剖析:残差连接如何攻克深度卷积神经网络的梯度与退化难题》
残差连接通过引入“短路”连接,解决了深度卷积神经网络(CNN)中随层数增加而出现的梯度消失和退化问题。它使网络学习输入与输出之间的残差,而非直接映射,从而加速训练、提高性能,并允许网络学习更复杂的特征。这一设计显著提升了深度学习在图像识别等领域的应用效果。
278 13
|
10月前
|
人工智能 监控 安全
网络监控软件
【10月更文挑战第17天】
294 68
|
关系型数据库 MySQL Linux
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
在Linux系统中使用tar.xz压缩包安装MySQL数据库的详细步骤。包括下载MySQL压缩包,解压到指定目录,创建mysql用户和组,设置目录权限,初始化MySQL,配置my.cnf文件,启动服务,以及修改root用户密码。此外,还提供了如何设置Windows远程登录MySQL服务器的方法。
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
|
前端开发 JavaScript 开发者
请详细介绍React挂载阶段的方法。
请详细介绍React挂载阶段的方法。
177 9
|
存储 消息中间件 对象存储
谈谈 RocketMQ 5.0 分级存储背后一些有挑战的技术优化
谈谈 RocketMQ 5.0 分级存储背后一些有挑战的技术优化
133349 354
|
存储 项目管理 开发工具
如何使用 Git Clean 清理 Git 存储库?
【4月更文挑战第9天】
1715 9
如何使用 Git Clean 清理 Git 存储库?
|
机器学习/深度学习 算法 TensorFlow
强化学习是一种通过与环境交互来学习最优行为策略的机器学习方法。
强化学习是一种通过与环境交互来学习最优行为策略的机器学习方法。
|
云计算
阿里云短信费用收费价格表
阿里云短信费用收费价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
309 1
|
网络协议 网络架构
ensp中默认路由和静态路由实验
默认路由的作用是将无法匹配路由表中其他路由表项的数据包转发到指定下一跳路由器。在实际网络中,默认路由通常用于简化路由配置,通常在网络边缘的路由器上配置 静态路由的作用是将特定网络的数据包转发到指定下一跳路由器。在实际网络中,静态路由通常用于更精细地控制数据包的转发,通常在网络核心路由器上配置。
592 6
ensp中默认路由和静态路由实验
|
NoSQL Ubuntu 关系型数据库
轻松上手 Docker:一键部署常用软件环境指南
轻松上手 Docker:一键部署常用软件环境指南
1555 0