chapter 4 :选择结构程序设计

简介: chapter 4 :选择结构程序设计

4.1 绪论


前面 咱学完了顺序结构 我们了解到 编程 是严格自上而下去执行的,但是你要明白他不可能永远这么简单 ,当你写一个复杂的程序时,如果你只用一些自上而下的结构你会代码写的很复杂,有可能写不出来 ;所以衍生出了选择结构 和 循环结构;

现在去学习选择结构 ,啥是选择结构, 其实对于本章而言 选择结构 就是两个 .

一个是if语句;

还有就是switch语句 ;

前者一般是用于两个选择;多个并列就得else if ,再就要嵌套

而switch 可以用于多个并列;

怎么区别这三者

1670489439193.jpg

1670489451049.jpg


4.2 if语句的一般形式


那么咱们看一下 if 语句的一般形式 :


if(…)

语句;

这个语句可以是一个简单句,就一个语句;也可以是复合语句。但是复合语句必须用花括号括起来。

if(3)
a=1;
b=2;
这句话的意思是if后面之后a=1这一个语句。b=2不属于if语句的子句。



这是没有else 的if语句,如果满足执行 不满足直接跳过


还有就是 包括else的语句

if (…)

语句;

else

语句;


这是最简单的,只有一层if else

如果现在 咱们 有好几层怎么办


if(…)语句1;

else if 语句 2;

else if 语句3 ;

else if 语句4 ;

else 语句5;


记住这不是 嵌套 !!!!顶多算if else 并列!!


4.3 关系运算符


1.关系运算符 :关系 就是大于 小于 这些


一共有六种 分别是 :
>;
< ;
>=;
<=;
==;
!=;
注意:
1.这六种 优先顺序不是完全一样的 ,其中前四种 优先顺序大于 后两种 ;
2.但是它们都属于 关系运算符之中 ,那么剩下的其他运算符优先顺序是如何的呢
括号-> 单目运算符 ->算数运算符 ->关系运算符-> 赋值运算符 (具体见chapter 3 图表)


2.关系运算表达式;

就是表达式 加上了关系运算符构成的式子 ;


注意:

1.所谓的关系表达式一般都放在 判断括号里面 也有放在一般的语句里面

2.但是把 注意 其结果 只有两个数值 1或 0 是代表真和假。记住结果是数值啊 可以赋值滴!!!


4.4 逻辑运算符


1.逻辑运算符:记住 逻辑


逻辑运算符一共就有三个;
&&  ;这是 “与” 的意思 ,什么是与,那就是当左边与右边都是正确的时候 即1的时候,整个结果才是1;如果不全是1,哪怕有一个是0;那都会导致整个结果输出的是0;即false的意思;
||   ;这是 “或” 的意思,什么是或,或是只要有一个是正确的 那么这个就是正确的 ,只有当两个都是0的时候,那时输出的结果才是错误的;
! ; 否定 ;什么意思呢,否定就是正确变成错误 错误变正确;0-1;1-0;
注意:
1.那么这三个运算符他有什么先后优先级呢;首先是!其次是&&然后是||。
2.那么逻辑运算符整体和其他运算符怎么看先后
括号->单目运算符(包括 !)->算数运算符->关系运算符->赋值运算符->&& ->||
ps:!属于单目运算符;


2.逻辑表达式

包含逻辑运算符的表达式;

注意:

1.假如逻辑表达式在判断框子里面;逻辑表达式的结果只能输出整数0或1;0 有false的意思 1隐含true的意思;但是括号可以是除了0/1以外的其他数字。


比如 if(a) a等于1 2 3 4 5时,属于1=true 执行;a=0时属于0=false不执行
再比如!0就是输出结果为1;;;;; !1 , !2,  !  3,输出结果为0
而0 包含有false的意思 其他123456等 均含有true的意思;
#include <stdio.h>
int main(){
  int a;
  a=0;
  if(a){
  printf("%d",a);
  }
  else printf("aaaaaaaaaaaaaa"); 
  return 0;
}
在这个式子里面,如果a=123456789 等任意个非0数值,都会执行printf("%d",a)
else 是当等于0时候执行的;
输出aaaaaaaaaaaaaaa;
#include <stdio.h>
int main(){
  int a;
  a=1;
  if(!a){
  printf("%d",a);
  }
  else printf("shabi"); 
  return 0;
}


逻辑运算表达式 没必要全部运行 ,比如计算机会从左到右去运行一个东西;当运行到能判断这个表达式结果的时候 那么他就会跳出来 不运行了;


4.5 bool型


1 0 这种有逻辑关系判断出来的结果是否可以直接存放在一个变量里面呢?

我觉得可以 但是用 int float 还是 我感觉都不妥,我要存在一个特殊的储存变量里面 ,那么规定 bool;

#include <stdio.h>
int main(){
  float sc;
  scanf("%f",&sc);
  bool a,b;
  a=sc>=60;
  b=sc<=69;
  printf("%d %d ",a,b);
  if(a==true&&b==true) printf("the grade is c\n");
  return 0;
}

bool的存储结果是1;但是等价于true ;所以这段代码是可以执行的;


头文件必须写#include (有些编译器可以不写)


4.6 条件表达式


啥是条件, 就是正确就执行 ,错误就执行另外一个 。if else 叫做语句 ,我们不用这个语句,咱说的是运算符 。

一般形式:


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


表达式一 :是用来判断条件的可以是 关系 可以是逻辑 ,一般可以用括号括起来。当然也可以不用,后面的 “?&&:” 是必须加上:一起构成条件运算符,缺一不可;


表达式2 表达式3 :他们可以是运算表达式 数值 赋值 函数等表达式…


总的来说一下就是:表达式1判断 ,如果正确 ,直接执行表达式2 ;如果错误 去执行 表达式3;

举个栗子把。


判断一个字母 是否为大写字母 是 写出小写 不是 不变
#include<stdio.h>
int main(){
  char ch;
  scanf("%c",&ch);
  ch=(ch>='A'&&ch<='Z')?ch+32:ch;
  printf("%c\n",ch);
  return 0; 
}

1670489601070.jpg


4.7 嵌套语句


if 语句的嵌套结构


前面咱们 遇到了 分支具体我也不举例了,就是那else if


这儿咱们用的是 if嵌套

if (…) 语句1;

if(…)语句2;

else 语句3;

else

if(…) 语句4;

else 语句5;


这是属于嵌套 if 后面 接着 if 不是else

注意:

1.这么多 if ,到底 那个 才是 谁的else ; else 与他最近的一个if 相遇;

比如 else 与语句4 那个 if结合 一般都是最近 的

自下而上 第二个 else 没有if 与之匹配 那么 他就属于 第一级别的 else

再上面 else 与if 语句2 匹配

最上面 的if自己成一个总的 if;


同理 咱们 看看 下面 这个例子:
if ()
if()
else 
if()
else
下面四行都是内嵌的  总的第一级别 只有一个 那就是 第一行的 if()


2.他与 else if的区别 这个是属于第一级别 也有 第二级别的 第一级别 &第二级别 是不一样的;

而那个else 都是 属于一个级别 ()内也都是属于 同一类型 的判断 条件 ;

#include <stdio.h>
int main(){
  int a;
  scanf("%d",&a);
  if(a<0) printf("y=-1\n");
  else if(a=0) printf("y=0\n");
  else  printf("y=1\n");
  return 0;
}
在这个例子中,使用的的else if 的分支;他们之间的关系是同级别的;
或者说是同一类的;都是a;



4.8 switch-case 分支语句


之前咱们说到 说循环 一般 只有两种结构 if

现在说switch

首先写一下 switch结构的形式:

!!

#include <stdio.h>
int main(){
  char a;
  scanf("%c",&a);
  switch(a) {
  case 'a' :printf("y=-1\n");break;
  case 'b':printf("y=0\n");break;
    default:break;
  }return 0;
}

1670489669862.jpg

switch (表达式)

{case ‘整数型’: 语句1;break;

case ‘整数型’ : 语句2;break;

case ‘整数型’ : 语句3;break;

case ‘整数型’ : 语句4;break;

case ‘整数型’ : 语句5;break;

default :语句;

}

#include <stdio.h>
int main(){
  int a;
  scanf("%d",&a);
  switch(a>0) {
  case 1 :printf("y=-1\n");break;
  case 0 :printf("y=0\n");break;
    default:break;
  }return 0;
}
如果是是数据是整数那么可以不用打单撇号;直接写

switch (表达式)

{case 整数型: 语句1;break;

case 整数型 : 语句2;break;

case 整数型 : 语句3;break;

case 整数型 : 语句4;break;

case 整数型 : 语句5;break;

default :语句;

}


什么是switch 首先他就是为了实现 多分支结构选择 ;

表达式里面 ,什么表达式都行. 只要给switch 返回 一个结果必须返回整数型 (因为case 后面 只能是整数型 整数或者字符 比如 case1 ;case ‘A’😉;


执行过程:

返回一个结果 他就在语句里面找 找到这个一样的 从这儿去执行语句;

这一句 下一句 下下句 ;直到遇到break ;跳出 switch ;跳到 这个大括号右边 那个位置

break 你想加就加 不加就往下执行;

也可以 好几个 case 用一个语句 。


4.9 例题


题目 :判断是否为润每年

#include <stdio.h>
int main(){
  int a;
  int i;
  for(i=0;i<=i+1;i++){
  scanf("%d",&a);
  if((a%4==0&&a%100!=0)||(a%400==0))
  printf("%d是闰年",a);
  else printf("%d不是闰年",a);
  }
  return 0;
  }
  我制造了一个死循环;
 这一题就是对运算符一个综合运用;首先看总体的意思,
 怎么执行的呢;首先从左到右;
 遇到括号先执行括号内部,a%4处理结果;然后是a%4==0处理结果1;
 然后遇到&&知道要继续执行后面才能回头执行&&;
 处理a%100 得出结果;处理a%100!=0得出结果1;
 然后处理&&;得出结果加入为1;
 然后遇到||,系统判断整个表达式结果为1;执行结束;
 如果第一个结果不是1,继续执行;


1670489716755.jpg

相关文章
|
网络安全 知识图谱 Python
自监督学习在多模态数据融合中的实践与探索
【8月更文第9天】自监督学习(Self-Supervised Learning, SSL)是一种机器学习方法,它利用未标记的数据来训练模型。这种方法通过设计预训练任务来挖掘数据的内在结构,无需人工标注,从而减少了对大量标注数据的依赖。当应用于多模态数据时,自监督学习可以帮助模型学习到不同模态之间的关联性,进而提高模型在特定下游任务上的表现。
771 7
|
18天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
10天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
13天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
1090 38
|
12天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
850 56
|
10天前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
725 11
|
4天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
298 4