C语言:分支结构

C语言:分支结构

分支结构

问题引出

我们在程序设计往往会遇到如下的问题,比如下面的函数的计算

在这里插入图片描述

也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句

条件判断

根据某个条件成立与否,决定是否执行指定任务(操作)

在这里插入图片描述

条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达式),在程序中用真(1)和假(0)来吧表示。

关系运算及其表达式
关系运算符及其优先次序

关系运算符是用来进行比较的符号,C语言中提供了6种关系运算符:

在这里插入图片描述

关系表达式

关系表达式是指关系运算符将两个表达式连接起来组成的有意义的式子。

在这里插入图片描述

在C语言中,用1(非0)表示关系表达的值为真(条件成立),0表示关系表达式的值为假(条件不成立),即关系表达式的值要么是1(条件成立),要么是0(条件不成立)

问题引出

有时,只用一个简单的关系表达式无法完整地表达一个条件。

在这里插入图片描述

其中的条件需要用逻辑表达式来表示:x!=0&&a!=0,&&就是一种逻辑运算符。

逻辑运算及其表达式
逻辑运算符及其优先级
  • 逻辑运算符是构成成本复杂和符合条件的逻辑运算符

C语言中提供3种逻辑运算符:
在这里插入图片描述

逻辑表达式

在这里插入图片描述

用逻辑运算将关系表达式或逻辑量连接起来构成有意义的式子。
在这里插入图片描述

逻辑表达式中各种运算的优先级顺序如下:

在这里插入图片描述

C语言编译系统在表示逻辑运算结果时:真用1表示,假用0表示

案例

假设a = 4,b = 5,则:

!a             -- 0
a && b         -- 1
a || b         -- 1
!a || b        -- 1
4 && 0 || 2    -- 1

⼩贴⼠:

实际上,逻辑运算符两侧的运算对象不但可以是0和1,或是0和⾮0,⽽且也可以是字符型、实型和指针型等。系统最终是以0和⾮0来判定它们的真假的。例如:’c’ && ‘d’ 为1

用If语句实现分支结构

单分支:if…
  • 语法:
// 语法1:舍弃{}花括号
if(表达式)
    单语句;
    
// 语法2:保留{}
if(表达式)
{
    单语句或复合语句;
}
  • 流程图

在这里插入图片描述

  • 功能

    • 若表达式值为true(非0),则执行表达式后面的这个语句,执行完该语句后,继续执行if语句后的语句。

    • 若表达式值为0,则不执行表达式后面的语句而直接执行if语句后面的语句。

  • 说明:

    • 如果表达式(条件表达式)后面的是符合语句,则要用一段{}括起来。
  • 案例:

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

    • 代码:

#include <stdio.h>
{
    // 创建两个变量,用来存储两个操作数
    double x,y = -2;// 我们给y赋初值,假定<0
    // 从控制台输入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三个数,要求从控制台输入,并且求出最大值
    • 分析:
      • 通过控制台给a,b,c赋值
      • 创建一个变量max,用来存放a,b,c中的最大值,默认a是最大值
      • 让b,c和max进行比较,将最大值存入max
      • 代码:
#include <stdio.h>

int main()
{
 // 创建三个变量,用来存放a,b,c的值
    int a,b,c;
    
    // 通过控制台输入a,b,c三个数
    printf("请在控制台输入三个整数:\n");
    scanf("%d%d%d",&a,&b,&c);
    
   // 创建一个变量max
    int max = a;
    
    // 让最大值和b,c进行比较
    if(max < b)
    {
        max = b;// 如果max < b,就让b作为最大值
    }
    if(max < c)
    {
        max = c;// 如果max < c,就让c作为最大值
    }

    printf("%d,%d,%d中的最大值是%d\n",a,b,c,max);
    
    return 0;
}
双分支:if…else…

语法:

// 舍弃{}
	if(表达式)
        单语句1else
        单语句2// 针对以上写法,我们可以使用三目表达式:表达式?单语句1:单语句2
        
        
// 保留{}
	if(表达式)
    {
        单语句或者复合语句1}
	else
    {
        单语句或者符合语句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;
  // 通过键盘录入数据
  printf("请输入一个整数:\n");
  scanf("%d", &x);
  // 校验
  if (x < 0)
    y = -2;
  else
    y = 2;
  // 打印输出测试结果
  printf("x=%d,y=%d\n", x, y);
  return 0;
}

改为三目运算符的写法:

#include <stdio.h>
int main(int argc, char *argv[])
{
  // 需求:计算并输出下列分段函数的值
  // 创建两个变量,存放x,y的值
  int x, y;
  // 通过键盘录入数据
  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)语句1else
        if(表达式2)语句2else
            ...
            else
                if(表达式n)语句n;
                    else 语句n+1;
写法2:并列if..else..if....else..(推荐)
    if(表达式1)语句1else if(表达式2)语句2...
	else if(表达式n)语句n;
	else 语句n+1

流程图:

在这里插入图片描述

案例:

  • 要求:根据学生的成绩,对学生进行分级

    成绩>=90,A;

    成绩>=80,B;

    成绩>=60,C;

    成绩<60,D;

  • 代码:


/**
* 要求:根据学生的成绩,对学生进 行分级,
  成绩 >= 90,A
  成绩 >= 80,B
  成绩 >= 60,C
  成绩 < 60,D
*/
#include <stdio.h>
// 方式1:借助于执行顺序,减少判断的条件
int if_test1()
{
    // 创建一个变量,用来存放输入的成绩
    int score;
    // 通过控制台输入一个成绩
    printf("请输入一个整数:\n");
    scanf("%d",&score);
    
    // 校验,分级95
    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(..) 语句1else   语句2else
  	if(..) 语句3else   语句4

流程图:

在这里插入图片描述

注意:

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

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

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

案例:

/**
* 要求:根据学生的成绩,对学生进行分级,
成绩 >= 90,A
成绩 >= 80,B
成绩 >= 60,C
成绩 < 60,D
*/
#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 main(int argc, char *argv[])
{
  if_test1();
  if_test2();
  return 0;
}

如何摘除一个三位数中的每一位:

实现:123,个位数:1233%10=3;十位数:123 % 100 / 10 = 2,123 / 10 % 10 =2;百位数:123 / 100 = 1

用switch语句实现分支结构

我们可以使用switch实现多分支选择结构(多分支也被称作多路分支)

语法:

switch (表达式)
{
	case 常量表达式1:
  	语句1;
  	break;
	case 常量表达式2:
 	 语句2;
  	break;
	... 
    case 常量表达式n:
  	语句n;
  	break;
	default:
  	语句n + 1;
  	break; // 一般省略
}

在这里插入图片描述

说明:

​ ① switch后括号内的表达式可以是任何类型的表达式,但是表达式的值必须为 整数值(整型,字符型,枚

举)

​ ② 若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行

default后面的语句

​ ③ 每个case后面的常量表达式的值必须不相同,否则出现矛盾。

​ ④ 各个case和default出现的次序不影响执行结果。

​ ⑤ case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case;

​ ⑥ 多个case公用一组语句。

案例:
  • 要求:按照考试成绩的等级输出百分制分数段

  • 分析:

​ 设分段原则如下:

​ A级为85~100段;

​ B级为70~84段;

​ C级为60~69段;

​ D级为<60段;

​ 输⼊其它字符时为错。

  • 代码:
#include <stdio.h>
/*
- 要求:按照考试成绩的等级输出百分制分数段
- 分析:
设分段原则如下:
A级为85~100段;
B级为70~84段;
C级为60~69段;
D级为<60段;
输入其它字符时为错。
*/
int switch_test1()
{
  // 创建一个变量,用来存放考试等级
  char grade;
  // 通过控制台输入一个字符
  printf("input grade:\n");
  scanf("%c", &grade);
  // 校验,根据等级输出分段
  switch (grade)
  {
  case 'A':
    printf("85~100\n");
    break;
  case 'B':
    printf("70~84\n");
    break;
  case 'C':
    printf("60~69\n");
    break;
  case 'D':
    printf("<60\n");
    break;
  default:
    printf("Error\n");
  }
}
int main(int argc, char *argv[])
{
  switch_test1();
  return 0;
}
案例:
  • 要求:若要求按照百分制考试分数输出等级。

  • 分析:

​ 若分段原则如下:

​ 90~100 为A级;

​ 80~89 为B级;

​ 70~79 为C级;

​ 60~69 为D级;

​ 其它为E级。

  • 代码:
#include <stdio.h>
/*
- 要求:若要求按照百分制考试分数输出等级
- 分析:
若分段原则如下:
90~100 为A级; 9,10
80~89 为B级; 8
70~79 为C级; 7
60~69 为D级; 6
其它为E级。
*/
int switch_test2()
{
  // 创建一个变量,存放分段标识(等级)
  int grade;
  // 通过键盘录入一个数字
  printf("input grade:\n");
  scanf("%d", &grade);
  // 校验
  switch ((grade / 10))
  {
  case 10:
  case 9:
    printf("A\n");
    break;
  case 8:
    printf("B\n");
    break;
  case 7:
    printf("C\n");
    break;
  case 6:
    printf("D\n");
    break;
  default:
    printf("E\n");
  }
}
int main(int argc, char *argv[])
{
  switch_test2();
  return 0;
}

​ 80~89 为B级;

​ 70~79 为C级;

​ 60~69 为D级;

​ 其它为E级。

  • 代码:
#include <stdio.h>
/*
- 要求:若要求按照百分制考试分数输出等级
- 分析:
若分段原则如下:
90~100 为A级; 9,10
80~89 为B级; 8
70~79 为C级; 7
60~69 为D级; 6
其它为E级。
*/
int switch_test2()
{
  // 创建一个变量,存放分段标识(等级)
  int grade;
  // 通过键盘录入一个数字
  printf("input grade:\n");
  scanf("%d", &grade);
  // 校验
  switch ((grade / 10))
  {
  case 10:
  case 9:
    printf("A\n");
    break;
  case 8:
    printf("B\n");
    break;
  case 7:
    printf("C\n");
    break;
  case 6:
    printf("D\n");
    break;
  default:
    printf("E\n");
  }
}
int main(int argc, char *argv[])
{
  switch_test2();
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/935394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像矫正小白指南:从理论到实践的简单实现

一、引言 在日常生活中&#xff0c;使用手机拍全景照片或通过车载摄像头查看倒车影像时&#xff0c;常常会发现画面出现一定程度的变形。例如&#xff0c;建筑物的直线会被拉弯&#xff0c;或者车身轮廓显得不自然。这种现象就是图像畸变&#xff0c;它可能影响美观&#xff0…

【开源】基于SpringBoot框架的读书笔记共享平台 (计算机毕业设计)+万字毕业论文 T029

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

Master EDI 项目需求分析

Master Electronics 通过其全球分销网络&#xff0c;支持多种采购需求&#xff0c;确保能够为客户提供可靠的元件供应链解决方案&#xff0c;同时为快速高效的与全球伙伴建立合作&#xff0c;Master 选择通过EDI来实现与交易伙伴间的数据传输。 EDI为交易伙伴之间建立了一个安…

设计模式之工厂模式:从汽车工厂到代码工厂

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 工厂模式概述 想象一下你走进一家4S店准备买车。作为顾客&#xff0c;你不需要知道汽车是如何被制造出来的&#xff0c;你只需要告诉销售顾问&a…

Maven插件打包发布远程Docker镜像

dockerfile-maven-plugin插件的介绍 dockerfile-maven-plugin目前这款插件非常成熟&#xff0c;它集成了Maven和Docker&#xff0c;该插件的官方文档地址如下&#xff1a; 地址&#xff1a;https://github.com/spotify/dockerfile-maven 其他说明&#xff1a; dockerfile是用…

求解自洽场方程

Let’s break down the problem and the solving process step-by-step. Problem Overview The problem appears to be related to linear algebra and possibly quantum mechanics (given the mention of “eigenvalues” and “Hamiltonian” in the Chinese text). We hav…

【JavaEE进阶】关于Maven

目录 &#x1f334;什么是Maven &#x1f332;为什么要学Maven &#x1f38d;创建一个Maven项目 &#x1f384;Maven核心功能 &#x1f6a9;项目构建 &#x1f6a9;依赖管理 &#x1f38b;Maven Help插件 &#x1f340;Maven 仓库 &#x1f6a9;本地仓库 &#x1f6a…

免费下载 | 2024全球AI网络安全产品洞察报告

《2024全球AI网络安全产品洞察报告》的核心内容包括以下几个方面&#xff1a; AI对网络安全的影响&#xff1a; AI技术对网络安全产品领域产生重大影响&#xff0c;推动了以AI为核心的安全产品时代的到来。全球网络安全厂商正在将AI能力深度融合于安全产品体系中&#xff0c;以…

Android显示系统(10)- SurfaceFlinger内部结构

一、前言&#xff1a; 之前讲述了native层如何使用SurfaceFlinger&#xff0c;我们只是看到了简单的API调用&#xff0c;从本文开始&#xff0c;我们逐步进行SurfaceFlinger内部结构的分析。话不多说&#xff0c;莱茨狗~ 二、类图&#xff1a; 2.1、总体架构&#xff1a; 先…

源码编译安装MySQL

MySQL相应版本的tar包下载 在5.7的版本的MySQL编译安装的时候&#xff0c;需要依赖C语言的库文件【boost】&#xff0c; 如上图所示&#xff0c;如果你使用第一个MySQL的tar包&#xff0c;还需要去网上去下载boost即C语言的库文件&#xff0c;但是第二个tar包就既包含MySQL的源…

threejs 建筑设计(室内设计)软件 技术调研之一 画墙体

运用threejs 开发 建筑设计&#xff08;室内设计&#xff09;软件 技术调研 一 画墙体 实现功能&#xff1a; 左键点击开始画线&#xff0c;移动时下一端点跟随鼠标移动&#xff0c;产生活动的线&#xff0c;并标注线长&#xff0c;同时标注与前一段线的夹角。标注线和夹角分…

遗传算法与深度学习实战(27)——进化卷积神经网络

遗传算法与深度学习实战&#xff08;27&#xff09;——进化卷积神经网络 0. 前言1. 自定义交叉算子2. 自定义突变操作符3. 进化卷积神经网络小结系列链接 0. 前言 DEAP toolbox 中提供的标准遗传操作符对于自定义的网络架构基因序列来说是不够的。这是因为任何标准的交叉算子…

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子&#xff1b;138度的低温锡&#xff08;锡膏&#xff09;&#xff0c; 第一次使用&#xff0c;直接拿东西挑一点涂在引脚上&#xff0c;不知道多少合适&#xff0c;加热台加热到260左右&#xff0c;放在上面观察锡融化&#…

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…

深入探讨可调电位器:原理、应用及编程实现

在电子电路和嵌入式系统中&#xff0c;可调电位器是一种常见且实用的元件&#xff0c;用于调节电压或电阻。无论是硬件设计还是控制系统开发&#xff0c;可调电位器都扮演着重要角色。本文将从可调电位器的工作原理、常见应用及其在C编程中的实际使用&#xff0c;帮助读者深入了…

MVC配置文件及位置

配置文件位置 默认位置 WEB-INF目录下&#xff0c;文件名&#xff1a;<servlet-name>-servlet.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.…

26. Three.js案例-自定义多面体

26. Three.js案例-自定义多面体 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它支持 WebGL 渲染&#xff0c;并提供了多种配置选项。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选参数对象&…

Java_实例变量和局部变量及this关键字详解

最近得看看Java,想学一学Flink实时的东西了&#xff0c;当然Scala语法也有这样的规定&#xff0c;简单看一下这两个吧&#xff0c;都比较容易忽视 实例变量和局部变量 实例变量和局部变量是常见的两种变量类型&#xff0c;区别 作用域&#xff1a; 实例变量&#xff1a;实例变…

C++50道经典面试题

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 作为一种通用且面向对…