大家好这里是三岁,C语言是各类语言的基础,由于个人学习需要特别开设了C语言基础专题,内容不一定深入,都是基础知识,还是白话C语言,最简单的方式带领大家学习不是那么容易理解的C语言!(该系列应该每周末更新直到系列结束,有问题的及时留言,会马上修改!)
上一篇:C语言程序设计基础(三)传送门
选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。
在C语言中常用的选择结构(判断语句)也就是我们经常说的if
语句和switch
语句。
if语句
C语言中有3种if
语句分别是if
、if-else
、if- 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~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
嵌套
在某个判断语句中存在其他的判断语句。
注意事项:分清楚那个语句块属于哪个判断,在实际过程中把没有必要的内容进行筛选,直接忽略即可。特别要注意没有添加{}的语句。
条件运算符(?:语句)
- 语法
表达式?真:假;
先判断表达式的逻辑值如果逻辑值为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
白话解析:输入一个值a,判定a的内容然后输出对应的值如果内容不对就输出输入错误。
判断语句注意事项:
注意语句的范围是大括号还是分号结束;
如果里面有嵌套内容,注意嵌套的语句范围;
选择合适的语句和方法,及时修改和调整内容。
今天的资料就整理到这里了,非常感大家的关注,如果好就来个一键三连吧!