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

相关文章
|
8月前
|
数据采集 人工智能 物联网
教AI学会说'我是小喵'竟然这么神奇?LlamaFactory微调揭秘
想让AI助手记住自己叫什么名字?就像教小孩背诵身份证信息一样简单!通过LlamaFactory的SFT微调,你的AI不仅能记住自己是谁,还能在千万个问题中准确回答身份信息。从技术小白到微调高手,一篇文章搞定! #人工智能 #LlamaFactory #模型微调 #AI助手
681 2
|
21天前
|
人工智能 自然语言处理 前端开发
把整个测试流程交给 AI 是什么体验?
开源AI测试平台ai_test_sheng,用自然语言一句“帮我测订单流程”,AI自动完成需求分析、页面探索、用例设计、执行、报告及UI脚本生成等8阶段全流程。支持Playwright真实浏览器操作、SSE流式对话、L1-L3故障自愈、多会话隔离与DeepSeek/Cluade双引擎。MIT协议,Docker一键部署,附在线体验(admin/admin123)。
205 3
|
6月前
|
JSON 小程序 安全
一文读懂:微信小程序云数据库直连原理与使用指南
本文详解微信小程序云开发模式:前端通过`wx.cloud`直接调用云数据库(MongoDB),依托微信私有协议自动鉴权与安全规则实现免后端开发。涵盖原理架构、调用流程、CRUD示例及权限配置,适合MVP及轻量应用,兼顾高效性与安全性。(239字)
1422 0
|
6月前
|
机器学习/深度学习 PyTorch TensorFlow
从 0 到 1 写一个神经网络训练循环:别再只会 `model.fit()` 了
从 0 到 1 写一个神经网络训练循环:别再只会 `model.fit()` 了
547 7
|
7月前
|
人工智能 语音技术 云计算
书尖 AI 功能实测|基于阿里云 AI 技术,与微信读书阅读体验对比
本文深度实测阿里云赋能的智能阅读工具“书尖AI”,对比微信读书,客观呈现其1.2亿册书库、双人AI播客听书、2分钟极速解读等核心优势,展现高效轻松的智能阅读新体验。(239字)
1096 8
|
8月前
|
人工智能 自然语言处理 前端开发
建造者还是饲料投喂者?AI Agent搭建师职业焦虑与“工具反噬”的幽灵
当AI Agent自主迭代,程序员正面临“工具反噬”的焦虑:我们是智能体的建筑师,还是数据饲养员?本文剖析职业危机根源,揭示从编码者到“人机指挥家”的进化之路,探寻人类在智能洪流中不可替代的价值锚点——意图、判断与创造力。
332 3
|
8月前
|
人工智能 前端开发 JavaScript
7.4万星开源项目濒危:Tailwind裁员75%背后,是AI狂欢下的基础工具生存危机
凌晨两点,Tailwind CSS创始人Adam宣布裁员75%,核心团队仅剩5人。尽管GitHub星标超7.4万,用户数百万,却难逃商业化困境。AI浪潮虹吸人才与资本,开源生态的“免费陷阱”浮出水面。Tailwind的危机,是整个开源世界的缩影:我们依赖开源,却不愿为其买单。当理想遭遇现实,可持续模式何在?这不仅是技术问题,更是对开发者社区的叩问——数字基建的价值,该如何被看见与守护?
|
8月前
|
人工智能 算法
卓伊凡 · 从技术底层拆解AI音乐检测各个参数的作用和意义以及检测原理
卓伊凡 · 从技术底层拆解AI音乐检测各个参数的作用和意义以及检测原理
932 0
|
资源调度 前端开发 算法
鸿蒙OS架构设计探秘:从分层设计到多端部署
本文深入探讨了鸿蒙OS的架构设计,从独特的“1+8+N”分层架构到模块化设计,再到智慧分发和多端部署能力。分层架构让系统更灵活,模块化设计通过Ability机制实现跨设备一致性,智慧分发优化资源调度,多端部署提升开发效率。作者结合实际代码示例,分享了开发中的实践经验,并指出生态建设是未来的关键挑战。作为国产操作系统的代表,鸿蒙的发展值得每一位开发者关注与支持。
|
机器学习/深度学习 存储 自然语言处理
魔搭社区每周速递(9.1-9.7)
182个模型、211个数据集、38个创新应用、6篇应用文章
魔搭社区每周速递(9.1-9.7)

热门文章

最新文章