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

Linux基础25-C语言之分支结构Ⅱ【入门级】

用if语句实现分支结构

单分支:if…
  • 语法:

    //语法1:舍弃{}
    if(条件表达式);
    	单语句;
    //语法2:必须保留{}
    if(条件表达式)
    {
        单语句或者复合语句;
    }
    
  • 流程图

    在这里插入图片描述

  • 功能

    • 若表达式值为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的代码。
    • 若表达式值为假(0)则不执行表达式后面的语句而直接执行if后面的语句。
  • 说明:

    • 如果表达式后面的是复合语句,则要用一对花括号{}括起来,单语句可有可无。
  • 案例:

    • 要求:计算并输出下列分段函数的值:

      在这里插入图片描述

    • 流程图:
      在这里插入图片描述

    • 代码:

      #include <stdio.h>
      int main(int argc,char *argv[])
      {
      // 创建两个变量,用来存储两个操作数
      double x,y = -2;
      // 从控制台输入x
      printf("请输入一个数,作为x的值:\n");
      scanf("%lf",&x);
      // 校验
      if (x >= 0) y = 2;
      printf("x=%lf,y=%lf\n",x,y);
      return 0;
      }
      
    • 运行结果:
      在这里插入图片描述

  • 案例:

    • 需求:有a,b,c三个数,要求从控制台输入,并求出最大值

    • 分析:

      1.通过控制台输入a,b,c的值

      2.创建一个变量max,用来存放a,b,c中得最大值,默认a是最大值(这样可以减少一次判断)

      3.让b,c和max进行比较,将最大值存入max

    • 代码:

      #include <stdio.h>
      int main(int argc,char *argv[])
      {
      // 创建四个变量a,b,c,max
      int a,b,c,max;
      // 通过键盘录入数据给a,b,c
      printf("请输入三个整数:\n");
      scanf("%d%d%d",&a,&b,&c);
      // 默认a是最大值
      max = a;
      // 让最大值分别和b和c比较
      if (max < b) max = b; // b是a,b中的最大值
      if (max < c) max = c; // 其实就是a,b中的最大值和c比较,得到三者中的最大值
      printf("%d,%d,%d中的最大值是%d\n",a,b,c,max);
      return 0;
      }
      
      
    • 运行结果:
      在这里插入图片描述

​ 有可能产生的问题:

​ ①scanf()同时输入多个变量时,默认使用空格、tab、回车键进行区分。

​ ②在变量赋值前使用变量,导致运算结果错误(变量为赋值,系统会给变量分配随机数)

双分支if…else…

语法:

//语法1:舍弃{}
if(表达式)
    单语句1;
else
    单语句2;
//语法2:保留{}
if(条件表达式)
{
    单语句1或者复合语句1;
}
else
{
    单语句2或者复合语句2;
}

注意:else语句本身不能单独使用,必须和if配合使用

流程图:
在这里插入图片描述

功能:

​ 若表达式的值为1,则执行语句1;否则执行语句2。不管条件表达式成不成立都需要执行一个语句,其次需要注意的是,语句1和语句2都可以是单语句或者复合语句。

说明:

​ if…else…结构可以实现双分支选择结构。C语言允许if…else…结构嵌套。即在语句1与语句2中有可以包含完整的if语句或者if…else…结构,并且这种嵌套可以多层(为了保证程序的执行效率,建议不超过4层)。利用if…else…结构的嵌套,可以实现多分支选择结构

案例:

  • 需求:计算并输出下列分段函数的值:

在这里插入图片描述

  • 流程图
    在这里插入图片描述

  • 代码:

    #include <stdio.h>
    int main(int argc,char *argv[])
    {
    // 创建两个变量存储x,y
    int x,y;
    // 通过键盘录入x
    printf("请输入一个整数:\n");
    scanf("%d",&x);
    // 校验
    if (x < 0)
    y = -2;
    else
    y = 2;
    // 打印输出测试结果
    printf("x=%d,y=%d\n",x,y);
    return 0;
    }
    
    
  • 运行结果:

在这里插入图片描述

注意:对于单语句的双分支,我们可以使用三目(三元)运算符的写法简化

三目运算符

语法:

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

说明:

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

​ ②三目运算符的写法实际上就是单语句的双分支语句的缩略写法

案例:

  • 需求:将上面双分支的案例改造为三目运算符得写法

  • 代码:

    #include <stdio.h>
    int main(int argc,char *argv[])
    {
    // 创建两个变量存储x,y
    int x,y;
    // 通过键盘录入x
    printf("请输入一个整数:\n");
    scanf("%d",&x);
    // 校验
    y = x < 0 ? -2 : 2;
    // 打印输出测试结果
    printf("x=%d,y=%d\n",x,y);
    return 0;
    }
    
  • 运行结果:

在这里插入图片描述

多分支:if…else if…else

语法:

//写法1:嵌套if...else(不推荐)
if(表达式)语句1;
else
    if(表达式2)语句2;
	else
        ...
        else
            if(表达式n)语句n;
			else 语句;
//写法2:并列if...else if...else...(推荐)
if(表达式1)语句1;
else if(表达式2)语句2;
...
[else if(表达式n)语句n;]
[else 语句n+1;]//else是可选的,写不写由我们的最终需求决定

流程图:

在这里插入图片描述

注意:多分支中,同一时刻只能满足一个分支。

案例:

  • 需求:根据学生得成绩,对学生进行分级:

    • 成绩>=90 A
    • 成绩>=80 B
    • 成绩>=60 C
    • 成绩<60 D
  • 代码:

    #include <stdio.h>
    // 方式1:借助于执行顺序,减少判断条件
    int if_test1()
    {
    // 创建一个变量,用来存储输入的成绩
    int score;
    // 通过键盘录入成绩
    printf("请输入一个整数:\n");
    scanf("%d",&score);
    // 校验
    if (score >= 90) printf("A\n");
    else if (score >= 80) printf("B\n");
    else if (score >= 60) printf("C\n");
    else printf("D\n");
    }
    // 方式2:不借助执行顺序,做更精确的判断
    int if_test2()
    {
    // 创建一个变量,用来存储输入的成绩
    int score;
    // 通过键盘录入成绩
    printf("请输入一个整数:\n");
    scanf("%d",&score);
    // 校验
    if (score >= 60 && score < 80) printf("C\n");
    else if (score >= 80 && score < 90) printf("B\n");
    else if (score >= 90) printf("A\n");
    else printf("D\n");
    }
    int main(int argc,char *argv[])
    {
    if_test1();
    if_test2();
    return 0;
    }
    
if…else结构注意点
  • if…else结构中的语句1和语句2都可以是复合语句。

  • 在if…else结构中,语句1和语句2都可以是空语句。

在这里插入图片描述

if语句的嵌套

语法:

if (..)
	if (..) 语句1;
	else 语句2;
else
	if (..) 语句3;
	else 语句4;

流程图:
在这里插入图片描述

注意:

①else总是与前面最近的未配对的if配对使用

②可通过增加{}来确定配对关系

③只要if中包含if,都属于是if语句的嵌套

案例:

#include <stdio.h>
// 方式1:借助于执行顺序,减少判断的条件
int if_test1()
{
// 创建一个变量,用来存放输入的成绩
int score;
// 通过控制台输入一个成绩
printf("请输入一个整数:\n");
scanf("%d",&score);
// 校验,分级 95
if(score < 0 || score > 100)
{
printf("您的输入不合法!\n");
}
else
{
if(score >= 90)
{
printf("A\n");
}
else if(score >= 80)
{
printf("B\n");
}
else if(score >= 60)
{
printf("C\n");
}
else
{
printf("D\n");
}
    }
}
// 方式2:不借助于执行顺序,做更精准的判断
int if_test2()
{
// 创建一个变量,用来存放输入的成绩
int score;
// 通过控制台输入一个成绩
printf("请输入一个整数:\n");
scanf("%d",&score);
// 校验,分级
if(score < 0 || score > 100)
{
printf("您的输入不合法!\n");
}
else if(score >= 60 && score < 80)
{
printf("C\n");
}
else if(score >= 80 && score < 90)
{
printf("B\n");
}
else if(score >= 90)
{
printf("A\n");
}
else
{
printf("D\n");
}
}
int if_test3()
{
// 需求:判断一个数是奇数还是偶数
int num;
printf("请输入一个整数:\n");
scanf("%d",&num);
// 校验
if(num == 0)
{
printf("0既不是偶数也不是奇数!");
}
else
    {
if(num % 2 == 0)
{
printf("%d是偶数!\n",num);
}
else
{
printf("%d是奇数!\n",num);
}
}
}
int main(int argc,char *argv[])
{
if_test1();
if_test2();
if_test3();
return 0;
}

小贴士:

如何拆出一个三位数中的每一位:

实现:123,

个位:123%10=3

十位:123%100/10=2

百位:123/100=1

经典面试题:求水仙花数

解释:一个n位数的各个数字的n次方等于这个数本身,符合这种规则的数叫做水仙花数


http://www.kler.cn/a/552982.html

相关文章:

  • matplotlib 如何是的横坐标纵向显示
  • 实战开发coze应用-姓氏头像生成器(下)
  • 【开源免费】基于SpringBoot+Vue.JS医疗挂号管理系统(JAVA毕业设计)
  • python绘图之箱型图
  • 如何通过Bigemap Pro实现面合并和相交
  • 【大模型】DeepSeek 的人工智能发展之路
  • 前端对话框项目 react如何实时接收,Node.js 服务端转发Coze API响应结果详解
  • AOSP Android14 部分页面使用触摸会崩溃
  • 【数据结构-并查集】力扣1202. 交换字符串中的元素
  • 【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析
  • 从中心化到点对点:视频通话SDK组件EasyRTC如何通过WebP2P技术实现低延迟通信
  • 双脑微状态:一种量化任务驱动的脑间非对称性的超扫描EEG新方法
  • DeepSeek模型快速部署教程-搭建自己的DeepSeek
  • UE_C++ —— Container TMap
  • Spark 和 Hive 的关系与区别
  • 旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)
  • windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI
  • 【Postgresql】Windows 部署 Postgresql 数据库 (图文教程)
  • Cursor实战:Web版背单词应用开发演示
  • C# 实现完善 Excel 不规则合并单元格数据导入