[C语言学习]选择结构(判断语句)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: [C语言学习]选择结构(判断语句)

大家好这里是三岁,C语言是各类语言的基础,由于个人学习需要特别开设了C语言基础专题,内容不一定深入,都是基础知识,还是白话C语言,最简单的方式带领大家学习不是那么容易理解的C语言!(该系列应该每周末更新直到系列结束,有问题的及时留言,会马上修改!)


上一篇:C语言程序设计基础(三)传送门

选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。

在C语言中常用的选择结构(判断语句)也就是我们经常说的if语句和switch语句。


if语句



C语言中有3种if语句分别是ifif-elseif- else if -else(单分子、双分支、多分支)三种,让我们一起来看一下吧。


if(单分支结果)


if语句是我们的单分支语句,可以对内容进行判定。

  • 语法:


if 判断表达式:
    {
    语句块;
    }


白话:if可以用如果代替,解读上面的语法就是:假如判定表达式成立则执行语句块

  • 计算顺序解读
    先计算表达式然后判定表达式的真假。
    如果是真(结果等于1)则执行语句块。
    如果是假(结果等于0)则直接跳过当前模块。


  • 判定模块范围
    1、if后面有{}则整个if语句到花括号(大括号)结束。
    2、如果没有{}则到第一个分号结束。


第一类:

#include<stdio.h>
main()
{
  int a=12;
  int b;
  if(a<=15){  //if语句起始位置
    b=a+5;
    printf("b=%d",b);
  } //if语句结束位置
}


结果:15

语义说明:a=12;当a<15时执行b被(a+5)赋值;输出b的值。


第二类:

#include<stdio.h>
main()
{
  int a=12;
  int b=10;
  if(a<=5)//if语句起始位置
    b=a+5;//if语句结果位置
  printf("b=%d",b);  
}


结果:10

语义说明:a=12,b=10;假如a<10则执行把(a+5)赋值给b否则跳出if语句,执行输出b的值。(这里if没有判断成功所以b还是被10赋值不是被(a+5)赋值)


注:当语句组,只有一个语句时,大括号(花括号)可以省略。


if-else(二分支结构)


if-else语句是双分支语句


  • 语法
if(表达式){
    语句块1;  
} 
else{
  语句块2; 
}


白话语句解析:假如表达式成立则执行语句块1的内容,不成立则执行语句块2的内容。


  • 计算顺序解读
    先计算表达式的逻辑值,
    如果结果为真(值为1)就运行语句块1的内容。
    如果结果为假(值为0)就运行语句块2的内容。


  • 模块的范围判断:
    模块的范围和大括号有关(花括号),如果有大括号以对应的大括号结束为if语句终止(对应的!有些时候有嵌套,所以一定是对应的内容)如果没有大括号那就是最近的一个分号为语句的终止位置。


  • 经典案例解析:


输入一元二次方程的a、b、c的值求解x1、x2的实数根(仅限实数)

思路解析:

首先解一元二次方程的更需要先求然后通过的大小是否大于0判断结果。那么话不多说,上代码。


#include<stdio.h>
#include<math.h>  //添加函数库
int main()
{
  double a,b,c,x1,x2,delta;
  printf("分别输入a、b、c的值:");
  scanf("%lf%lf%lf",&a,&b,&c);
  delta=b*b-(4*a*c);// 求△的值 
  if(delta>=0){
    x1=(-b+sqrt(delta))/(2*a);//计算x1的值
    x2=(-b-sqrt(delta))/(2*a);//计算x2的值
    printf("x1=%lf,x2=%lf",x1,x2);
  }
  else{
    printf("该函数没有实数根!"); 
  }
  return 0;
}

输入 2 4 6时无实数根


202103271925287.png


输入 1 -5 6时有两个实数根分别是3和2


20210327192610913.png


代码白话解析:

定义需要的值,类型为double,人机交互对话添加abc的值。

计算的值为 b2-4ac 并把计算结果赋值给delta

判断如果delta大于0则继续计算x1和x2,分别使用(-b正负△)/2a并把结果赋值给x1、x2然后输出结果

如果小于0则输出没有实数根


只需要把if使用如果进行替代即可。


if-else if -else(多分支结构)


  • 语法
if(表达式){
   语句1; 
} 
else if(表达式2){
  语句2; 
}
{
  …… 
}
else if(表达式n){
  语句n; 
} 
else{
  语句n+1; 
}


白话语句解析:假如表达式1成立则执行语句块1的内容,否则如果表达式2成则运行语句块2的内容,以此类推直到表达式n为止。以上都不满足就运行语句块n+1。

如果运行了某个语句块自动结束整个判断语句(就满足一个条件就可以结束了(撤退了))


  • 执行过程:
    按顺序计算表达式,直到出现第一个计算结果为真(结果值为1)的表达式i,然后执行对应的语句i,执行结束以后判断结束。
    如果没有结果为真,则执行最后的else语句(n+1)语句。
  • 模块范围和之前的一样先判断大括号(花括号)再查看分号。
  • 经典案例解析
    一家商店开业酬宾,已知购买价值超过100元开始打折具体打折方式(如下图)计算打折需要支付的金额:


购买金额 折扣数(单位:折)
0~100 1
100~500 95
500~1000 9
1000~5000 8
大于5000 75


书写思路:

先定义值:打折是小数就定义浮点型,需要输入的结果,输出的结果,和打折的折扣数(一共3个值!)

第二步进行输入:输入实际消费金额并用值进行接收。

第三步进行判定:查看输入内容属于哪个范围然后给出对应的折扣数。

第四步计算并输出:计算打折后的内容并输出。


#include<stdio.h>
int main()
{
  double a,price,d;//第一步定义
  printf("请输入实际支付的金额:");
  scanf("%lf",&a);//第二步输入(前面那个输出属于人机交互)
  //第三步:判定折扣数
  if(a<100){
    d=1;
  }
  else if(a<500){
    d=0.95; 
  }
    else if(a<1000){
    d=0.9; 
  }
  else if(a<5000){
    d=0.8; 
  }
  else{
    d=0.75;
  }
  //第四步计算并输出结果
  price=a*d;
  printf("实际需要支付:%.2f",price);
  return 0;
}


结果:输入128得到值:121.60


20210327200317347.png


嵌套


在某个判断语句中存在其他的判断语句。

注意事项:分清楚那个语句块属于哪个判断,在实际过程中把没有必要的内容进行筛选,直接忽略即可。特别要注意没有添加{}的语句。


条件运算符(?:语句)



  • 语法
表达式?真:假;


先判断表达式的逻辑值如果逻辑值为1(结果是真)则输出冒号前面的真值,如果值为0(结果假)则输出冒号后面的假值


相对应代码:

if(表达式){
    真;
}
else{
   假;
}


  • 注意事项:要分清楚?所对应的:


switch语句



  • 语法结构
switch(表达式){
case 常量表达式1 : 语句1;[break;]
case 常量表达式2 : 语句2;[break;]
……
case 常量表达式n : 语句n;[break;]
default:语句n+1;
}


白话:个人表示不是很喜欢用这种方式(个人观点主要是caes和default这种单词太多记不住)

switch后面添加表达式,case后面跟着常量(不能够是表达式!)

如果输入的结果和常量对应了则执行后面的语句块直到遇到break;语句或switch语句结果。

如果没有对应则执行default里面的语句组(代码块)。

如果没有对应也没有default代码块则不执行里面的该判断语句。


  • 执行过程:
    计算表达式;
    将表达式的结果与case后面的值进行顺序比较直到出现第一个相等的值i,执行后面的语句组,查看是否遇到break语句如果遇到结果switch语句。如果没有遇到继续顺序执行。
  • 经典案例:


输入成绩的等级输出成绩等级对应的范围。


成绩等级 成绩范围
A 85~100
B 70~84
C 60~69
D <60


书写分析:

第一步输入值

第二步进行判定输出结果

#include<stdio.h>
int main()
{
  char a;
  printf("请输入对应的等级:");
  scanf("%c",&a);
  printf("对应的等级是:");
  switch(a){
    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("输入错误\n");
  } 
}


输入结果为A输出结果是85~100

20210327203658757.png


白话解析:输入一个值a,判定a的内容然后输出对应的值如果内容不对就输出输入错误。


判断语句注意事项:

注意语句的范围是大括号还是分号结束;

如果里面有嵌套内容,注意嵌套的语句范围;

选择合适的语句和方法,及时修改和调整内容。


今天的资料就整理到这里了,非常感大家的关注,如果好就来个一键三连吧!



目录
相关文章
|
2月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
71 16
|
6月前
|
C语言
【C语言基础篇】结构控制(中)循环结构
【C语言基础篇】结构控制(中)循环结构
|
2月前
|
编译器 C语言 Python
C语言结构
C语言结构
18 0
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
17 0
|
3月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
118 10
|
3月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
104 7
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
3月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。