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

Day-15【选择与循环】选择结构-if语句

目录

一、if语句

(1)单分支选择结构

(2)双分支选择结构

(3)多分支选择结构

(4)if-else的嵌套使用

二、开关分支语句(switch)

(1)一般形式

(2)说明:


一、if语句

(1)单分支选择结构

格式:

if(条件) -> 任意格式:非0 -> 为真 0->为假

{语句块} -> 注意当语句块只有一条语句时,可以省略不写{}

规则:如果条件为真,则执行语句块,否则跳过

例如:

if(x>y)

printf("%d",x);

说明:

① if后面的表达式任意类型,语句可以是复合语句

② if下只有一条语句时,可以省略大括号不写

③ if(x)等价于if(x!=0)

if(!x)等价于(x==0)

例题:

求一个数的绝对值
#include <stdio.h>
main()
{int x,y;printf("enter an integer:");scanf("%d",&x);y=x;  //将x的值赋给y;if(y<0)   //判断y是否小于0y=-y;   //若小于0就去相反数printf("\ninteger:%d-->absolute value:%d\n",x,y);
}
运行:
enter an integer: -12
integer: -12 -->absolute value: 12

(2)双分支选择结构

格式:

if (expression条件)
{语句块1;   //只有一句话,大括号可以省
}
else
{语句块2:
}
规则:如果条件为真,则执行语句块1,否则执行语句块2;
if语句例:
#include <stdio.h>
main()
{int a,b;printf("输入a:");scanf("%d",&a);    //输入a的值printf("输入b:");scanf("%d",&b);  //输入b的值if(a==b)   //判断a是否等于bprintf("a=b\n");    //真->输入a==belseprintf("a!=b\n");   //假->输出a!=b
}

(3)多分支选择结构

格式:
if (条件1){语句块1}
else if(条件2){语句块2}
else if(条件3){语句块3}
else 语句4
规则:如果条件1成立,执行语句块1.条件2 成立,执行语句2条件3成立,执行语句3都不成立,执行语句4
例:
if(salary>1000)//价格index=0.4;//折扣
else if(salary>800)index=0.3;
else if(salary>600)index=0.2;
else if(salary>400)index=0.1;
elseindex=0;
成绩在: 80-100  A70-79  B60-69  C0-59   D
要求:输入一个同学的成绩,输出它的级别
#include <stdio.h>
main()
{int grade;scanf("%d",&grade);
if(grade>100||grade<0)
printf("非法数值")//限制输入数字的范围if(grade>=80&&grade<=100)printf("A");else if(grade>=70)printf("B")else if(grade>=60)printf("C");else printf("D");
}
键盘上的字符种类分为:
控制字符:__<32
数字:'0'-'9'
大写字母:'A'-'Z'
小写字母:'a'-'z'判断输入字符的种类:
#include <stdio.h>
main()
{char c;printf("输入一个:");ch=getchar();if(ch<32)printf("是控制字符\n");else if(ch>'0'&&c<='9')printf("是数字字符\n");else if(ch>='A'&&c<='Z')printf("是大写字符\n");else if(ch>='a'&&c<='z')printf("是小写字符\n);else printf("其他");}

(4)if-else的嵌套使用

if-else配对原则:缺省{}时,else总是和它上面离最近的未配对的if相配

if(...)if(...)if(...)else...else...
else...
输入两数并判断其大小关系:
#include <stdio.h>
main()
{int x,y;printf("输入x,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");
}

二、开关分支语句(switch)

仍然是一个多分支选择结构

(1)一般形式

switch(表达式)   ->表达式不能为小数   表达式中和谁相等,就执行谁后面的语句
{
case e1:语句1;[break;]
case e2:语句2;[break;]    //e都为常量,不能变化。是固定的值,也不能是小数
case e3:语句3;[break;]    //e就是常量表达式
case e4:语句4;[break;]
case e5:语句5;[break;]
[default:语句;[break;]]  默认,除此之外,都执行它。放到哪里没关系,都可以执行
}

(2)说明:

(1)switch后的表达式以及case后的表达式均不能是实型,可以是整型或字符型等,case后的表达式必须为常量表达式,且值必须互不相同

(2)break是跳出整个复合语句

(3)case后可包含多个可执行语句,且不必加{}

(4)switch可嵌套

(5)default的功能是在其它case后找不到对应常量,则执行default后面语句

(不必再最后一句)

例:
switch(score)
{case 5:printf("very good");case 4:printf("good");case 3:printf("pass");case 2:printf("fail");default: printf("data error");
}
此时:
运行结果:score为5时,输出:very good good pass fail data error
输入一个月份,输出相对应的季节:
#include <stdio.h>
void main()
{int month;scanf("%d",&month);switch(month){case 1:printf("春天");break;case 2:printf("春天");break;case 3:printf("春天");break;case 4:printf("夏天");case 5:printf("夏天");case 6:printf("夏天");case 7:printf("秋天");case 8:printf("秋天");case 9:printf("秋天");case 10:printf("冬天");case 11:printf("冬天");case 12:printf("冬天");default:printf("error"); 这里加不加break都可以}}
如果month是5,则运行结果就是匹配到5后面的结果都输出
执行下面所有的可执行语句
如果想只输出一个对应的结果,需要在固定的输出后面加break,表示跳出循环合并:case 1:case 2:case 3:printf("春天");break;
当输入1时,则开关进入1中,找不到接着继续往下找,知道case3输出春天并跳出。实现了合并功能
输入123都是春天

!!!一定注意:有break和没break的规则不同

读个程序:
void main()
{int x=1,y=0,a=0,b=0;switch(x)    //1{switch(y)   //0{case 0:a++;break;  //匹配此条,执行a++  此时a=1.跳出此层case 1:b++;break;}   注意:这里没有break则接着后面的语句执行:case 2:a++;b++;break;   //执行a++,b++   a=2,b=1碰到break跳出case 3:a++;b++;}printf("\na=%d,b=%d",a,b);   最终输出a=2,b=1
}运行结果:a=2,b=1


总结:

1、☆= ☆!=0

!☆= ☆==0

2、if-else配对原则:缺省{}时,else总是和它上面离他最近的未配对的if相配对

3、(1)switch后面括号中可以是常量或变量表达式,但不能是实型数据

(2)case后面是常量表达式,且不能是实型,且不能有重复

(3)break、default的功能需要注意

4、注意格式书写

switch()

{ case__:____;

__:

}

http://www.xdnf.cn/news/10725.html

相关文章:

  • Q:知识库-文档的搜索框逻辑是怎样的?
  • 解决VS Code误报Java问题的终极方法
  • 深入理解 Java 环境变量:从原理到实战配置指南
  • LangChain系列之LangChain4j集成Spring Bot
  • AI“实体化”革命:具身智能如何重构体育、工业与未来生活
  • Android 中的 DataBinding 详解
  • 在图像分析算法部署中应对流行趋势的变化|文献速递-深度学习医疗AI最新文献
  • 大模型赋能:金融智能革命中的特征工程新纪元
  • 兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题
  • Celery 核心概念详解及示例
  • 深入解析C++引用:从别名机制到函数特性实践
  • 【语义分割专栏】2:U-net原理篇(由浅入深)
  • Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化
  • 【结构型模式】装饰器模式
  • Nginx+Tomcat 负载均衡群集
  • Ubuntu 22.04 安装 Nacos 记录
  • WordPress 6.5版本带来的新功能
  • 腾讯 ovCompose 开源,Kuikly 鸿蒙和 Compose DSL 开源,腾讯的“双”鸿蒙方案发布
  • 云原生时代 Kafka 深度实践:05性能调优与场景实战
  • Vue3中Axios的使用-附完整代码
  • sqlite3 命令行工具详细介绍
  • 虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代
  • DNS (Domain Name System) 域名系统 将域名解析为 IP 地址
  • OCC笔记:TopoDS_Edge上是否一定存在Geom_Curve
  • 【Vmware】虚拟机安装、镜像安装、Nat网络模式、本地VM8、ssh链接保姆篇(图文教程)
  • J. Adv. Res. | DAP-seq助力解析大麦HvbZIP87基因让小麦抗病又高产的新机制
  • 吃透 Golang 基础:数据结构之 Map
  • UGUI Text/TextMeshPro字体组件
  • 从一堆数字里长出一棵树:中序 + 后序构建二叉树的递归密码
  • chromedriver 下载失败