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

187 阅读8分钟

[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时无实数根
在这里插入图片描述

输入 1 -5 6时有两个实数根分别是3和2
在这里插入图片描述

代码白话解析:

定义需要的值,类型为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~1001
100~50095
500~10009
1000~50008
大于500075

书写思路:
先定义值:打折是小数就定义浮点型,需要输入的结果,输出的结果,和打折的折扣数(一共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
在这里插入图片描述

嵌套

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

条件运算符(?:语句)

  • 语法
表达式?真:假;

先判断表达式的逻辑值如果逻辑值为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语句。如果没有遇到继续顺序执行。
  • 经典案例:

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

成绩等级成绩范围
A85~100
B70~84
C60~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
在这里插入图片描述

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

判断语句注意事项:
注意语句的范围是大括号还是分号结束;
如果里面有嵌套内容,注意嵌套的语句范围;
选择合适的语句和方法,及时修改和调整内容。

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

[C语言学习]循环结构(for、while循环)传送门