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

简介: [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的内容然后输出对应的值如果内容不对就输出输入错误。


判断语句注意事项:

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

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

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


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



目录
相关文章
|
15天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
|
1月前
|
Serverless C语言
C语言程序通常具有以下基本结构
C语言程序通常具有以下基本结构
10 0
|
1月前
|
C语言
C语言选择结构
C语言选择结构
17 0
|
1月前
|
存储 C语言
C语言顺序结构:基础与实践
C语言,作为一种广泛使用的编程语言,其程序结构可以分为三种基本类型:顺序结构、选择结构和循环结构。在这篇文章中,我们将重点讨论顺序结构的概念、特点以及如何在C语言中实现顺序结构的程序设计。
39 1
|
1月前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
1月前
|
C语言
C语言选择结构
C语言选择结构
17 0
|
18天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
1月前
|
C语言
C语言最基本程序控制结构
C语言最基本程序控制结构
14 0
|
1月前
|
存储 Serverless C语言
C语言程序的结构
C语言是一种广泛使用的编程语言,其程序结构清晰,易于理解。下面我们将详细探讨C语言程序的基本结构,并通过一个示例代码来展示这些组成部分是如何协同工作的。 一、C语言程序的基本结构
14 0
|
1月前
|
C语言
c语言中选择结构和条件判断
c语言中选择结构和条件判断
19 0